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.

[参考译文] MSP430F5529:优化会导致代码失败

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021551/msp430f5529-optimization-causes-code-to-fail

器件型号:MSP430F5529

我的程序在优化级别1下工作正常、但任何高于该级别的操作都会导致程序停止。 其中:

while (RxDataReady < 1)

 IF (二级标志)
  {
   CmdTimeOutCount++;
   第二标志= 0;
  }
 if (CmdTimeOutCount > 60)转至 ErrorBail;//等待字符进入

当它失败时、RxDataReady 为1、表示接收字符。 在调试中、MCU 将从 if 语句循环步进至 if 语句、忽略 (RxDataReady < 1)为 false 这一事实。 在反汇编中、 较高优化缺少 while (RxDataReady < 1)行、但出现在级别1。  

这对我来说并不重要、因为代码在1级运行良好、但它令人担忧。 有什么建议吗?

我使用的是 Code Composer Studio  版本:10.0.00010  

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

    让我猜、RxDataReady 在中断例程中发生更改、并且未声明为易失性。

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

    Dang,你找到了! 我只是学到了一些东西。 现在、我将声明在 ISR 中更改的所有变量为易失性。 对于 ISR 中未更改的变量、似乎我不需要这么做。 有没有简单的解释说明 它为什么如此工作、还是有一个很好的来源来了解它?

    谢谢!

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

    实际上、CCS 参考文档对此进行了很好的解释。 再次感谢!