This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F28235:代码的 ASM 帮助

Guru**** 2502205 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/856060/compiler-tms320f28235-asm-help-on-the-code

器件型号:TMS320F28235

工具/软件: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    约旦

    是的、这是可能的。 此问题与引用的主题中的问题类似。

    带有立即操作数的逐位和操作似乎不是读取-修改-写入、所以有可能发生这种损坏。  为了防止它、您可以禁用指令周围的中断、或使用 George 在另一个线程中建议的原子函数_和内在函数。

    此致、

    Richard