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.

[参考译文] CCS/TMS570LS3137:SDSCM00038278 - ARM 浮点转换例程不支持 NaN

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/895715/ccs-tms570ls3137-sdscm00038278---arm-floating-point-conversion-routines-do-not-support-nan

器件型号:TMS570LS3137

工具/软件:Code Composer Studio

我们在使用 CCS 的项目和软件开发中使用 TMS570LS3137 (版本:6.0.1.00040)。 我们正在分析属于它的所有错误。 我们碰巧看到 TI 编译器勘误表"ARM 浮点转换例程不支持 NaN"。  

我们不确定此勘误表的影响、我们很想知道它。 当我们尝试通过以下代码模拟 NaN 条件并且 x 已被分配 NaN 时。 这与编译器勘误表有关吗?

伪代码:

浮点 x;

 x = 0.0f/0.0f;

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

    [引用 user="Subash Sundaresan"]此操作是否与编译器勘误表相关?

    否   

    当值从类型 float 转换为类型 double 时、会调用 RTS 库中的函数来执行该任务。  问题是这些函数会错误地将 NaN 更改为无穷大。  在您的伪代码中、不需要转换、因此不会出现问题。  自编译器版本5.2.6 (于2015年10月发布)以来、此问题已得到解决。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    非常感谢您的回答。

    我们尝试根据您的输入(通过浮点至双精度转换)重现此问题、但我们未能这样做。 请告诉我们如何模拟问题(提供一些代码片段)。

    伪代码1:

    双 y;

    y = 0.0f / 0.0

    在调试窗口中:

     Y = NaN

    内存浏览器:

    0x08001330  7FF80000

    伪代码2:

    浮点 x;

    双 y;

    x = 0.0f/0.0f

    y =(双精度) x;

    在调试窗口中:

     X = NaN

     Y = NaN

    内存浏览器:

    (x) 0x08001328  7FC00000

    (Y) 0x08001330  7FF80000

    注:请注意 x 和 y 的 NaN 的不同数字存储器表示;

    我们在项目计划中选择了编译器版本5.1.6,因此无法中间更改编译器版本。 根据您的输入、此问题适用于此编译器版本(5.1.6)、  我们只想包含更新的 CRTL 库函数、而不是修改不同的编译器版本。 请告诉我们在哪里可以获得更新的 CRTL 库函数。

    谢谢、

    Subash

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

    0/0未定义、编译器可以返回所需的任何值、NaN 或无穷大。 您可以自由地检查0/0并提供您认为合适的任何答案。

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

    您正在描述 CodeGen-831、也称为 SDSCM00049912。  以下是一个测试案例、展示了错误的行为:

    /* armcl --abi=eabi CQ49912.c -z -llnk.cmd */
    #include
    #include
    #include

    int main()

       易失性浮点 y = NaN;

       断言(isnan ((double) y));



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

    我仍然无法重现问题、  

    我已经测试了以下情况、但两者都产生相同的结果、换句话说、在这两种情况下、程序控制跳转到下一条指令 、即 x = x + 1;

    /*场景-1 */

    /* armcl --abi=eabi CQ49912.c -z -llnk.cmd */
    #include
    #include
    #include

    int main()

       易失性浮点 y = NaN;

      int x;  

       断言(isnan ((double) y));

      x = x + 1;

    /*场景-2 */

    /* armcl --abi=eabi CQ49912.c -z -llnk.cmd */
    #include
    #include
    #include

    int main()

       volatile double y = NaN;

      int x;  

       断言(isnan(y);

      x = x + 1;

    PS:我们希望在 旧的编译器版本5.1.6中包含更新的编译器 CRTL 函数。 请向我们提供最新的编译器 CRTL 库。

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

    TI ARM 编译器版本5.2.0至5.2.5中存在此错误。  您使用的版本5.1.6没有此错误。  很抱歉、我之前没有注意到这个细节。

    谢谢、此致、

    乔治