[AT32F437] 全局变量放置在SRAM指定位置

[复制链接]
 楼主| 幻影书记 发表于 2025-6-18 11:29 | 显示全部楼层 |阅读模式
写个帖子,记录一下。也分享一下将全局变量放置在SRAM指定位置过程。由于项目需求需要,我须要将一组变量放置在SRAM指定位置,将其做为接口,供其他项目组调用使用。
刚开始的时候,查到资料,看到需要设置链接文件.sct来先划出来一部分区域。之后,再在变量定义时,将变量属性关联到对应的section。听起来新的知识点还挺多,学习成本着实有点高,但查看keil的帮助文档时,发现还有一个在编译阶段直接定义的更简洁的实现方案。
.ARM.__at_address
我以我们项目需求举例:需要在AT32F437的SRAM的尾端,要保存uint32_t sys_reg[128];故我的声明如下
uint32_t sys_reg[128] __attribute__((section(".ARM.__at_0x2005FE00"))) = {0};
看上去虽然仍是标明section,但不再需要我们手动编辑和处理.sct链接文件了。
接下来,返回AT32F437的工程,编译,查看map文件。
全局变量在SRAM定义_01.png
可以清晰看到sys_reg[]数组的位置。到这里,我们的需求也就算完成了!
其实,并没有完成!因为我们占用了RAM最后的0x200字节,所以,需要在选项卡中将此0x200去除,即在RAM的长度要减去0x200,如下图所示:
全局变量在SRAM定义_02.png
在AT32F437上面的运行的效果就是这样的:
全局变量在SRAM定义_03.png
好了,本篇就到这里了。祝大家愉快


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

本版积分规则

3

主题

49

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部