Cylic Executive(CE)调度

时间:2016-07-31 10:58:23

标签: real-time

我正在为CE调度算法编写伪代码。从它的外观来看,任务E永远不会完整。任何人都可以看到我出错的地方吗?我是否为此循环执行计划选择了25毫秒的正确中断时间?

Task Period p msec Exec Time msec
A    25            10
B    25            5
C    50            5
D    50            5
E    100           2

while(true)
wait_for_int (waits 25ms)
taskA()
taskB()
taskC()
taskD()

wait_for_int (waits 25ms)
taskA()
taskB()


wait_for_int (waits 25ms)
taskA()
taskB()
taskC()
taskD()

wait_for_int (waits 25ms)
taskA()
taskB()

endloop;

2 个答案:

答案 0 :(得分:1)

你认为所有五个任务都需要在同一个25毫秒的时间内运行,这是错误的。事实并非如此。所有五个任务都需要每 100 毫秒运行一次,并且某些任务需要在100毫秒的时间内运行多次,但从不执行所有五个任务需要在相同的 25毫秒。

例如,任务C和D每50毫秒运行一次。但他们不必在相同的25毫秒阶段运行。它们的相位差可能超过25毫秒。如果将100毫秒的时间段划分为25毫秒的时间段,则最多只需要在任何给定阶段运行四个任务。

(如果你将100毫秒分成更小的阶段,例如5毫秒,那么你可以设计它,这样就不需要在同一阶段运行两个任务。)

阅读这篇文章Multi-rate Main Loop Tasking,详细解释您尝试做的事情以及一个很好的例子。

答案 1 :(得分:1)

您需要交错C和D,以便E可以在任何25ms周期内执行:

Period      0ms   25ms  50ms  100ms
            -----------------------
             A     A     A     A
             B     B     B     B
             C     D     C     D
             -     -     -     E
            -----------------------
Exec Time  20ms   20ms  20ms  22ms