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.

[参考译文] TMS570LS3134:浮点问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue

器件型号:TMS570LS3134

您好!

我的浮点计算有问题。 这些数字并不总是正确计算。

在浮点计算时、我禁用所有中断并再次启用它们、这似乎起作用。

中断背后的某种东西、这会导致计算值错误。  

两个 FPU 设置都会发生这种情况、即 FPU=none 和 FPU=配置为使用内部处理器。  

如何解决此问题?

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

    Hercules MCU 上的 FPU 是 ARM 矢量浮点 v3架构、具有16个双精度寄存器(VFPv3D16)。

    在项目属性中、请选择 VFPv3D16 ->--float_support=VFPv3D16  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="487205" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue ]FPU 设置都是这样,即 FPU=none 和 FPU=配置为使用内部处理器。  [/报价]

    您能否说明使用哪种编译器?

    提到 FPU 选项表明您可能正在使用 GNU GCC 编译器。

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

    您好、Wang、

    示例代码:

    F32_value =(F32_ActValue * 1000)+ F32_offset;

    其中 、F32_ActValue = 18.66610

    F32_OFFSET = 0.0f

    我应该得到的输出是18666.10

    当--FPU=none 时,输出值有时会输出37.3444或348.4344。

    使用上述设置、当我检查汇编代码时、我看到使用了来自 GCC 的__aeabi_fmul 和__aeabi_add 库。

    当--FPU=VFPv3D16时,输出有时为0.0  

    使用上述设置、当我检查汇编代码时、我看到使用了内部处理器指令。

    因此、在这两种设置下、我会得到不同的值、我无法对此进行解释。

    我使用 IAR 编译器 v6.40  

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

    切斯特、您好!

    我使用 IAR 编译器 V6.40  

    示例代码:

    F32_value =(F32_ActValue * 1000)+ F32_offset;

    其中 、F32_ActValue = 18.66610

    F32_OFFSET = 0.0f

    我应该得到的输出是18666.10

    当--FPU=none 时,输出值有时会输出37.3444或348.4344。

    使用上述设置、当我检查汇编代码时、我看到使用了来自 GCC 的__aeabi_fmul 和__aeabi_add 库。

    当--FPU=VFPv3D16时,输出有时为0.0  

    使用上述设置、当我检查汇编代码时、我看到使用了内部处理器指令

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="487205" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue "]

    在浮点计算时、我禁用所有中断并再次启用它们、这似乎起作用。

    中断背后的某种东西、这会导致计算值错误。  

    [/报价]

    我最初以为中断使用的是浮点寄存器、但中断处理程序未保存浮点上下文。

    [引用 userid="487205" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue ]FPU 设置都是这样,即 FPU=none 和 FPU=配置为使用内部处理器。  [/报价]

    但是、由于在使用 FPU=none 时仍然会发生故障、因此不认为这个问题是由使用浮点寄存器的中断处理程序在不保存浮点上下文的情况下解释的。

    您的程序是裸机程序、还是使用 FreeRTOS 等任何操作系统?

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

    切斯特、您好!

    使用的操作系统是 ScioptaRTOS.https://www.sciopta.com/wip/products/index.html

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="487205" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue/3714849 #3714849"]使用的操作系统是 Sciopta RTOS

    好的、这是第一次看到 Sciopta RTOS。

    通过快速查看 SCIOPTA 内核手册 、可以了解以下几点:

     第2.10节错误处理包含:

    [引用]内核将检测消息和堆栈是否已超出其长度。[/引用]

    是否有任何内核错误检查失败?

    2.第 4.63.6节"结构成员对所有进程类型的通用"表示 进程描述符块(PDB)中存在 FPU 字段、该字段指示进程是否使用浮点。 FPU 字段设置为什么?

    虽然不清楚 FPU 字段对  Sciopta RTOS 的作用是什么、但猜测该字段控制浮点内容是否保存在内容开关上。 即、使用浮点但 在 PDB 中将 FPU 字段设置为 SC_KRN_FLAG_FALSE 的过程可能会导致损坏。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="91588" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue/3714882 #3714882"]

     第2.10节错误处理包含:

    内核将检测消息和堆栈是否已超出其长度。

    是否有任何内核错误检查失败?

    [/报价]

    答:我可以确认没有内核错误检查失败

    [引用 userid="91588" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004890/tms570ls3134-floating-point-issue/3714882 #3714882]2. 第 4.63.6节"所有进程类型的结构成员通用 "表示进程描述符块(PDB)中存在 FPU 字段、该字段指示进程是否使用浮点。 FPU 字段设置为什么?

    答:我们在任何流程中都不使用此 FPU 字段

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

    你好 Sachin、

    您是否解决了 FPU 问题?