工具/软件:TI C/C++编译器
您好!
客户的代码面临一个问题。 全局参数 abc 的值已更改、但我们不知道更改的位置。
逻辑如下所示:
MAIN ()
{
if (condition==true)
ABC &=~def;
}
ISR()
{
ABC |= 0x10;
hig = 100;
}
在大约1000次测试期间,我们发现 执行 ISR()后 abc 的值丢失(仍然为"0")(参数 hig 等于100)。 另外999次,在 ISR()之后,abc 的位4为1。 这意味着、在大多数情况下、逻辑工作正常。 但在极少数情况下、abc 会失去其值。
我们正在努力解决个别测试案例、以找出根本原因、尽管很难重现。
在这里、我们有疑问:如果 abc &=~def;正在执行(当前 abc=0)、在结束之前、如果一个中断出现(abc|=0x10内部)、从 ISR 恢复后将发生什么、 abc &=~def 完成执行。 abc 是否仍为0或0x10?
ABC &=~def、在 ASM 中、有5行代码(只是一个示例)。 在第4行代码期间、可能会产生中断。 我们想知道在 ISR 和第5行代码之后会发生什么情况。
希望我明白了。
非常感谢。
BR、Jordan