基于時間觸發嵌入式系統的設計與應用
根據筆者經驗,一個較為可取的時間片是略大于一次典型的交互所需要的時間,使大多數進程在一個時間片內完成。經反復嘗試,時間片選擇在1~5ms之間執行效率較高,這樣既可滿足響應速度的要求又能把任務執行的時間降到最低。該時間與任務個數和任務運行時間均有關,具體大小視情況而定。
4.3 中斷服務程序
建議該函數由CTC方式激活,當某任務需要運行時,使之處于就緒態等待被執行。該函數內容由具體任務而定。
4.4 調度器任務添加函數
該函數用來將任務添加到消息隊列,以保證條件滿足時被調用,函數如下所示:

{定義靜態變量i;循環判斷任務隊列是否有空間;若無,報錯返回;否則,添加任務;}
4.5 調度函數
刷新函數雖然能夠直接激活任務,但若直接運行,長任務將破壞時標中斷,這意味著所有的系統定時都將受到嚴重影響,造成許多任務不能被調度。因此,為了在長任務存在的情況下使調度器的可靠性最大化,分離刷新和調度這兩個操作是必要的。
時間觸發嵌入式系統采用的是FCFS算法,為了提高系統的響應速度,必須要求Durationtask
void SCH_Dispatch_Tasks(void){定義靜態變量i;如果運行標志位大于0,則執行該任務;該標志位清零;如果是單次任務,則將其刪除;}
4.6 調度器任務刪除函數
void SCH_Delete_Task(const uint8task_id){定義 靜態返回值;若指針函數為空,返回空閑代碼;否則,對其延遲、周期、狀態等變量清零;返回代碼;}
5.應用實驗
以電磁爐系統為例,進一步介紹基于AVR微控制器的時間觸發嵌入式系統的具體應用。
電磁爐系統是一個復雜的嵌入式系統,如圖2所示,AVR要處理大量的外圍設備,為便于開發,將整個程序按照硬件及功能進行模塊劃分,各個功能模塊之間通過傳遞消息的方式來完成多任務的處理。

針對該應用,可設計功能模塊:MSGMap[],該數組由各個功能模塊組成,具體子函數如表1所列,使用函數數組的方式可以增強程序的擴展能力。如果有新的外設,只需在這里添加對應的模塊入口,并完成相應的模塊就可以增加系統的功能。

其中每個任務的運行周期間隔時間是程序中設定的參數(周期應為4ms的倍數),具體執行時間由AVR Studio測得,均應小于設定時間片4ms,否則應用將出錯,需重新設定時間片大小或再次分割功能模塊。其中看門狗處理任務是唯一的搶占式任務。
6.結論
實驗表明,以AVR微控制器為核心的控制系統,外圍擴展功能強大、開發較簡單,結合以時間觸發理念為內核的操作系統,設計時一次只為一個任務分配空間,每個任務的存儲開銷只有8個字節,采用由C語言與匯編混合式編程,簡單、安全,可預測性強,尤其適用于對成本和穩定性均有要求的中小企業。隨著嵌入式系統的發展,基于AVR的時間觸發嵌入式系統必然有著廣闊的應用前景。
電磁爐相關文章:電磁爐原理









評論