改進型時間觸發嵌入式系統編程模式
由于任務⑧執行一次要幾秒鐘的時間,整個超級循環執行一次至少大于任務⑧需要的時間,也就是說這個超級循環循環一次要幾秒鐘時間,將滿足不了各任務響應時間的要求。
要解決這個問題,只有把任務⑧拆分成很多個子任務,將每個子任務的耗時壓縮到10 ms左右,并定義好各個子任務完成后的狀態,在超級大循環中每次根據狀態只執行一個子任務,程序結構如下:
while(1){
任務①;
任務②;
……
switch(子任務狀態){
case 子任務狀態①:
子任務①;
break;
……
case 子任務狀態②:
子任務②;
break;
……
case 子任務狀態

子任務

break;
}
}
這樣,就需要把一個耗時幾秒的FFT運算任務拆分成幾百個耗時10 ms左有的子任務,這顯然是不可接受的。除此之外,超級大循環結構隱含的一個缺點就是隨著任務的增加,循環體的執行時間是線性增加的,在實際設計中即使沒有像任務⑧那樣的高耗時任務,當系統功能增加時要保證系統響應的及時性也是一個不小的挑戰。
1.2 使用“時間觸發編程模式”進行編程
“時間觸發編程模式”的核心是建立一個基丁時間觸發的合作式的任務調度器,在系統中盡量減少事件觸發(減少中斷的使用),系統通過任務調度器完成各任務的調度執行,下面是“時間觸發編程模式”的典型程序結構:

評論