【发布时间】:2016-12-21 02:23:57
【问题描述】:
我正在阅读 David E.Simon 的“嵌入式软件入门”。 其中讨论了 RTOS 及其构建块调度程序和任务。它表示每个任务要么处于就绪状态,要么处于运行状态,要么处于阻塞状态。我的问题是调度程序如何确定任务处于阻塞状态?假设它正在等待一个信号量。那么信号量很可能处于无法返回的状态。调度器是否查看一个函数是否没有返回,然后将其状态标记为阻塞?
【问题讨论】:
-
信号量和while循环?这是等待同步原语的不寻常方式......
-
我的意思是 Semaphore 的实现是一个 while() 循环。我将编辑问题。
-
您要问的实际上是一个实现细节,对 RTOS 的一般工作方式没有真正的兴趣。有几种方法可以实现这一点,选择可能取决于代码大小限制、可用 RAM(例如,非常小的 micros)、整体性能等。例如,当给定信号量不可用时,任务被标记为阻塞在试图得到它。或者,当信号量不可用时,只需让步到下一个任务(隐式将其标记为阻塞)以在下一个任务切片重试,直到最终信号量可用(可怜的版本)。
标签: rtos