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


有关的现象
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 、但问题仍然存在。