三、任务的状态机
Suspended:挂起态
Running:运行态
Blocked:阻塞态/等待态
Ready:就绪态
上图官方没有列出任务被中断的情况,倘若被中断的任务如果从中断返回,则返回被中断的任务。当到达下一个时 钟节拍,CPU资源给到就绪任务中优先级最高的任务
3.1 示例代码
3.1.1 相同优先级
代码示例
int main(void)
{
/* 创建app_task1任务 */
xTaskCreate(
(TaskFunction_t )app_task1, /* 任务入口函数 */
(const char* )"app_task1", /* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )5, /* 任务的优先级 */
(TaskHandle_t* )&app_task1_handle); /* 任务控制块指针 */
/* 创建app_task2任务 */
xTaskCreate(
(TaskFunction_t )app_task2, /* 任务入口函数 */
(const char* )"app_task2", /* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )5, /* 任务的优先级 */
(TaskHandle_t* )&app_task2_handle); /* 任务控制块指针 */
/* 开启任务调度 */
vTaskStartScheduler();
while(1);
}
static void app_task1(void* pvParameters)
{
for(;;)
{
printf("app_task1 is running ...\r\n");
vTaskDelay(20);
}
}
static void app_task2(void* pvParameters)
{
for(;;)
{
printf("app_task2 is running ...\r\n");
vTaskDelay(30);
}
}
运行结果:
3.1.1 不同优先级
代码示例
int main(void)
{ /* 创建app_task1任务 */
xTaskCreate((TaskFunction_t )app_task1, /* 任务入口函数 */
(const char* )"app_task1", /* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )6, /* 任务的优先级 */
(TaskHandle_t* )&app_task1_handle); /* 任务控制块指针 */
/* 创建app_task2任务 */
xTaskCreate((TaskFunction_t )app_task2, /* 任务入口函数 */
(const char* )"app_task2", /* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )5, /* 任务的优先级 */
(TaskHandle_t* )&app_task2_handle); /* 任务控制块指针 */
/* 开启任务调度 */
vTaskStartScheduler();
while(1);
}
static void app_task1(void* pvParameters)
{
for(;;)
{
printf("app_task1 is running ...\r\n");
vTaskDelay(20);
}
}
static void app_task2(void* pvParameters)
{
for(;;)
{
printf("app_task2 is running ...\r\n");
vTaskDelay(30);
}
}
运行结果: