您好!
我的浮点计算有问题。 这些数字并不总是正确计算。
在浮点计算时、我禁用所有中断并再次启用它们、这似乎起作用。
中断背后的某种东西、这会导致计算值错误。
两个 FPU 设置都会发生这种情况、即 FPU=none 和 FPU=配置为使用内部处理器。
如何解决此问题?
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.
您好!
我的浮点计算有问题。 这些数字并不总是正确计算。
在浮点计算时、我禁用所有中断并再次启用它们、这似乎起作用。
中断背后的某种东西、这会导致计算值错误。
两个 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 ]FPU 设置都是这样,即 FPU=none 和 FPU=配置为使用内部处理器。 [/报价]但是、由于在使用 FPU=none 时仍然会发生故障、因此不认为这个问题是由使用浮点寄存器的中断处理程序在不保存浮点上下文的情况下解释的。
您的程序是裸机程序、还是使用 FreeRTOS 等任何操作系统?
切斯特、您好!
使用的操作系统是 ScioptaRTOS.https://www.sciopta.com/wip/products/index.html
好的、这是第一次看到 Sciopta RTOS。
通过快速查看 SCIOPTA 内核手册 、可以了解以下几点:
第2.10节错误处理包含:
[引用]内核将检测消息和堆栈是否已超出其长度。[/引用]是否有任何内核错误检查失败?
2.第 4.63.6节"结构成员对所有进程类型的通用"表示 进程描述符块(PDB)中存在 FPU 字段、该字段指示进程是否使用浮点。 FPU 字段设置为什么?
虽然不清楚 FPU 字段对 Sciopta RTOS 的作用是什么、但猜测该字段控制浮点内容是否保存在内容开关上。 即、使用浮点但 在 PDB 中将 FPU 字段设置为 SC_KRN_FLAG_FALSE 的过程可能会导致损坏。
第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 字段