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.

[参考译文] F29H85X-F29-EVM:SOM 上的 FreeRTOS 移植

Guru**** 2465220 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1496355/f29h85x-som-evm-freertos-porting-on-f29

器件型号:F29H85X-EVM SOM

工具与软件:

我将 使用 FreeRTOS 将在 F28374D 上的裸机上开发的代码移植到 F29H85x。 我在执行由中断驱动的通知同步的任务时遇到一些问题。
我有3个任务、其中一个由 Timer1同步、它每1ms 发送一个通知以取消阻止"主"任务、另外一个由 PWM 中断每20ms 通知一次、还有一个 由 UART RX 中断通知。 我遇到了两种异常行为:
    1. 在代码执行几分钟后、由 Timer1同步的任务应该每1ms 启动一次"main"任务、冻结、保持非活动状态大约60秒、然后重新启动、或
    2. 任务继续运行、但是它不是每1ms 执行一次、而是每10/12ms 执行一次。。。 它几乎似乎 CPU "过载"。
      中断和任务优先级为:
      • timer1_INT 优先事项40.
      • uart0_INT 优先250
      • EPWM0_ET_INT 优先事项30.
      • timer2_INT 优先级255 (由 FreeRTOS 使用)
      • FreeRTOS ZCD_TASK 优先级5 (静态、堆栈大小512)
      • FreeRTOS MAIN_TASK 优先级5 (静态、堆栈大小1024)
      • FreeRTOS UART_DBG_TASK 优先级4 (静态、堆栈大小512)

如果我没有执行来自 ISR 的通知、而是使用 vTaskDelay 从 RTOS 执行"主"任务、并且仍然是从主任务中的任务、在需要执行时通知20ms 任务;在本例中、一切都正常运行。

有什么想法或建议吗?

谢谢

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

    尊敬的 Emanuele:

    从您的描述来看、您实施基本结构的方式应该不会有任何问题。 当您说主任务停止、然后重新启动时、您究竟是什么意思? 需要验证的几个方面-

    1) 1)确保所有任务在运行完循环后都被适当阻止

    2) 2)检查 RTOS 堆栈溢出。 这可以借助 FreeRTOS 提供的功能来完成

    3) 3)检查中断溢出

    此致、
    Arnav

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

    您好!

    这是我使用从 ISR 通知时看到的情况;GEL 文件输出为:

    中断溢出

    当我仅从 FreeRTOS 上下文通知任务时不会发生这种情况。

    有什么建议吗?

    谢谢

    Emanuele

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

    您好!
    当您仅从 FreeRTOS 上下文通知任务时、是否仍在进行 Timer1和 ePWM 中断? 在这种情况下它们是否溢出?

    类似于其他中断溢出导致节拍中断无法通过的情况。 OVF 和 UVF 是 FPU 上溢和下溢相关中断。 您是否可以检查错误聚合器状态、这应该会提供有关正在发生的情况的更多信息


    此致、
    Arnav