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.

[参考译文] TMS570LS1224:支持 FPU 的 FreeRTOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/860733/tms570ls1224-freertos-with-fpu-support

器件型号:TMS570LS1224
主题中讨论的其他器件:HALCOGEN

您好!

从我看到的结果中、由 HalCoGen 生成的 FreeRTOS 代码不支持 FPU。 内部变量 ulTaskHasFPUContext 在  os_port.c 文件中永久设置为0、并且根本不使用 FreeRTOSConfig.h 文件中的定义"configUSE_FPU 1"。 这使得每个任务都没有 FPU 上下文。 以下链接对问题进行了说明:

https://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html#floating-point

"为了防止处理器寄存器损坏、除非任务具有浮点上下文、否则不得使用任何浮点寄存器。 默认情况下、RTOS 任务是否使用浮点上下文创建取决于使用的编译器以及 FreeRTOSConfig.h 中的 CONFIGUSE_TASK_FPU_SUPPORT"设置。

如果我错了、请纠正我的错误、但我认为这意味着我无法在此 FreeRTOS 端口上使用浮点指令。 因此、我无法使用  rtsv7R4_T_be_v3D16_eabi.lib 库编译源代码。 这不是很好

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

    您好!

    由于美国假日、响应可能会延迟。

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

    您好、Ritchie、

    您提供的链接适用于 ARM Cortex-A 处理器。 TMS570LS12x 是 ARM-R4F。 您可能需要了解 TI Hercules 端口、

    https://www.freertos.org/Free_RTOS_for_TI_RM48_and_TMS570.html

    在 Build Configurations 中、尝试使用具有 FPU 选项的 TMS570来查看它是否有任何不同。

    雷克斯

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

    您好、Ritchie、

    我仔细看了一下、尽管 FreeRTOS 没有现有的 FPU 示例。 您可以尝试将 ulTaskHasFPUContext 设置为1、并在使用 FPU 包含 FPU 寄存器时设置栈顶。

    或者、您也可以看看 CMSIS 中不是 FreeRTOS 环境的 TI 示例。 CMSIS 可从以下位置下载:

    http://www.ti.com/tool/HERCULES-DSPLIB

    雷克斯

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

    尊敬的 Rex:

    我认为您的答案不正确。 我更仔细地分析了 TI 的 FreeRTOS 端口、我的结论是、在 任务中开始 FPU 计算之前调用一次 vPortTaskUsesFPU()函数就足够了。

    Ritchie

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

    Ritchie、

    我认为这需要 将 ulTaskHasFPUContext 设置为1。

    雷克斯

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

    尊敬的 Rex:

    这在汇编文件 OS_portasm.asm 中完成。 这里 定义了一个监控器调用 swiPortTaskUsesFPU、它执行该操作。

    我相信我是对的;)

    谢谢、

    Ritchie。

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

    您好、Ritchie、

    我怀疑该值在 os_port.c 中复位为0、并导致任务不在 FPU 上下文中。  您能否验证在系统运行后 ASM 文件中设置的值是否保持为1? 或者、您能否验证任务是否保持 FPU 上下文?  

    雷克斯

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

    该值在 os_port.c 文件中刚初始化为0。 它是启动条件。 之后,每个任务都可以 通过调用 vPortTaskUsesFPU()将 ulTaskHasFPUContext 设置为1,并且该值保持设置。 此外、这听起来可能很奇怪、但这个全局变量是"特定于任务"的。 写入端口时、该值存储在每个上下文切换的堆栈中、并在稍后恢复。 因此、每个任务都有其 ulTaskHasFPUContext  变量的版本。

    Ritchie

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

    您好、Ritchie、

    那么,你是否说 FPU 现在正在工作,在将 swivPortTaskUsesFPU()中的 ulTaskHasFPUContext 设置为1的任务中调用 vPortTaskUsesFPU()? 我看到 HalCoGen 生成的代码在 保存任务上下文时检查 ulFPUContextConst 的值、以查看是否应该保存 FPU 寄存器。  

    回到您原来的问题、HalCoGen 确实支持 FPU。

    雷克斯