工具/软件:TI C/C++编译器
您好!
在客户的代码中、他们在全局参数上遇到了一个问题、该参数由主循环和 ISR 使用、但不是易失性参数。
他们发现、在极少数情况下、ISR 无法成功更改参数值。 该值可由主循环指令覆盖。
他们进行了测试。 详细信息为:
1) 1)在主循环中、代码连续写入参数、值为:gMainStatus.ErrorCode &=~ERR_24VVTG_LOW (宏定义)。
2) 2)在 ISR 中、 gMainStatus.ErrorCode |= ERR_24VVTG_LOW。
ISR 被频繁触发。 几次、在 ISR (gMainStatus.ErrorCode |= ERR_24VVTG_LOW)之后、在主循环中进行新分配(gMainStatus.ErrorCode &&=~ERR_24VVTG_LOW)之前、gVTStatus.ErrorCode 仍然是来自 mian 循环(gMainStatus.ErrorCode &=~ERR_24VG_LOW)的值、但不是来自 ISR 的值。
从拆卸方面来看、我们想知道这是不是可能的。
这是反汇编代码。 bbd50是结构的地址。 #8是错误代码的偏移量。
我们不理解00a7fc 中的代码。 如果它只是一个周期指令、则可能不会发生这种情况。 与 ~、如果在主循环指令 gMainStatus.ErrorCode &=Δ V ERR_24VVTG_LOW 期间发生 ISR、 则 gMainStatus.ErrorCode 的值会发生变化。 如果在 ISR 之后没有恢复、则可能不会发生此问题。
非常感谢。
BR、Jordan