2016-07-31 5 views
-1

私はCEスケジューリングアルゴリズムの疑似コードを書いています。それを見れば、タスクEは決して完結するつもりはない。誰かが私が間違っているのを見ることができますか?私はこの周期的な実行スケジュールに対して25msecの正しい割り込み時間を選択していますか?円柱エグゼクティブ(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

あなたはどのタスクEを意味していますか? – Olaf

答えて

1

5つのタスクがすべて同じ25ミリ秒で実行される必要があると考えて間違っています。そうではありません。 5つのタスクはすべてミリ秒ごとに実行する必要があります。また、100ミリ秒の期間に2回以上実行するタスクもありますが、5つのタスクはすべて25538ミリ秒で実行する必要はありません。

たとえば、タスクCとDは50ミリ秒ごとに実行されます。しかし、彼らは同じ25ミリ秒のフェーズで実行する必要はありません。それらは25ミリ秒だけ位相がずれている可能性があります。 100ミリ秒の期間を25ミリ秒のフェーズに分割する場合、任意のフェーズで最大で4つのタスクしか実行する必要はありません。

(あなたが小さい相に100ミリ秒、例えば5ミリ秒を破るならば、あなたは何の2つのタスクは、これまで同位相で実行する必要がないということは、このような設計することができるかもしれません。)

この記事を読みます、Multi-rate Main Loop Tasking、あなたが行っていることの詳細な説明と素晴らしい例があります。

+0

ああ、ありがとう! – Tom

1

あなたはEは、任意の25msの期間で実行することができるようにCとDをインターリーブする必要があります。

Period  0ms 25ms 50ms 100ms 
      ----------------------- 
      A  A  A  A 
      B  B  B  B 
      C  D  C  D 
      -  -  -  E 
      ----------------------- 
Exec Time 20ms 20ms 20ms 22ms 
関連する問題