CPU利用率
CPU
利用率需要控制在一个较好的范围,能够完美响应紧急的事件
- 开启宏定义
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS 1
、portGET_RUN_TIME_COUNTER_VALUE 1
创建CPU利用率监控
开启宏定义
1 2 3 4 5 6 7 8 9 10 11 12 13
| #define configGENERATE_RUN_TIME_STATS 1
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1 extern volatile uint32_t CPU_RunTime; #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (CPU_RunTime = 0ul) #define portGET_RUN_TIME_COUNTER_VALUE() CPU_RunTime
|
创建一个引用,并不是创建一个真实的句柄
1 2 3 4
| static TaskHandle_t LED0_Task_Handle=NULL; static TaskHandle_t LED4_Task_Handle=NULL; static TaskHandle_t CPU_Task_Handle=NULL;
|
开启定时中断服务
1 2 3 4 5 6 7 8 9
| volatile uint32_t CPU_RunTime = 0UL; void BASIC_TIM_IRQHandler (void) { if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET ) { CPU_RunTime++; TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); } }
|
创建LED0
任务
1 2 3 4 5 6 7 8 9 10 11 12 13
| static void LED0_Task(void *paramter) { while(1) { LEDA_ON(GPIO_Pin_0); vTaskDelay(500); printf("led0_task running,LED0_ON\r\n"); LEDA_OFF(GPIO_Pin_0); vTaskDelay(500); printf("led0_task running,LED0_OFF\r\n"); } }
|
创建LED4
任务
1 2 3 4 5 6 7 8 9 10 11 12 13
| static void LED4_Task(void *paramter) { while(1) { LEDA_ON(GPIO_Pin_4); vTaskDelay(300); printf("led4_task running,LED4_ON\r\n"); LEDA_OFF(GPIO_Pin_4); vTaskDelay(300); printf("led4_task running,LED4_OFF\r\n"); } }
|
创建CPU
任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| static void CPU_Task(void *paramter) { uint8_t CPU_RunInfo[400]; while (1) { memset(CPU_RunInfo,0,400); vTaskList((char *)&CPU_RunInfo); printf("-----------------------\r\n"); printf("任务名 任务状态 优先级 剩余栈 任务序号\r\n"); printf("%s", CPU_RunInfo); printf("---------------------------------------------\r\n");
memset(CPU_RunInfo,0,400); vTaskGetRunTimeStats((char *)&CPU_RunInfo);
printf("任务名 运行计数 使用率\r\n"); printf("%s", CPU_RunInfo); printf("---------------------------------------------\r\n\n"); vTaskDelay(1000); }
}
|
需要注意的是定时中断服务要选用TIM1
或者TIM2