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-Q1:当我们将优化级别设置为3时、全局变量意外变化

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1500061/tms320f280039c-q1-global-variable-changed-unexpectedly-when-we-set-the-optimization-level-is-3

器件型号:TMS320F280039C-Q1

工具/软件:

您好的团队、  

我向我的客户询问这个问题。

客户在其应用程序中调用函数、此函数将通过 CAN 接收主计算机发出的命令、然后将此值(ulVal 从 CAN 获取)分配给全局变量(PfcCtrlOnOff)、以确定其设备是否启动;如果 PfcCtrlOnOff 为1、设备将断电。 变量 PfcCtrlOnOff 将仅在此代码中分配。

但现在、器件运行大约30分钟后、即使不通过 CAN 发送断电命令、器件也会自动断电。

他们发现:

1.如果它们接近优化水平,这种现象不会发生,这意味着设备不会自行断电;

在这种情况下、组装如下所示:

2.但如果他们设置的级别是 O-3 ,这种现象将会发生;然后他们连接调试,发现变量变为1但 ulVal 为0;  

在这种情况下、组装如下所示:

3.他们设置级别为  O-3、添加另一个全局变量 PfcOnoffTest 并将值  ulVal 分配 给该变量、 PfcOnoffTest 的值 不会 意外更改、这意味着尽管 PfcOnoffTest 的值 更改为 q、但 PfcOnoffTest 的值 与 ulVal 相同;

我比较上面的组装,并找到:

1、优化级别之间为 off 和3、DP 变化的位置不相同、且恢复 ulVal 的寄存器也不相同;我不确定它是否与此现象有关;

优化级别已关闭

优化级别为3

     

2.在优化级别为3,它将显示代码:返回 ulRet,不出现在 优化级别是关闭的

1.当优化是差异时,您能就上述差异给出您的意见吗?

2.你能给你的建议如何找到根本原因?

BRS

Shuqing

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

    行为、例如...

    Unknown 说:
    设备运行约30分钟后、即使不通过 CAN 发送关闭命令、设备也会自动关闭。

    ...很少是由于一个问题的编译器。  问题很可能一直存在、而通过优化构建只会暴露问题。

    但我可以调查一些与编译器相关的内容。  (用于包含赋值对象的源文件)  PfcCtrlOnOff 、 请按照 如何提交编译器测试用例一文中的说明进行操作。  此外、请提交链接器映射文件。

    谢谢。此致、

    -乔治