你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
为什么全局变量的地址被改成 0xffffffff?
[复制链接]
gaotekknd
提问时间:2014-8-25 12:13 /
问答
是否解决:
全局变量的地址 应该 始终 不变的。
可是 程序中一个全局变量的地址 在执行了 一个函数 后 就 变成 oxFFFFFFFF了。
而这个函数 并没有 使用这个全局变量。
这到底是什么原因??
我用的 编译器 是 IAR6.7
赞
0
收藏
0
评论
5
分享
发布时间:2014-8-25 12:13
举报
请先
登录
后回复
5个回答
gaotekknd
回答时间:2014-8-25 14:44:25
a0a.1 0b0c
RE:为什么全局变量的地址被改成 0xffffffff?
再补充一下,我还发现 这个错误 同代码量的多少 还有关系。我如果在程序的后半部分,在出错语句的后面,就是 出错语句还没执行到的地方 随便去掉几个函数。编译后重新运行,就是正常的。
赞
0
评论
回复
支持
反对
霹雳之火
回答时间:2014-8-25 15:07:34
a0a.1 0b0c
RE:为什么全局变量的地址被改成 0xffffffff?
全局变量的地址应该不变啊,很奇怪
楼主把代码贴上来
赞
0
评论
回复
支持
反对
gaotekknd
回答时间:2014-8-25 15:59:37
a0a.1 0b0c
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;.
下面的是反汇编的截图
赞
0
评论
回复
支持
反对
霹雳之火
回答时间:2014-8-25 19:23:56
a0a.1 0b0c
RE:为什么全局变量的地址被改成 0xffffffff?
DOWNLOAD_INIT()里有类似mmu功能的语句吗?
赞
0
评论
回复
支持
反对
gaotekknd
回答时间:2014-8-25 19:35:26
a0a.1 0b0c
RE:为什么全局变量的地址被改成 0xffffffff?
没有,只有 向flash 写数据,还有memcpy,memset这些语句。到底什么情况下会修改全局变量的地址?因为是在stlink和jlink跟踪发现的。
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:为什么全局变量的地址被改成 0xffffffff?
RE:为什么全局变量的地址被改成 0xffffffff?
楼主把代码贴上来
RE:为什么全局变量的地址被改成 0xffffffff?
TheFindPPSInteval.HaveJustSetSynSignalFlag=2;
DOWNLOAD_INIT(); //下载本机初始信息
TempAddress=(unsigned int )(&(TheFindPPSInteval));
TheFindPPSInteval.HaveJustSetSynSignalFlag=0;
这就是部分代码。应该没啥问题。关键是 去掉程序的几乎是任意的小函数 ,代码就正确了
在DownLoad_init();函数前面 TempAddress得到的地址就是 正确=0x20011d88;
执行DownLoad_init();函数 后 TempAddress得到的地址就是=0xffffffff;.
下面的是反汇编的截图
RE:为什么全局变量的地址被改成 0xffffffff?
RE:为什么全局变量的地址被改成 0xffffffff?