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.

[参考译文] TMS320F280049C:使用 int32_t 和 int16_t 的乘法溢出

Guru**** 2522770 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1277069/tms320f280049c-multiplication-overflow-using-int32_t-and-int16_t

器件型号:TMS320F280049C

编译器版本:TI v22.6.0.LTS

您好!

我发现在我的程序中、使用 int32_t 和 int16_t 的乘法会导致 ALU 出现问题、导致计算结果只有最低有效16位有效、而最高有效16位由于溢出被清除。 因此、我必须将这两个变量声明为 int32_t、以确保计算结果符合预期。

但是、现在我有一个表达式涉及将变量乘以#define 常量、似乎无论什么、该常量在 ALU 中始终声明为16位。 我是否可以将此常量设置为32位或修改工程属性等其他方法来确保计算结果正确?

在其他基于 ARM 的 MCU 中、我从未遇到过遵守较小声明并导致溢出清除问题的问题。 我也使用相同的 TI 编译器(@TM4C123x)进行开发而不会出任何问题。 因此、我是否应该合理地断定这是特定于 C2000平台的 ALU 问题?

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我必须将两个变量声明为 int32_t 以确保计算结果符合预期

    若要更好地理解这一点并了解其他相关方法、请参阅应用手册 如何在 C 代码中正确写入乘法

    Unknown 说:
    我是否可以将此常数设置为32位

    我想你写的东西像...

    #define NAME 123

    默认情况下、像这样的常量字面量的类型 内部 。  该类型 内部 C28x 上的宽度为16位。  要将其更改为类型 ,这是32位宽, 写它...

    #define NAME 123L

    后缀 L 导致该类型

    谢谢。此致、

    -乔治