开启宏定义
配置时钟
选用ARR 32位的TIM,预分频4200 - 1,计数节拍周期50us,ARR拉满
代码部分
补充函数定义
__weak void configureTimerForRunTimeStats(void)
{
HAL_TIM_Base_Start(&htim2);
}
__weak unsigned long getRunTimeCounterValue(void)
{
return __HAL_TIM_GetCounter(&htim2);
}
最后调用函数 uxTaskGetSystemState() 测算任务的CPU占用百分比
TaskStatus_t TaskInfo[10]; //任务信息列表
uint32_t TotalRunTime = 0; //运行总时间
uint32_t TaskRunTime = 0; //任务运行时间
uint8_t TaskNum = 0; //任务数量
/* 获取任务数量 */
TaskNum = uxTaskGetNumberOfTasks();
/* 获取任务信息和运行总时间 */
uxTaskGetSystemState(TaskInfo, TaskNum, &TotalRunTime);
/* 循环打印任务占用CPU百分比 */
for(uint8_t i = 0; i < TaskNum; i++)
{
/* 获取任务运行时间,除以总时间即为CPU占比 */
TaskRunTime = TaskInfo[i].ulRunTimeCounter;
float Propoetion = TaskRunTime * 100.0 / TotalRunTime;
/* 进入临界区,打印信息*/
taskENTER_CRITICAL();
printf("%-15s%-12.2f%-5.2f%%\r\n", TaskInfo[i].pcTaskName, TaskRunTime*0.05, Propoetion);
taskEXIT_CRITICAL();
}
实验现象
第一列是任务名,第二列任务运行时间(ms),第三列占用百分比。可以看见 IDLE 任务即空闲任务占用95%左右CPU