FreeRTOS任务运行时间统计

前言

在执行多任务的过程中,如果发现某一任务占用的时间过长,可以拆分这个任务来提高任务并行的效率。FreeRTOS可以通过函数vTaskGetRunTimeStats()来统计各个任务的运行时间占总运行时间的百分比,具体输出格式如下:

task2_task     	8178		<1%
IDLE           	1000228		99%
task1_task     	127		<1%
Tmr Svc        	1		<1%

由左到右依次为任务名、运行的系统时间、占总运行时长的比重。

使用步骤

1. 配置FreeRTOSConfig.h

  • configGENERATE_RUN_TIME_STATS 定义为1
  • 定义定时器初始化函数以提供统计的“时基”:portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
  • 定义变量以读取统计定时器的值:portGET_RUN_TIME_COUNTER_VALUE()
#define configGENERATE_RUN_TIME_STATS	        1             
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()   ConfigureTimerForTimeStats()
#define portGET_RUN_TIME_COUNTER_VALUE()    FreeRTOSRunTimeTicks

注意这个 FreeRTOSRunTimeTicks 应该是全局变量。

2.初始化定时器

ConfigureTimerForTimeStats() 函数的实现就是初始化某一定时器,和写裸机定时器时一样。需要注意的是,这个定时器的精度(速度)要比FreeRTOS的系统时钟要高,范围在10–100倍,一般设置10–20倍即可。更重要的是在定时器中断里要使运行时间统计时基计数器加一。

void TIM3_IRQHandler(void){
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  
		FreeRTOSRunTimeTicks++;   // important
	}
}

对了,别忘了在FreeRTOSConfig.h里引用包含这个函数和这个变量的头文件。

3.调用vTaskGetRunTimeStats(char *)

在 main 函数或者其他你想调用的位置调用并打印就可以了,参数填入一个足够长的 char 数组,然后打印数组即可。

// 使用案例
char InfoBuffer[1000];
vTaskGetRunTimeStats(InfoBuffer);
printf("%s\r\n",InfoBuffer);

END ---- 2022/08/09 11:14

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值