抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

CPU利用率

CPU​利用率需要控制在一个较好的范围,能够完美响应紧急的事件

  1. 开启宏定义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
/* 与宏 configUSE_TRACE_FACILITY 同时为 1 时会编译下面 3 个函数
* prvWriteNameToBuffer()
* vTaskList(),
* vTaskGetRunTimeStats()
*/
#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
//CPU利用率
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