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.

[参考译文] TMS320F280039C:变量意外更改了问题

Guru**** 2479415 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1459679/tms320f280039c-variable-unexpected-changed-issue

器件型号:TMS320F280039C

工具与软件:

我们发现、在软件运行时、一个联合体变量可能发生了意外更改。

有关的现象

tPFC_ctrl.bit.OnOff 是在 CpuToCla1MsgRAM 中定义的、并且会 发生意外更改。 代码不会 将0分配给 tPFC_ctrl.bit.OnOff、但会将高速更改为0、然后恢复为1。

我们使用 GPIO 观察 tpFC_ctrl.bit.OnOff、它将不定期地更改、每次在20us 内恢复。

问题

对于这个问题,我们找到了两种解决方法。

关闭 编译器优化(从3 ->关闭)。

2.use volatile 关键字、用于定义 tPFC_ctrl。

问题来了

为什么编译器优化会让此问题发生?

2.如何使用编译器优化级别来避免此类问题。

另一次尝试

尝试  在 Cla1ToCpuMsgRAM 中重新定义 tPFC_ctrl、问题就会消失。 这意味着只有 CPU 允许问题发生、而不是 CLA。

我们使用 const 关键字 定义 tPFC_ctrl、只能使用指针访问 tPFC_ctrl  、但问题仍然存在。