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.

[参考译文] TM4C1237E6PM:使用-O2编译时器件挂起、使用-O0编译时运行良好。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/978514/tm4c1237e6pm-device-hangs-when-compiled-with--o2-runs-fine-when-compiled-with--o0

器件型号:TM4C1237E6PM

我正在使用 CCS 6.2。  定制板上的 Tiva 器件出现问题、无法调用 SysTick、因此在其 FSM 中挂起、因此我尝试通过调试器运行。  该代码是使用-O2编译的、这会导致调试器跳转、因此我使用-O0重新编译、以便更轻松地进行调试。  当我这么做时、器件没有挂起。

我们使用的是编译15.12.3 LTS。  我们查看了编译器的勘误表、发现问题 CodeGen-2053已在15.12.4中修复、因此我们更改为可用的最新编译器15.12.7。 没有解决该问题的方法。  存在 USB_DEV_serial 的连接、因为如果我们将 USB 电缆连接到电路板、则不会出现问题。

我们对 USB_dev_serial.c 文件进行了一些更改、这些更改重新排列了代码以使故障消失、但它再次返回到新映像中。  如果我使用-O0编译代码、它可以正常工作、因此我认为编译器中仍然存在一些 CodeGen-2053问题。

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

    你好、Chuck、

      根据 下面列出的条件、您能否确认它是否与 CodeGen-2053真正相关? 您可以尝试使用最新的 TI 编译器 v20.2.1LTS 吗? 如果它与编译器相关、我需要将您的帖子移至编译器专家进行分析。 如果您可以在较小的项目中重现此问题、而不是在您的全速项目中重现此问题、那将是一个不错的选择。 这将使编译器团队更易于分析。   

    此错误只能发生在使用优化级别1或更高版本编译的函数中、该函数包含以下两种情况: 1) 1)结构分配、其中目标为易失性、源为已知常量、结构包含位字段、结构大小为"int"或更小。 2) 2)除作为结构分配或初始化表达式的一部分之外的任何位字段访问(读取或写入)。 也就是说、位字段的名称出现在访问表达式中。 请注意、优化器可以通过内联函数来创建这种情况、因此源代码中的1和2可能位于不同的函数中。