创建两个任务

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

    与上面第一种刚好相反。