打印
[STM32F1]

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

[复制链接]
1290|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 | 只看该作者
仔细看下代码,是否哪里会影响;

使用特权

评论回复
5
香水城| | 2014-7-4 17:38 | 只看该作者
信息量太少,可能性太多。

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

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

中断影响。。。没有volatile误优化。。。

使用特权

评论回复
6
wyde518| | 2014-7-4 17:42 | 只看该作者
香水城 发表于 2014-7-4 17:38
信息量太少,可能性太多。

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

同问

使用特权

评论回复
7
李富贵| | 2014-7-4 19:51 | 只看该作者
result[2]=command[2];
result[3]=command[3];

这两句话前面打个断点看看有没有执行,如果打不了断点说明编译器认为你这两句是毫无意义的废话,给优化掉了,完全没有可执行代码。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝