写个帖子,记录一下。也分享一下将全局变量放置在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文件。 可以清晰看到sys_reg[]数组的位置。到这里,我们的需求也就算完成了! 其实,并没有完成!因为我们占用了RAM最后的0x200字节,所以,需要在选项卡中将此0x200去除,即在RAM的长度要减去0x200,如下图所示: 在AT32F437上面的运行的效果就是这样的: 好了,本篇就到这里了。祝大家愉快
|