一、建立三个任务
按键,LED,串口
二、任务堆栈信息打印
uint8_t u8TaskListBuff[400]; /** *@FUN:任务信息 *@PRO:栈名、栈状态、优先级、栈的剩余空间、任务序号 *@BAK:LQW */int8_t Log_TaskStaMsg(void) {// memset(u8TaskListBuff, 0, 400); vTaskList((char*)u8TaskListBuff); printf("任务堆栈大小\r\n"); printf("Name State Priority Stack Num\r\n"); printf("******************************************************\r\n"); printf("%s",u8TaskListBuff); printf("******************************************************\r\n"); return 0; }
三、任务系统占用率打印
uint8_t u8TaskListBuff[400]; uint32_t gu32TimeCount = 0;//添加一个到50-200us的定时器里面循环加加 /***************************任务运行时间函数***************************/ //#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats void configureTimerForRunTimeStats(void){ HAL_TIM_Base_Start_IT(&htim2); //开启TIM6中断并启动定时器 gu32TimeCount = 0ul; //定时器统计值初始化为0 } //#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue unsigned long getRunTimeCounterValue(void){ return gu32TimeCount; } /** *@FUN: *@PRO: *@BAK:LQW */int8_t Log_TaskPesMsg(void) {// memset(u8TaskListBuff, 0, 400); vTaskGetRunTimeStats((char*)u8TaskListBuff); printf("处理器利用率统计\r\n"); printf("Name Abs Time Time\r\n"); printf("******************************************************\r\n"); printf("%s",u8TaskListBuff); printf("******************************************************\r\n"); return 0; } //*********main.c 50us定时器处调用的 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { /* USER CODE BEGIN Callback 0 */ /* USER CODE END Callback 0 */ if (htim->Instance == TIM1) { HAL_IncTick(); } /* USER CODE BEGIN Callback 1 */ if(htim->Instance == TIM2){ gu32TimeCount++; } /* USER CODE END Callback 1 */ }
循环1秒调用 Log_TaskPesMsg 即可实现任务占用率查看