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.

[参考译文] ARM-CGT:R4或 M4内核上的浮点运算

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/987745/arm-cgt-float-operation-on-r4-or-m4-core

器件型号:ARM-CGT
主题中讨论的其他器件:TMS570LS2124TMS570LS1224

大家好、

在之前的后续操作中、我被告知包含选项 --float_support=VFPv3D16 以在 R4F 上编译代码、我的完整选项是  

'调用:ARM 编译器'
"e:/ti-cgt-arm_16.9.6.LTS / bin/armcl"-mv7R4 -code_state=16 -float_support=VFPv3D16 -me -include_path="E:/ti-cgt-arm_16.9.6lbs/include"-include_path="E:-exclus_exclus_exclus_exclus-rom_exion_exclus-us_exclus-us_prob_exclus_ep_ecuration=-us_ecuration="-us_ecuration=-us_ecuration="-us_ecuration="-us_ecuration_sbulation="-us_ecuration_se-us_ecuration="-us_ep_ecuration="-romage-us_ecuration="-us_econ_ecuration_s /YYY/XXXX_R4.c

现在、我在 乘法\除法等基本浮点运算中遇到问题

例如

uint64_t u40PowerInLinsum;  

fRecipEnerLinsum、 dRangeOffset、 dVelocityOffset;

fRecipEnerLinsum =(float)((float) 1.0 /(float) u40PowerInLinsum;//u40PowerInLinsum 值为 1612388

dxxOffset =(float) si32xx * fRecipEnerLinsum;// si32xx -687948
dyyOffset =(float) si32yy * fRecipEnerLinsum;// si32yy640046  

上述操作的结果是 fRecipEnerLinSum 为0、dxxOffset 和 dyyOffset 0x202020、我在手表和存储器中检查了这些结果、因为有时手表显示了错误的结果

所有这些结果都会导致垃圾结果。

在编译期间、我看到了使用 --float_support=VFPv3D16的含义是什么、这是否会启用浮点运算?

或者我做了一些错误

BR

Deepak Joshi

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

    这些计算组合了非常大和非常小的数字。  类型 float 是32位表示法、类型 double 是64位表示法。  因此、双精度型浮点型具有更大的范围和更高的精度。  更改为双精度型是否实用?  甚至只是为了这些计算?   

    谢谢、此致、

    乔治

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

    您好、George、

    我甚至尝试了 double 现在结果变为 double 的未初始化垃圾值、我认为浮点运算不会发生。 您能帮我找出原因吗?

    BR

    Deepak Joshi

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

    您好、George、

    为了解释这一点、我要附加一个我为 R4 (FORTI_R4.zip)制作的空白 CCS 项目、这里有我所有的编译选项和项目选项。

    在 main.c 中、如果您注释第88行并使用该定义、您可以看到 f32EqShortCut 正根据所有定义正确计算。

     如果使用 浮点数和双精度数计算、则计算结果的时刻是错误的。

    BR

    Deepak Joshi

    e2e.ti.com/.../ForTI_5F00_R4.zip

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

    您确切使用哪款 Cortex-R4器件?  它可能不支持浮点指令、在这种情况下、您应该更改为-float_support=none

    谢谢、此致、

    乔治

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

    您好、George、

    我在  数据表中查看了 TMS570LS2124 - 16/32位 RISC 闪存 MCU、Arm、如所述  

    其中提到它有 FPU 单元、但我的操作出错了、您能在这方面帮助我吗

    BR

    Deepak Joshi

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

    我不再认为我是处理这条线程的最佳人选。  TMS570LS2124的数据表显示"该器件支持字不变的大端序[BE32]格式。"  但您的 CCS 项目使用编译器开关-me 来实现小端代码。  这两者不匹配。  但我可能会忽略一些东西。

    我已就此主题通知器件专家。  

    谢谢、此致、

    乔治

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

    您的项目有几个问题。 首先、它被配置为 RM46L842而不是 TMS570LS1224。 然后、它丢失了所有初始化文件。 我更正了这些问题并在 XL2-TMS57012 Launchpad 上运行了代码。 我已在 zip 文件中附加了修改后的工程。 我得到的值是:

    f32EqShortCut float 1.96798356e-41

    DETC_f32VelocityResolutionUmps double 0.224074721336366475

    e2e.ti.com/.../4073.ForTI_5F00_R4.zip

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

    Bob、您好!

    是否可以使用更改的设置重新附加项目? 我想您误把我的项目附加到了错误的地方

    我知道我有一些问题、但无法找到在仿真器上使用浮点运算所需的操作。

    BR

    Deepak Joshi

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

    我下载了我在上述答复中所附的项目。 这是我修改后的项目。 您为什么认为这是错误的项目?

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

    Bob、您好!

    我在文件夹上运行的超出比较范围、我发现.cproject 中只有变化

    当我将其导入到 CCS 中时、我会看到以下设置

    "-mv7R4 --code_state=16 --float_support=VFPv3D16 -me --include_path="E:/workspace_v5_5/ti-cgt-arm_16.9.6.LTS "--include_path="C:/Users/djoshi/Desktop/4073.ForTI_R4/ForTI_R4 --define=prerproc_sw_test_test_test_enable-off-float_error=-abi_display_off-excand_di=-off-at_error=g=float_ex-ex-cand_di_warning_di_off-ag=-off-statused -at_error-ag=-_off-connical-abi_off-ex-

    也是如此  

    当我使用文件夹中存在的 R4.ccxml 在仿真器中启动时、我再次看到相同的问题、我知道我的设置有一些问题、但很遗憾我无法对此进行 PinPint 处理。

    如果你能帮助我解决这个问题、我将非常有义务。

    感谢你的帮助

    BR

    Deepak Joshi

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

    您使用的是哪个版本的 Code Composer Studio? 您连接了哪些硬件?  

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

    您提到了仿真器。 非常旧的 ARM Cortex R4仿真器不支持浮点硬件。 TMS570LS1224中的处理器是一个 Cortex R4F (F 表示具有浮点硬件)。 我建议您购买 XL2-TMS57012 Launchpad 并下载最新版本 的 CCS 用于开发工作。

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

    Bob、您好!

    我使用的是旧版 CCS 5.5、您是否可以指向 R4F 的正确仿真器、或者如果您知道版本、您能告诉我这一点。 我可以要求 TI FAE 为我们提供该仿真器版本。 这对于我们来说非常有用、因为仿真器为我们提供了可玩的空间、因此在我们迁移到硬件之前、首先尝试在仿真器上移植。

    再次感谢您的帮助。

    BR

    Deepak Joshi

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

    TI 没有用于 R4F 的仿真器、并且不再支持用于 R4或 CCS v5.5的仿真器。 我已将其他客户从使用仿真器转移到使用 XL2-TMS57012 Launchpad。 LaunchPad  是一款比仿真器更好的开发工具。 它精确到周期、包含浮点单元、内存保护单元和外设。