概述
1、引言
在实际项目开发中经常有要求将某些数据固定生成在芯片的某个地址中,我们称之为定位,本文基于IAR Embedded Workbench for Arm 8.32.1编译器,S32K144芯片实现,以将一个16长度的数组定位到0x0000FB00地址为例。其他芯片其他编译器可参考该套路。
2、改C代码
确定需要定位的数据,以testData为例:
unsigned char testData[16] =
{
1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16
};
添加关键字,将其定位到期望的位置:
const unsigned char testData[16] __attribute__((section (".testsection"))) =
{
1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16
};
这个很好理解__attribute__即at的意思,后面的(section (".testsection"))是期望将其放置的位置,section为链接文件的关键字,testsection为自定义的段。所以要继续修改链接文件与上述对应。另外数组定义前要加const关键字,否则不会成功。
3、改链接文件
针对上述编译器与芯片使用的链接文件为.icf文件。
首先,添加上述的自定义段testsection:
place in irom_testData_region {readonly section .testsection };
该句意思是将自定义的testsection段添加到irom_testData_region区域,irom_testData_region也是自定义的。
其次,设置自定义区域irom_testData_region地址:
define region irom_testData_region = mem:[from 0x0000FB00 to 0x0000FB0F];
这个也很好理解,并将上述流程穿起来就实现了数据的地址定位,但还没结束。
最后一步,最为关键,只进行上述设置你会发现生成的hex/s19文件在FB00地址并没有数据,因为还缺一条指令:
keep {section .testsection};
keep关键字可保证该自定义段不被优化。
效果展示,生成的s19文件如下,可看到FB00地址已生成testData相应数据:
更多内容欢迎关注我的公众号,任何技术 问题与我讨论:
最后
以上就是干净大炮为你收集整理的IAR for ARM编译器使用技巧之数据定位 的全部内容,希望文章能够帮你解决IAR for ARM编译器使用技巧之数据定位 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复