主要观点:FreeRTOS 具有提供每个任务在系统中运行时间信息的功能,通过设置相关宏和配置定时器中断来实现,包括 IDLE 任务的运行时间及所占百分比等,还介绍了在不同环境(如 Eclipse 和直接从应用程序)中展示运行时信息的方法。
关键信息:
- 需设置
configGENERATE_RUN_TIME_STATS
为 1 以进行运行时分析,同时提供portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
和portGET_RUN_TIME_COUNTER_VALUE()
宏。 - 定时器应至少以 RTOS 滴答定时器 10 倍的频率运行,如滴答率为 1kHz 时,运行时定时器应为 10kHz。
- 可通过添加任务、配置定时器、添加相关宏和回调函数等步骤启用运行时分析,如在 FreeRTOSConfig.h 中设置相关宏,在应用中添加定时器中断代码等。
- 可在 Eclipse 的 Task List 视图或应用程序(如终端 LCD 显示)中展示运行时信息。
重要细节: - FreeRTOS 利用用户/应用特定定时器测量任务执行时间,每个任务描述符有累积计数器,定时器滴答计数在任务获取 CPU 时间和切换出时被记忆,差值即为任务执行时间并累加到计数器。
- 运行时计数器存储在每个任务描述符中,为 32 位值,会增加每个任务的 RAM 需求 4 字节,假设 10kHz 计数器周期,变量约 5 天后溢出。
- RTOS 维护两个额外全局变量
ulTaskSwitchedInTime
和ulTotalRunTime
,分别用于记录任务切换时间和系统总运行时间。 - 示例中使用 MCUXpresso IDE 10.2.1、FRDM-K64F 板和 Amazon FreeRTOS V10.0.1,其他工具/IDE 或 FreeRTOS 版本也可使用(至少 9.0.0 版本)。
- 提供了示例项目的 GitHub 链接及相关学习资源链接,如https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/MCUXpresso/FRDM-K64F/FRDM-K64F_SDK_FreeRTOS等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。