为什么全局变量的地址被改成 0xffffffff?
全局变量的地址 应该 始终 不变的。可是 程序中一个全局变量的地址 在执行了 一个函数 后 就 变成 oxFFFFFFFF了。
而这个函数 并没有 使用这个全局变量。
这到底是什么原因??
我用的 编译器 是 IAR6.7
RE:为什么全局变量的地址被改成 0xffffffff?
再补充一下,我还发现 这个错误 同代码量的多少 还有关系。我如果在程序的后半部分,在出错语句的后面,就是 出错语句还没执行到的地方 随便去掉几个函数。编译后重新运行,就是正常的。RE:为什么全局变量的地址被改成 0xffffffff?
全局变量的地址应该不变啊,很奇怪:o楼主把代码贴上来
RE:为什么全局变量的地址被改成 0xffffffff?
unsigned int TempAddress=(unsigned int)(&TheFindPPSInteval);TheFindPPSInteval.HaveJustSetSynSignalFlag=2;
DOWNLOAD_INIT(); //下载本机初始信息
TempAddress=(unsigned int )(&(TheFindPPSInteval));
TheFindPPSInteval.HaveJustSetSynSignalFlag=0;
这就是部分代码。应该没啥问题。关键是 去掉程序的几乎是任意的小函数 ,代码就正确了
在DownLoad_init();函数前面 TempAddress得到的地址就是 正确=0x20011d88;
执行DownLoad_init();函数 后 TempAddress得到的地址就是=0xffffffff;.
下面的是反汇编的截图
RE:为什么全局变量的地址被改成 0xffffffff?
DOWNLOAD_INIT()里有类似mmu功能的语句吗?RE:为什么全局变量的地址被改成 0xffffffff?
没有,只有 向flash 写数据,还有memcpy,memset这些语句。到底什么情况下会修改全局变量的地址?因为是在stlink和jlink跟踪发现的。
页:
[1]