[STM32F1] 代码调试时出现奇葩问题,执行a=b后两个变量却不相等

[复制链接]
1655|6
 楼主| hoaei 发表于 2014-7-4 16:18 | 显示全部楼层 |阅读模式
运行了一段代码,如下
int command[4]={1000,1000,1000,1000};
int result[4];
......
......
result[0]=command[0];
result[1]=command[1];
result[2]=command[2];
result[3]=command[3];
......
......


上述是出现问题的部分代码
接着奇葩的事情出现了
在进行单步调试的时候,command的4个值仍然是1000,
但是result的4个值却是
1000
1000
1
-6783

这是在是不明白为什么
a=b这个语句执行完之后a会不等于b吗?????
还是说这根stm32这块板子有关系?
IJK 发表于 2014-7-4 16:54 | 显示全部楼层
软件仿真(simulator)应该不会出现这样的问题,在真实硬件环境里,中断会造成这种现象。
gxliu08 发表于 2014-7-4 17:01 | 显示全部楼层
IJK 发表于 2014-7-4 16:54
软件仿真(simulator)应该不会出现这样的问题,在真实硬件环境里,中断会造成这种现象。 ...

那要看中断是否对这几个变量有写操作。
mmuuss586 发表于 2014-7-4 17:12 | 显示全部楼层
仔细看下代码,是否哪里会影响;
香水城 发表于 2014-7-4 17:38 | 显示全部楼层
信息量太少,可能性太多。

最基本,这两个数组是全局还是局部变量啊。

看汇编,一句一句怎么执行的。

中断影响。。。没有volatile误优化。。。
wyde518 发表于 2014-7-4 17:42 | 显示全部楼层
香水城 发表于 2014-7-4 17:38
信息量太少,可能性太多。

最基本,这两个数组是全局还是局部变量啊。

同问
李富贵 发表于 2014-7-4 19:51 | 显示全部楼层
result[2]=command[2];
result[3]=command[3];

这两句话前面打个断点看看有没有执行,如果打不了断点说明编译器认为你这两句是毫无意义的废话,给优化掉了,完全没有可执行代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

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