第十一章 FreeRTOS的任务运行时间统计

目录

一. 函数介绍

1.1时间统计API函数-使用流程

 1.2 portGET_RUN_TIME_COUNTER_VALUE() 

1.3 portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()

1.3.1 修改定时器中断函数

二. 打印的结果


一. 函数介绍

/*此函数用于统计任务的运行时间信息*/
void vTaskGetRunTimeStats( char *pcWriteBuffer )

参数介绍

形参

描述

       pcWriteBuffer

             接收任务运行时间信息的缓存指针


1.1时间统计API函数-使用流程

1.将宏configGENERATE_RUN_TIME_STATS 置1
2.将宏 configUSE_STATS_FORMATTING_FUNCTIONS置1
3.还需要实现2个宏定义:
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() 

用于初始化用于配置任务运行时间统计的时基定时器

(时基定时器用于统计任务的运行时间);
注意:

这个时基定时器的计时精度需高于系统时钟节拍精度的10至100倍(即0.1ms~0.01ms,也就是10us~100us)!


portGET_RUN_TIME_COUNTER_VALUE()

用于获取该功能时基硬件定时器计数的计数值 。


 1.2 portGET_RUN_TIME_COUNTER_VALUE() 

#define portGET_RUN_TIME_COUNTER_VALUE()    FreeRTOSRunTimeTicks	//获取时间统计时间值

1.3 portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()

define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()  ConfigureTimeForRunTimeStats()//定时器3提供时间统计的时基,频率为10K,即周期为100us
//初始化TIM3使其为FreeRTOS的时间统计提供时基
void ConfigureTimeForRunTimeStats(void)
{
	//定时器3初始化,定时器时钟为72M,分频系数为72-1,所以定时器3的频率
	//为72M/72=1M,自动重装载为50-1,那么定时器周期就是50us

	TIM3_Int_Init(10-1,72-1);	//初始化TIM3,10us

	FreeRTOSRunTimeTicks = 0;
}

由于TIM3的时钟来源是72MHz,预分频设置72-1,自动重装载值设置为10-1,

定时器溢出时间为(10-1+1) * (72-1+1)/72,000,000=1/100,000ms = 10us,即为系统时钟节拍的一百倍。

1.3.1 修改定时器中断函数

使得每次中断将FreeRTOSRunTimeTicks的值自加1用以记录任务运行的时间。

//FreeRTOS时间统计所用的节拍计数器
volatile unsigned long long FreeRTOSRunTimeTicks;

//定时器3中断服务程序
void TIM3_IRQHandler(void)   //TIM3中断
{
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
	{
		FreeRTOSRunTimeTicks++;
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志 
	}
}

二. 打印的结果

Task: 任务名称
Abs Time:任务实际运行的总时间(绝对时间,这里单位不一定是秒,需要根据定时器的中断频率再乘以运行的时间数值
% Time:占总处理时间的百分比


该函数主要用于调试阶段查看空闲任务所占运行百分比及个别任务运行时间所占百分比,然后看是否个别任务运行时间占比较大,是否需要拆分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值