232|1

17

帖子

0

资源

一粒金砂(中级)

华大HC32F460单片机变量定位到SRAMH快速SRAM内 [复制链接]

华大HC32F460单片机内部有一共192KB的SRAM,其中有32KB的快速SRAM区,SRAMH。所谓SRAMH快速SRAM,就是在CPU运行在高速频率下,比如200Mhz,读取内部SRAM无需等待CPU时钟周期,如手册中的下图: 其中只有SRAMH在全频段内是无需CPU等待的,其他SRAM在100Mhz以上都需要等待至少1个CPU周期。所以如果做一定的数据算法,需要大量频繁使用RAM,最好把这些数据放在RAMH内,以增加CPU读取RAM速度。本贴总结一个把4K数据内存数组放在SRAMH的方法。下图是HC32F460的内部SRAM地址layout:

更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
在程序中我要把一组4K数据放在0x1FFF8000地址开头的4K size空间内。方法就是使用ARM编译器的属性功能。uint8_t gReserve[4096] __attribute__((section(".ARM.__at_0x1FFF8000")));以上一段代码就是定位4KB大小的gReserve数据到0x1FFF8000内。另外我们在华大默认工程内编译前,还需要把编译器预留的RAM区去掉0x1FFF8000开头 大小为4KB的区域。因为默认编译选项内设置了从0x1FFF8000开头的ZI区,所以默认工程编译会报错。编译选项修改前如图:
修改后编译选项:我们看到IRAM1的起始地址和大小都相应的做了对应调整,这样编译程序才不会报错。  编译后查看.map 看看0x1FFF8000地址是怎么分配的:看来我们分配成功了,我们用程序来验证一下:在程序开头我们添加以下代码打印出我们gReserve的地址。DPRINTF("[%s:%d]:gReserve addr:0x%x\n", __FUNCTION__, __LINE__, gReserve);看一下串口输出:看来我们已经验证没有问题了,gReserve被分配在了内部SRAMH快速   RAM内(0x1FFF8000)。 最后,当然不一定非得变量才能通过__attribute__方式放在内部RAM内,其实函数或某段代码也是可以通过__attribute__来放置在RAM内。另外整个一个.c文件编译出来的.o也可以通过keil file option的方式放在RAM内。比如如下图: 


回复

6203

帖子

0

资源

五彩晶圆(初级)

编译选项修改前如图:

少图


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表