基于時(shí)間觸發(fā)嵌入式系統的設計與應用
1.引言
本文引用地址:http://dyxdggzs.com/article/227567.htm近年來(lái),嵌入式發(fā)展迅速,采用51單片機死循環(huán)的事件觸發(fā)編程方式已逐漸不能滿(mǎn)足企業(yè)對產(chǎn)品穩定性和安全性的要求。目前,嵌入式系統軟件有VxWork、Linux、WinCE、μC/OS-II等,可出于成本和技術(shù)上的考慮,微控制器往往不會(huì )選取其進(jìn)行設計。在實(shí)際應用中,往往會(huì )面臨同時(shí)應付多外設、多任務(wù)的情況,則對它們的相互調度必不可少。時(shí)間觸發(fā)嵌入式系統就是這樣的簡(jiǎn)單實(shí)用的操作系統。
本文設計了基于A(yíng)VR微控制器的時(shí)間觸發(fā)多任務(wù)調度器并應用于實(shí)際。該調度器使用傳遞消息(message)的方式使得微控制器在多個(gè)任務(wù)及設備間切換。
2.AVR微控制器的結構特點(diǎn)
AVR是目前使用以該系列的ATmega128為例說(shuō)明,它采用哈佛結構,RISC指令集、低功耗、片上資源豐富的特點(diǎn),極大簡(jiǎn)化了外圍電路,使系統更加穩定可靠。其特點(diǎn)為嵌入式系統設計提供了良好的硬件保證。
3.嵌入式兩種觸發(fā)方式的對比
在嵌入式系統中,通常采用兩種本質(zhì)上不同的調度方式:事件觸發(fā)和時(shí)間觸發(fā)。事件觸發(fā)方式往往使用多級中斷來(lái)實(shí)現,其發(fā)生時(shí)間具有隨機性;而時(shí)間觸發(fā)方式由一個(gè)全局時(shí)鐘驅動(dòng),系統的行為在功能與時(shí)間上都是確定的,即具有可預測性。
3.1 事件觸發(fā)方式存在的問(wèn)題
嵌入式系統開(kāi)發(fā)人員有一種中斷事件絕不會(huì )丟失的錯誤觀(guān)念,這往往給開(kāi)發(fā)的產(chǎn)品帶來(lái)災難性的后果。中斷事件丟失在實(shí)際應用中是一個(gè)不爭的事實(shí),產(chǎn)生的原因有多方面,但無(wú)外乎內因和外因兩種。外因指嵌入式系統外產(chǎn)生的原因,這里主要指中斷源信號丟失或過(guò)于頻繁;而內因又可分為硬件原因和軟件原因,硬件原因主要由所用嵌入式器件的中斷嵌套能力所致,軟件原因主要由開(kāi)發(fā)者編程時(shí)對任務(wù)中斷優(yōu)先級設置錯誤以及任務(wù)處理不當所致。
例如,中斷0是一個(gè)高優(yōu)先級中斷,而中斷1是一個(gè)低優(yōu)先級中斷,則由高優(yōu)先級中斷激活的中斷服務(wù)程序不能被低優(yōu)先級的中斷打斷。于是,對第二個(gè)中斷的響應將被延遲,甚至在一些情況下它有被完全忽略的可能。
如果多個(gè)中斷源可能在“隨機的”時(shí)間間隔產(chǎn)生中斷,則中斷響應可能被遺漏。實(shí)際上,在同時(shí)有幾個(gè)有效的中斷源的情況下,幾乎不可能創(chuàng )建程序代碼來(lái)正確地處理所有可能的中斷組合。并且同時(shí)處理多個(gè)事件不但增加了系統復雜性,而且降低了系統在所有情況下的行為預測能力。至于使用效率,Metzner討論并得出結論:一個(gè)包含27個(gè)任務(wù)、采用RM調度算法的事件觸發(fā)系統,CPU的實(shí)際利用率僅為18%.
3.2 時(shí)間觸發(fā)方式的優(yōu)勢
在該系統中,設計人員能夠通過(guò)仔細安排可控的順序,保證一次只處理一個(gè)事件。它的可預測性使其成為安全相關(guān)的系統的首選。
Kopetz首先提出:使用基于時(shí)間觸發(fā)的合作式調度器會(huì )使得系統有非常好的可預測性。除可提高可靠性之外,使用該方式有助于減輕CPU的負荷及存儲器的使用量。
4.時(shí)間觸發(fā)嵌入式系統的設計
在該調度器中,定時(shí)器的設置被分離出來(lái),并使之不依賴(lài)于編譯器的數據類(lèi)型以及處理器的位數,通過(guò)修改該部分可以輕松移植到多種硬件平臺。系統整體方框圖如圖1所示:

4.1 消息隊列
消息隊列是調度器的核心,它是用戶(hù)自定義的數據類(lèi)型,包括了每個(gè)任務(wù)所需要的信息。盡量將其存儲在DATA區,以供快速存取。
對于基于時(shí)間觸發(fā)的混合式調度器,使用如下的數據結構,對于每個(gè)任務(wù)存儲器的開(kāi)銷(xiāo)僅為8個(gè)字節。即使是使用32位處理器,每個(gè)任務(wù)的開(kāi)銷(xiāo)也僅為14個(gè)字節。

4.2 調度器定時(shí)器初始化函數
該函數用來(lái)產(chǎn)生驅動(dòng)調度器的定時(shí)時(shí)標。
本文所選用AVR系列的ATmega128微控制器具有四個(gè)定時(shí)器(兩個(gè)8位,兩個(gè)16位),任一個(gè)都能用來(lái)驅動(dòng)調度器,權衡考慮選用定時(shí)器0.
void SCH_Init_T0(void){逐個(gè)刪除各個(gè)任務(wù);停止定時(shí)器0;設置時(shí)間大小函數;使能定時(shí)器0方式;啟動(dòng)定時(shí)器0;}
注:在此期間不可開(kāi)啟總中斷,即:

電磁爐相關(guān)文章:電磁爐原理
評論