2016-07-31 47 views
-1

我正在为CE调度算法编写伪代码。从外观上看,任务E永远不会完成。任何人都可以看到我要去哪里吗?我是否为这个循环执行时间表选择了25毫秒的正确中断时间?循环执行(CE)调度

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

哪些任务Ë你的意思是? – Olaf

回答

1

你错了,认为所有五个任务都需要在相同的25毫秒内运行。事实并非如此。所有五个任务需要每运行一个毫秒,有些任务需要在该毫秒的时间内运行多次,但绝不会需要在25毫秒内运行所有五个任务。

例如,任务C和D每50毫秒运行一次。但他们不必跑在同一个25毫秒阶段。它们可以以25毫秒的时间间隔运行。如果将100毫秒的时间段分为25毫秒,那么至多需要在任何给定阶段只运行四个任务。

(如果你打破了100毫秒成更小的阶段,如5毫秒,那么你也许可以设计它,使得没有两个任务永远需要在同一阶段运行。)

阅读这篇文章,Multi-rate Main Loop Tasking,有关您想要做什么的详细说明以及一个很好的示例。

+0

哦,我明白了,谢谢! – Tom

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