c语言指定变量地址,C语言中 “_at()” 特殊地址定位详解

C语言中 “_at()” 特殊地址定位详解

在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面

指令为 __at ,使用方法如下

int variable __at(0x8000) = 100;

意为将variable变量定位到0x8000这个地址。

指令的目的是告诉链接器将指定地址定位到某个地址里面,在使用该功能的时候需要注意一点的是,地址的范围需要符合单片机的datasheet给出的地址映射表,

注意,如果地址超出了flash的最大范围,程序将无法得到这个值,例如一个256Kflash的芯片,在使用功能__at指令的时候,地址就不要超过256*1024了,否则你是找不到这个变量的。

下面以MB9AF310系列芯片为例,讲一下关于芯片的flash在内存中的映射,

e8fe3c7883d767651994822ae8b4fb4d.png

如图,flash被映射到了0x00000000这个地址上,以0x00100000结束,但是仍然需要看具体芯片的flash是多大的,这个地址只是310系列芯片的地址映射,如果超出了实际的地址,仍然不能找到变量。

keil的链接器最后会把变量放到生成文件的相应地址中去,在烧录的时候,如果是BIN文件,文件的字节地址会和flash的地址一一对应。用户定义的变量将被烧录到相应的flash的物理地址中。以上都是在没有MMU的情况的关于地址映射的解释,如果启用了MMU,情况也许会不一样,毕竟多了一层虚拟地址,实际上还能不能使用__at指令,我也不知道,后续笔者会继续钻研,更多关于__at指令的说明,可以直接在keil的帮助文件中找到。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值