IAR for ARM编译器使用技巧之数据定位

 

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相应数据:

 

更多内容欢迎关注我的公众号,任何技术 问题与我讨论:

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值