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.

[参考译文] TMS320F28069:通过编译器设置强制类型转换

Guru**** 2542340 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1110872/tms320f28069-set-force-type-conversion-via-the-compiler

器件型号:TMS320F28069

大家好、

以下是客户提出的问题、可能需要您的帮助:

编译器版本:v15.12.3.LTS

例如、

int16 current = 495;
float result = current * current;   //current * current(=495025) will overflow, so the result will be incorrect

我知道使用力类型转换将使其正确:

float result = (float) current * (float) current;

但是、此客户端的代码从 Tricore 中移植(在该平台中、不会因其描述而溢出)、并且其中包含许多此类语句。 是否可以通过编译器设置自动实现转换?

我在 TMS320C28x 优化 C/C++编译器 v22.6.0.LTS 用户指南(修订版 y)

谢谢、此致

耶鲁李

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

    我认为了解此代码在 Tricore 系统上的工作原理会有所帮助。  我不熟悉 Tricore、但我确信内置类型 int 为32位宽。   

    表达式...

    电流*电流

    ...首先发生的是操作数从 Int16转换 int。  然后发生32位乘法。  495 * 495的结果适合32位。  它被转换为浮点值、然后被分配给结果

    在 C28x 上、内置类型 int 的大小为16位。  对于同一表达式、操作数的大小已经与 int 相同、因此不会发生转换。  会发生16位乘法。  495 * 495的结果不适合16位、因此它溢出。   

    我解释这一点是为了指出另一种可能的解决方案。  将电流类型 Int16更改为 Int32。  也许这种解决方案更实用。

    [引用 userid="514648" url="~/support/microriers/C2000-microset-group/C2000/f/C2000-microriers-forum/1110872/tms320f28069-set-force-type-conversion by-the-compiler"]是否可以通过编译器设置自动实现转换?

    不幸的是、不

    请告诉我此建议是否解决了问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    感谢您的解释! 这有助于我们非常清楚地理解。

    谢谢、此致

    耶鲁李