gaotekknd 发表于 2014-8-25 12:13:14

为什么全局变量的地址被改成 0xffffffff?

 全局变量的地址 应该 始终 不变的。
可是 程序中一个全局变量的地址 在执行了 一个函数 后 就 变成 oxFFFFFFFF了。
而这个函数 并没有 使用这个全局变量。
这到底是什么原因??
我用的 编译器 是 IAR6.7

gaotekknd 发表于 2014-8-25 14:44:25

RE:为什么全局变量的地址被改成 0xffffffff?

再补充一下,我还发现 这个错误 同代码量的多少 还有关系。我如果在程序的后半部分,在出错语句的后面,就是 出错语句还没执行到的地方 随便去掉几个函数。编译后重新运行,就是正常的。

霹雳之火 发表于 2014-8-25 15:07:34

RE:为什么全局变量的地址被改成 0xffffffff?

全局变量的地址应该不变啊,很奇怪:o
楼主把代码贴上来

gaotekknd 发表于 2014-8-25 15:59:37

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;.
下面的是反汇编的截图 

霹雳之火 发表于 2014-8-25 19:23:56

RE:为什么全局变量的地址被改成 0xffffffff?

DOWNLOAD_INIT()里有类似mmu功能的语句吗?

gaotekknd 发表于 2014-8-25 19:35:26

RE:为什么全局变量的地址被改成 0xffffffff?

没有,只有 向flash 写数据,还有memcpy,memset这些语句。到底什么情况下会修改全局变量的地址?因为是在stlink和jlink跟踪发现的。
页: [1]
查看完整版本: 为什么全局变量的地址被改成 0xffffffff?