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.

[参考译文] MSP432E401Y:优化问题

Guru**** 2513185 points
Other Parts Discussed in Thread: MSP432E401Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1275119/msp432e401y-optimization-issue

器件型号:MSP432E401Y

大家好!

 

我们正在我们的项目中使用 MSP432E401Y 微控制器。 Release build (已选择级别2优化)出现问题。

 

在函数中、我们将进行一些计算。

 

#定义 A (19.6)
#define b (0.003)
例如:uint16_t var =(uint16_t)((a * b)/ 0.005)-1;
编译器给出建议:检测到浮点运算。 建议在运行时将它们移至 RAM 或不使用、因为它们需要大量的处理/功耗。

 

调试编译中(未优化)-->工作正常

 

在版本编译中(进行级别2优化)-->编译器不生成任何代码。 删除了优化这一行。
我可以在反汇编代码中看到这一点。

 

 

有人能建议优化后为什么不起作用吗?

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

    您只需考虑以下几点:
    432具有硬件浮点支持、因此简单的浮点算术应该不是什么大问题。
    如您所示、此表达式可在编译时求值。 这是发生什么事了吗?
    编译器通常不会丢弃代码、除非未对其进行调用。
    您能展示生成的汇编器吗?
    希望这会有所帮助

    吉姆

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

    对于类似...的代码

    [报价 userid="534432" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1275119/msp432e401y-optimization-issue ]#define a (19.6)
    #define b (0.003)
    例如:uint16_t var =(uint16_t)((a * b)/ 0.005)-1;

    ...如果 变量 不会在以后使用(即传递给另一个函数或类似的函数)、则编译器会删除 变量 与之相关的所有计算。

    谢谢。此致、

    -乔治

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

    此外:MSP432E 上的 FPU 是单精度的、您建议的表达式为双精度的、因此(如果在 MCU 上执行)将在软件中完成。 这可能是触发"建议"的原因。