FreeRTOS调度锁,禁止所有任务调度

调度锁就是 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 );
    }    
}
原创文章 81 获赞 48 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_15181569/article/details/105528699