keil MDK C 问题求教

[复制链接]
2941|11
 楼主| 电子乌托邦 发表于 2011-2-22 18:27 | 显示全部楼层 |阅读模式
环境: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 以提高编程速度.
ejack 发表于 2011-2-23 08:29 | 显示全部楼层
LZ的意思是为什么常量数组的末尾都被自动添加了0x00。
CreatAll 发表于 2011-2-23 09:15 | 显示全部楼层
while(abc[1]);何不while(1);
这样子写感觉好别扭,难不成这里面有啥学问?
ayb_ice 发表于 2011-2-23 09:27 | 显示全部楼层
while(abc[1]);何不while(1);
这样子写感觉好别扭,难不成这里面有啥学问?
CreatAll 发表于 2011-2-23 09:15

abc的内容可以被改变(通过程序或其它方式)
 楼主| 电子乌托邦 发表于 2011-2-23 10:24 | 显示全部楼层
6# CreatAll
如果我不从主函数引用一下abc,编译器直接把这个数组优化掉了,这只是个测试工程,所以此处这样写。没任何意义。
 楼主| 电子乌托邦 发表于 2011-2-23 10:27 | 显示全部楼层
3# ayb_ice
谢谢ayb_ice回复
此处应该不是程序代码,
为了避免这个疑问,我故意将abc数组开在了10000开始的位置,而且整个工程就只写了一个main函数,楼主位以介绍。
如果我将abc开在一个其他位置,前提是避开程序段,后面也会跟一串莫名的数据。
 楼主| 电子乌托邦 发表于 2011-2-23 10:29 | 显示全部楼层
LZ的意思是为什么常量数组的末尾都被自动添加了0x00。
ejack 发表于 2011-2-23 08:29

谢谢兄台回复,
我的疑问正是如此!
泰山特曲123 发表于 2011-2-23 17:32 | 显示全部楼层
除了main函数,还有启动初始化代码;说不定,后面的0x00就是这些代码。
 楼主| 电子乌托邦 发表于 2011-2-24 10:20 | 显示全部楼层
猜测:后面的信息应该是编译器自己带的,比如记录变量尺寸,应该和用户程序无关。结贴
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部