碰到一个奇怪的问题!

[复制链接]
2606|13
 楼主| jlgcumt 发表于 2012-10-9 12:10 | 显示全部楼层 |阅读模式
定义了两个全局变量,static uint8 a;
static uint8 b;
在程序的某处给a赋值,发现b的值也跟着改变,比如
a = 3;
我接着下一句就打印b的值,中间没有任何打断,发现b跟着变为3了,怎么也想不明白,用的编译器是ads1.2,大家有没有碰到这样的情况呀!
阿南 发表于 2012-10-9 14:23 | 显示全部楼层
把代码切换到混合模式,看一下他们俩是否在共用同一内存,或对各自分配的内存监控一下。否则看看你输出函数的汇编结果。
这个问题你想是想不通的,必需实际去看,或者代码被优化了等等。
 楼主| jlgcumt 发表于 2012-10-9 15:20 | 显示全部楼层
2# 阿南 我把其中的一个类型改为16位的就好了,不知道为啥!
 楼主| jlgcumt 发表于 2012-10-9 15:21 | 显示全部楼层
不是共用一个内存,给b赋值的时候a不会跟着变,定义都是单独的。
nongfuxu 发表于 2012-10-9 15:53 | 显示全部楼层
本帖最后由 nongfuxu 于 2012-10-9 15:54 编辑
我接着下一句就打印b的值,中间没有任何打断,发现b跟着变为3了,怎么也想不明白,用的编译器是ads1.2,大家有没有碰到这样的情况呀!

是哪个神仙动了你ARM的内存?;P
阿南 发表于 2012-10-9 17:34 | 显示全部楼层
改成16bit的可以避开这个问题,不过还是希望楼主能够按照我2楼的建议,去查清原因
lai832 发表于 2012-10-9 17:43 | 显示全部楼层
打印a和b的地址看看,
是不是16位的U,刚好两个8位,
8+8=16了,
程序分配在同一个16位地址上(高低8位)
打印地址,什么都清楚了
airwill 发表于 2012-10-9 22:32 | 显示全部楼层
编译器不该犯这样的错误, 建议用二楼的办法看看.
如果看不明白汇编代码, 可以把生成的汇编代码贴上来让大家来分析.
chenyu988 发表于 2012-10-10 09:25 | 显示全部楼层
 楼主| jlgcumt 发表于 2012-10-10 22:29 | 显示全部楼层
8# airwill 应该是编译器的问题,结贴了!
LG2012GG 发表于 2012-10-11 21:07 | 显示全部楼层
发布一下程序
 楼主| jlgcumt 发表于 2012-10-11 22:16 | 显示全部楼层
11# LG2012GG 只是猜测,问题还没解决,唉!程序很大的,问题跟上面差不多?
 楼主| jlgcumt 发表于 2012-10-15 12:19 | 显示全部楼层
查了一下两个变量的地址,不一样,谁碰到过这种问题呢!
 楼主| jlgcumt 发表于 2012-10-15 21:01 | 显示全部楼层
大牛快来解决一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:善攻者,动于九天之上,善守者,藏于九地之下!

183

主题

733

帖子

4

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