我正在为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;
答案 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