打印

keil MDK C 问题求教

[复制链接]
2029|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
环境:MDK 4.12   STM32F103VBT6  整个工程就定义了一个常量,就一个Main函数。
download function:Erase full chip  // 整个芯片擦除;
芯片flash 地址0x8000000

定义10个flash型常量存储在0x8013000开始的位置,
疑问:从0x8013000开始后的第11个字节开始为何不是0xff。如截图所示

相关帖子

沙发
原野之狼| | 2011-2-22 18:47 | 只看该作者
可能是代码位置

使用特权

评论回复
板凳
ayb_ice| | 2011-2-22 19:21 | 只看该作者
谁规定那里一定要是0xff了
只有变量,难道没有程序吗

使用特权

评论回复
地板
airwill| | 2011-2-22 20:58 | 只看该作者
就是, 根据编译器的设置, 程序空间中通常未用的数据会填0出来. 只有空间之外的存储空间. 烧写器会置 FF 以提高编程速度.

使用特权

评论回复
5
ejack| | 2011-2-23 08:29 | 只看该作者
LZ的意思是为什么常量数组的末尾都被自动添加了0x00。

使用特权

评论回复
6
CreatAll| | 2011-2-23 09:15 | 只看该作者
while(abc[1]);何不while(1);
这样子写感觉好别扭,难不成这里面有啥学问?

使用特权

评论回复
7
ayb_ice| | 2011-2-23 09:27 | 只看该作者
while(abc[1]);何不while(1);
这样子写感觉好别扭,难不成这里面有啥学问?
CreatAll 发表于 2011-2-23 09:15

abc的内容可以被改变(通过程序或其它方式)

使用特权

评论回复
8
电子乌托邦|  楼主 | 2011-2-23 10:24 | 只看该作者
6# CreatAll
如果我不从主函数引用一下abc,编译器直接把这个数组优化掉了,这只是个测试工程,所以此处这样写。没任何意义。

使用特权

评论回复
9
电子乌托邦|  楼主 | 2011-2-23 10:27 | 只看该作者
3# ayb_ice
谢谢ayb_ice回复
此处应该不是程序代码,
为了避免这个疑问,我故意将abc数组开在了10000开始的位置,而且整个工程就只写了一个main函数,楼主位以介绍。
如果我将abc开在一个其他位置,前提是避开程序段,后面也会跟一串莫名的数据。

使用特权

评论回复
10
电子乌托邦|  楼主 | 2011-2-23 10:29 | 只看该作者
LZ的意思是为什么常量数组的末尾都被自动添加了0x00。
ejack 发表于 2011-2-23 08:29

谢谢兄台回复,
我的疑问正是如此!

使用特权

评论回复
11
泰山特曲123| | 2011-2-23 17:32 | 只看该作者
除了main函数,还有启动初始化代码;说不定,后面的0x00就是这些代码。

使用特权

评论回复
12
电子乌托邦|  楼主 | 2011-2-24 10:20 | 只看该作者
猜测:后面的信息应该是编译器自己带的,比如记录变量尺寸,应该和用户程序无关。结贴

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

粉丝