条件不满足,然无法跳出死循环。求解!

2020-01-27 11:19发布

如图所示,while(FLAG.STA_BITS.I2C0_Tx_END_FLAG == 0);调试可以看出FLAG.STA_BITS.I2C0_Tx_END_FLAG 的值是1,可是就是无法跳出循环。求高手指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
wye11083
2020-01-27 21:24
albert_w 发表于 2013-9-11 17:06
是volatile的不? 否则可能被寄存器优化掉

估计没有volatile。根据试验,在if里面的东西(以及一个地址只被一组线程读的),都不会从内存中另外读取。因此,我现在都有些怕了,if里面的跨线程变量,一概volatile,以防被优化掉。因为,用调试器跟踪过代码,没有volatile,它就是这样:
A:
cmp ecx,ecx
je A
而加了volatile后就是
A:
mov ecx,[mm]
cmp ecx,ecx
je A
反汇编后看的结果。这个线程,要么不执行,要么死循环不工作。

一周热门 更多>