MDK中绝对地址__attribute__((at(address)))使用疑问?

2019-12-27 18:40发布

本帖最后由 ubuntuman 于 2012-6-3 11:15 编辑

使用MDK 4.12 想在FLASH地址0X0807F800的地方存放一个数据,故使用__attribute__((at(address)))函数,具体情况如下:  

(软件仿真情况下,硬件还没试验板子坏了)

1.   使用  const int x2 __attribute__((at(0x0807F600)))=10; /* RO */

Program Size: Code=8572 RO-data=513672 RW-data=308 ZI-data=2668       RO-data=513672   没有使用前RO-data=404       为什么??

   2.jpg (61.96 KB, 下载次数: 5) 下载附件 2012-6-2 15:58 上传
查看FLASH 在我要写的地址后跟随了一些其他数据,这又是为什么?  这些数据时那里来的。我并没有操作啊。

2.  不使用const关键字 依然如上;

3.  int x1 __attribute__((at(0x0807F800)));     不赋值的话,一切正常,但没意义了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
baifern
1楼-- · 2019-12-27 19:43
我也遇到了同样 的问题了
ubuntuman
2楼-- · 2019-12-27 22:13
这么长时间了这个疑问还是没有解决? 希望看了的坛友都发表下自己的意见,或描述下自己的发现,谢谢。  期待高人出现。
netting
3楼-- · 2019-12-27 22:54
const int __attribute__((at(0x0807F600)))   x2 =10; /* RO */

sjnh
4楼-- · 2019-12-27 23:45
MDK没用过,用IAR也会出现这种现象;

例如 定义1个变量在地址 100000处,编译完成后RO大小就是100000;  同理都是这样;
我曾定义变量在0x20000000这种地址,编译的时候输出文件一直增加,增加到几十M后我强制停止了;
不想出现这种现象,只需把数据定义为不初始化就可以;

个人理解为了初始化数据,编程程序生成的初始化数据要达到你定义的地址;这样生成BIN文件烧写进去才能运行正确;不然FLASH怎么能初始化;
再具体就没有研究了;



hygbeyond
5楼-- · 2019-12-28 03:53
 精彩回答 2  元偷偷看……
Achin
6楼-- · 2019-12-28 05:23
你定义在那么远,下载工具在下载的时候,是要把这个地址区之前的区域全部擦除的。至于后面的那些数据,可能是编译器在拼接代码的时候没做好。

一周热门 更多>