网站容量,手机qq网页版登录入口,网页设计专业设计课程,网站广告接入这里写自定义目录标题 背景配置FreeRTOSCconfig.h统计时钟源任务中打印 背景
本文直接讲解如果快速实现freertos打印任务运行时间#xff0c;堆栈使用情况等调试信息#xff0c;不讲解原理。
配置
FreeRTOSCconfig.h
增加以下代码#xff1a;
#define configUSE_TRACE_… 这里写自定义目录标题 背景配置FreeRTOSCconfig.h统计时钟源任务中打印 背景
本文直接讲解如果快速实现freertos打印任务运行时间堆栈使用情况等调试信息不讲解原理。
配置
FreeRTOSCconfig.h
增加以下代码
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
#define configGENERATE_RUN_TIME_STATS 1//用于初始化计数器以及获取统计值的宏
extern volatile unsigned long long g_runTime;#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (g_runTime 0)
#define portGET_RUN_TIME_COUNTER_VALUE() g_runTime统计时钟源
使用任务运行时间信息统计功能需要一个精度是系统时钟节拍精度10倍以上的时间基准。demo使用定时器TIM2来作为时间基准。
void TIM2_Config(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitStructure.TIM_ClockDivisionTIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterModeTIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period100 -1 ;TIM_TimeBaseInitStructure.TIM_Prescaler90 -1 ;TIM_TimeBaseInitStructure.TIM_RepetitionCounter0;TIM_TimeBaseInit(TIM2,TIM_TimeBaseInitStructure);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannelTIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority2;NVIC_InitStructure.NVIC_IRQChannelSubPriority1;NVIC_Init(NVIC_InitStructure);TIM_Cmd(TIM2,ENABLE);
}volatile unsigned long long g_runTime;
void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) ! RESET){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);g_runTime;}
}任务中打印
在某一个任务中打印使用情况注意大数组对本任务堆栈的影响
void eobd_task(void *Para)
{char pcTaskInfo[300]; //用于保存任务状态信息for (;;){vTaskList(pcTaskInfo);printf(任务名 任务状态 优先级 剩余堆栈大小 任务号 \r\n);printf(%s\r\n,pcTaskInfo);vTaskGetRunTimeStats(pcTaskInfo);printf(任务名\t\t运行时间\t\t百分比\t\t \r\n);printf(%s\r\n,pcTaskInfo);vTaskDelay(1000);}
}