源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-06-22 00:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C语言中 “_at()” 特殊地址定位详解
[b]C语言中 “_at()” 特殊地址定位详解[/b] 在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面 指令为 __at ,使用方法如下
int variable __at(0x8000) = 100;
意为将variable变量定位到0x8000这个地址。 指令的目的是告诉链接器将指定地址定位到某个地址里面,在使用该功能的时候需要注意一点的是,地址的范围需要符合单片机的datasheet给出的地址映射表, 注意,如果地址超出了flash的最大范围,程序将无法得到这个值,例如一个256Kflash的芯片,在使用功能__at指令的时候,地址就不要超过256*1024了,否则你是找不到这个变量的。 下面以MB9AF310系列芯片为例,讲一下关于芯片的flash在内存中的映射, [img]http://files.jb51.net/file_images/article/201705/201751492423773.png?201741492447[/img] 如图,flash被映射到了0x00000000这个地址上,以0x00100000结束,但是仍然需要看具体芯片的flash是多大的,这个地址只是310系列芯片的地址映射,如果超出了实际的地址,仍然不能找到变量。 keil的链接器最后会把变量放到生成文件的相应地址中去,在烧录的时候,如果是BIN文件,文件的字节地址会和flash的地址一一对应。用户定义的变量将被烧录到相应的flash的物理地址中。以上都是在没有MMU的情况的关于地址映射的解释,如果启用了MMU,情况也许会不一样,毕竟多了一层虚拟地址,实际上还能不能使用__at指令,我也不知道,后续笔者会继续钻研,更多关于__at指令的说明,可以直接在keil的帮助文件中找到。 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部