【发布时间】:2017-06-13 09:46:11
【问题描述】:
我正在将 FreeRTOS 用于我的一个项目,我正在阅读文档,但有些东西我无法理解。 我知道在触发滴答中断时会发生上下文切换,因此调度程序执行其工作并取消阻塞等待事件的任务并选择处于就绪状态的更高优先级任务。但是当任务在滴答中断之前阻塞时会发生什么?该文档似乎暗示会立即发生上下文切换(例如,两个具有不同优先级的任务,每个任务都调用 vTaskDelay() 以释放 CPU 时间片)。它是如何发生的?我进行了搜索,但找不到任何问题的答案。
EDIT 在我的 FreeRTOS (SAMD21 Cortex-M0+) 端口中,portYIELD() 宏用于简单地请求 SVCall 异常,所以这是用于执行上下文切换的机制(除了来自在滴答中断上运行的调度程序)?
【问题讨论】:
-
不确定您要问的确切内容,但如果线程在时间片结束之前放弃处理器,则 RTOS 应立即运行调度程序。
-
@FiddlingBits 是的,这就是我想的,但在文档中没有任何痕迹。它只讨论了在每个周期性滴答上运行的 ISR,但是在滴答之间发生的上下文切换呢?调度程序是否接管并执行上下文切换?如果是这样,是否会触发中断(软件)以执行此操作?
-
最新的 M0 端口不再使用 SVC。但是我希望 SVC 中断会触发 PendSV 中断来进行实际的上下文切换。