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);
}
}