创建两个任务
xTaskCreate(vLowPriorityTask,"Low",configMINIMAL_STACK_SIZE,NULL,1,NULL);
xTaskCreate(vHighPriorityTask,"High",configMINIMAL_STACK_SIZE,NULL,2,NULL);
这里优先级Priority有三种情况:
-
TaskA > TaskB
TaskA 一直占用时间片,只有当TaskA 进行vTaskDelay让出cpu的操作之后TaskB才能拿到时间片执行TaskB里面的业务。但是vTaskDelay结束之后,TaskA会马上抢占下一个时间片,TaskB又拿不到时间片了。低优先级任务可能发生饥饿。
即:高优先级任务从Blocked变成Ready时,可以立即抢占低优先级任务。
-
TaskA = TaskB
交替轮询,不管他们各自是否进行了vTaskDelay,一但他们vTaskDelay结束之后就会加入到轮询。
-
TaskA < TaskB
与上面第一种刚好相反。