freertos 学习笔记——第二章、任务调度——调度锁

2.3 调度锁

2.3.1调度锁基本概念

调度锁:开启调度锁后不会被高优先级任务打断但会被中断打断。

注意事项:

1,vTaskSuspendAll()和xTaskResumeAll()要成对使用

2,调度锁开启和关闭期间不可以有任何引起任务切换的API。例如:vTaskDelay()等

如果想做延时可以采用裸机中的延时写法,写一个延时函数。vTaskDelay()会让任务处于阻塞状态引发任务切换,调度器都关闭了任务已无法切换。这是知识点不难但使用时一定要注意。

思考一下

1,哪种情况下使用临界段?哪种情况下使用调度锁?

2.3.2重点API介绍

vTaskSuspendAll();//开启调度锁
xTaskResumeAll();//关闭调度锁

2.3.3 如何使用

//示例代码
void task_test(void* pvParameters)
{
  while(1)
  {
    vTaskSuspendAll();//开启调度锁
    printf("调度锁\r\n");
    xTaskResumeAll();
    vTaskDelay(100);
  }
}

 


版权声明:本文为u011493527原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。