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

子任務(wù)

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

評論