2016-07-31 104 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