调度锁就是 RTOS 提供的调度器开关函数,如果某个任务调用了调度锁开关函数,处于调度锁开和调
度锁关之间的代码在执行期间是不会被高优先级的任务抢占的,即任务调度被禁止。这一点要跟临界段的作用区分开,调度锁只是禁止了任务调度,并没有关闭任何中断,中断还是正常执行的。而临界段进行了开关中断操作。
下面函数开启调度锁:
vTaskSuspendAll()
下面函数关闭调度锁
xTaskResumeAll(void)
上面两个函数要成对使用。
例如:
void vTaskLed1(void *pvParameters)
{
/* 任务都是一个无限,不能返回 */
while(1)
{
vTaskSuspendAll(); /* 开启调度锁 */
printf("任务vTaskLed1正在运行\r\n");
if(!xTaskResumeAll()) /* 关闭调度锁,如果需要任务切换,此函数返回pdTRUE,否则返回pdFALSE */
{
taskYIELD ();
}
LED3_ON;
/* 阻塞延时,单位ms */
vTaskDelay( 500 );
LED3_OFF;
vTaskDelay( 500 );
}
}