2016-07-07 244 views
0

关于FreeRTOS的任务调度一个小问题:FreeRTOS的上下文切换 - xQueueSend

称为xQueueSend函数内部的任务调度或调用它在下次系统打勾?

+1

我讨厌在多个地方回答相同的问题,所以只会发布一个链接到我以前的回答https://sourceforge.net/p/freertos/discussion/382005/thread/f0cb1a73/(它也会出现在[支持论坛存档](http://www.freertos.org/FreeRTOS_Support_Forum_Archive/freertos_support_forum_archive_index.html)在本周末)。 – Richard

回答

0

FreeRTOS将始终运行能够运行的最高优先级任务。这意味着如果您使用队列,信号量,直接任务通知,事件组,互斥锁(任何其他任务?),以便另一个任务解除阻塞,并且解除阻塞的任务的优先级高于正在运行的任务,那么调度程序将切换到未被阻止的任务。这是一个例外,如果应用程序编写者通过调用vTaskSuspendAll()来锁定调度器,在这种情况下,解除阻塞的任务将保持等待状态,直到应用程序编写器调用xTaskResumeAll()为止 - 在这种情况下,最高优先级的任务能够运行将立即开始运行(在对xTaskResumeAll()的调用返回偶数之前)。