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.

[参考译文] MSP430FR5962:编译器是否优化了随机函数?

Guru**** 2439710 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1006460/msp430fr5962-compiler-optimizing-out-random-functions

器件型号:MSP430FR5962

到目前为止、我已经尝试了优化级别0和1、并使用-opt_for_speed 进行了尝试、但没有成功。  目前优化级别2似乎有某种原因、但-o1也是如此、直到我最终遇到相同的问题。  发生的情况是、编译器似乎随机选择函数(每次代码更改时似乎都是新函数)以进行优化。  禁用优化可以完全解决问题。

对优化的 Out 函数的调用会将我引导到一个包含所有 BRA @PC 指令的地址、这当然会将我的 PC 设置为0并且程序保持暂停。

我还应该注意的是、我的 FRAM2已满、FRAM 为82%、RAM 为81%。

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

    很难找到原因。 您需要反汇编代码以了解编译器对代码执行的操作。

    我认为您可以更改不同文件的优化、以满足整个项目的需求:

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

    下面是一个很好的示例。  今天、我在以下优化级别进行了清理和重建

    直到 现在、此函数从未出现过此问题。  它位于 stdlib.h 的 atoll 函数中。  这是函数调用。

    到目前为止一切都很好。  直到我们单击以下代码行

    在汇编语言中是...

    函数被调用 fine (tact 中的指针)。  但该函数的汇编看起来缺少/优化了。

    其余的暂停@PC 0

    在-OPT1重复此操作会产生相同的结果。

    在-opt0处、函数处于 tact 中并成功运行。

    -opt0

    只是为了澄清-无论我是单步执行还是自由运行代码、行为都是相同的。  两者都最终@PC 0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="446093" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1006460/msp430fr5962-compiler-optimizing-out-random-functions/3719487 #3719487"]function 命令正常(tact 中的指针)。  但该函数的汇编看起来缺少/优化了。[/quot]

    由于反汇编显示的是符号表中的函数名称、这意味着链接器尚未删除该函数。

    相反、应怀疑正在运行的程序中的内容覆盖了包含该函数的 FRAM。

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

    您能否尝试我的方法来解决此问题。

    1.将函数放入专用的 C 文件中

    2.将 C 文件的优化设置为0。

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

    由于大型阵列未正确初始化、在经过自己的存储器后归零、它看起来像是运行时错误。  这解释 了更改优化时不同函数会"中断"的原因、因为它会强制编译器重新编译。

    感谢你的帮助。