1.4.5 运行时间统计
优质
小牛编辑
126浏览
2023-12-01
简介
freeRTOS可以统计每个任务的执行时间(绝对时间和百分比时间),vTaskGetRunTimeStats()
API可以提供表格式的统计数据,如下图所示:
可以提供:
绝对时间 这是每个任务执行的总时间(处在运行态的时间),取决于用户选择的一个合适的时间基准。
百分比时间 任务执行时间占总时间的百分比
配置与使用
需要三个宏,定义在FreeRTOSConfig.h
:
configGENERATE_RUN_TIME_STATS 将该设置项设置为1,将使能时间统计功能,当然,下面的两个宏同时也需要定义才能完整实现统计功能。
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() 执行时间统计的需要一个比节拍中断更高精度的定时器,否则统计出来的数据在精度上可能是无用的。推荐这个定时器比节拍中断定时器快10到100倍,越快的定时器,精度越高,当然定时器的计数值也会更快的溢出。这个宏会在调度器开始时(
vTaskStartScheduler()
)被自动调用。推荐开发者使用这个宏去配置一个合适的时间基准。portGET_RUN_TIME_COUNTER_VALUE() 这个宏返回当前"时间"。
vTaskGetRunTimeStats()
API将返回统计数据。
例子:
使用一个20KHz的测试定时器,定时器中断中会累加ulHighFrequencyTimerTicks
的值,这个值使用portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
初始化为0,使用, portGET_RUN_TIME_COUNTER_VALUE()
获取当前值。
extern volatile unsigned long ulHighFrequencyTimerTicks;
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ( ulHighFrequencyTimerTicks = 0UL )
#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerTicks