洪妙婷
(廈門ABB低壓電器設(shè)備有限公司,福建 廈門 361006)
嵌入式系統(tǒng)的可靠性措施
洪妙婷
(廈門ABB低壓電器設(shè)備有限公司,福建廈門361006)
工業(yè)控制中的嵌入式系統(tǒng)可靠性是至關(guān)重要。文章結(jié)合實(shí)際,闡述了在嵌入式系統(tǒng)的軟件設(shè)計(jì)所采取的一些措施。
嵌入式系統(tǒng);可靠性;軟件
隨著嵌入式系統(tǒng)在工業(yè)控制領(lǐng)域廣泛的應(yīng)用,應(yīng)用的復(fù)雜度不斷提高,使人們對(duì)它的穩(wěn)定性和可靠性的要求越來越高。特別是在工業(yè)應(yīng)用下,這樣的要求更是嚴(yán)苛。如果系統(tǒng)在某段時(shí)間無法完成預(yù)期服務(wù),可能就會(huì)導(dǎo)致用戶巨大的損失。本文主要探討在嵌入式系統(tǒng)開發(fā)過程所采取的一系列提供軟件可靠性的措施,在實(shí)際應(yīng)用中驗(yàn)證這些措施是行之有效的。
2.1嵌入式系統(tǒng)的任務(wù)調(diào)度監(jiān)控
實(shí)時(shí)嵌入式系統(tǒng)中任務(wù)之間是優(yōu)先級(jí)搶占式調(diào)度,相同優(yōu)先級(jí)任務(wù)之間是時(shí)間片輪轉(zhuǎn)進(jìn)行調(diào)度。這樣可以保證重要的任務(wù)最先運(yùn)行。當(dāng)任務(wù)發(fā)生異常,如除零、數(shù)據(jù)溢出或者訪問一個(gè)非法內(nèi)存地址,CPU就會(huì)觸發(fā)異常,系統(tǒng)會(huì)默認(rèn)將任務(wù)掛起。異常之后CPU忽略掛起任務(wù)的調(diào)度,系統(tǒng)不會(huì)自動(dòng)把有任務(wù)掛起的消息自動(dòng)傳遞給用戶,所以在任務(wù)的調(diào)度時(shí)系統(tǒng)會(huì)忽略處于掛起狀態(tài)的任務(wù),這樣某些重要的任務(wù)由于掛起而被系統(tǒng)忽略,系統(tǒng)變得不穩(wěn)定,用戶任務(wù)得不到執(zhí)行,用戶需求得不到滿足等等,甚至造成系統(tǒng)死機(jī)。
為了避免任務(wù)調(diào)度異常而引發(fā)的系統(tǒng)問題,就所有的任務(wù)調(diào)度進(jìn)行調(diào)度監(jiān)控,并且某個(gè)任務(wù)出現(xiàn)錯(cuò)誤后,進(jìn)行及時(shí)修復(fù)。因此在多個(gè)實(shí)時(shí)任務(wù)系統(tǒng)中應(yīng)用了軟件喂狗結(jié)合硬件喂狗方法。在主程序中首先創(chuàng)建一個(gè)監(jiān)控器任務(wù)線程,它的優(yōu)先級(jí)高于其他線程。監(jiān)控線程在其他被監(jiān)控的線程正常工作的情況下,一定時(shí)間內(nèi)對(duì)看門狗進(jìn)行喂狗操作,喂狗操作通過調(diào)用軟件喂狗完成。如果某個(gè)線程出現(xiàn)故障,監(jiān)控線程監(jiān)控并記錄該線程的看門狗計(jì)數(shù)器 和看門狗超時(shí)次數(shù)。當(dāng)該線程累加看門狗超時(shí)大于預(yù)定的告警次數(shù),就自動(dòng)重啟的該線程。如果監(jiān)控線程自身出現(xiàn)故障,不能及時(shí)執(zhí)行硬件喂狗操作,看門狗也自動(dòng)復(fù)位重啟。
我們設(shè)計(jì)中看門狗通過檢查各應(yīng)用任務(wù)是否在規(guī)定的時(shí)間內(nèi)對(duì)其 “軟件喂狗”來確定各任務(wù)的運(yùn)行狀態(tài),硬件看門狗通過檢查軟件看門狗是否在規(guī)定的時(shí)間內(nèi)對(duì)其 “喂狗”來實(shí)現(xiàn)對(duì)監(jiān)視器任務(wù)的監(jiān)視.我們的設(shè)計(jì)使用UCLinux為操作系統(tǒng),系統(tǒng)為每個(gè)任務(wù)設(shè)定優(yōu)先級(jí)和分配看門狗計(jì)時(shí)變量.系統(tǒng)具體的執(zhí)行操作如下:
1)監(jiān)控器任務(wù)在系統(tǒng)中有最高優(yōu)先級(jí),監(jiān)控器的執(zhí)行周期是1ms,其執(zhí)行周期也是所有任務(wù)里最短的。監(jiān)控器在執(zhí)行周期會(huì)對(duì)每個(gè)被監(jiān)控任務(wù)的軟件看門狗計(jì)數(shù)累加。
系統(tǒng)中每個(gè)被監(jiān)控的任務(wù)有一個(gè)軟件看門狗計(jì)數(shù)器,周期性地對(duì)每個(gè)被監(jiān)控任務(wù)“軟件喂狗”,就是對(duì)軟件看門狗計(jì)數(shù)清零處理。
監(jiān)控器被監(jiān)控任務(wù)的軟件看門狗計(jì)數(shù)累加值,比較歷史記錄的最大看門狗計(jì)數(shù)值,就可以記錄每個(gè)被監(jiān)控任務(wù)最大間隔執(zhí)行時(shí)間。
2)當(dāng)某個(gè)被監(jiān)控任務(wù)掛起或中斷運(yùn)行,軟件看門狗的計(jì)數(shù)就會(huì)不斷累加,且其計(jì)數(shù)器值超過預(yù)定的告警時(shí)間,該任務(wù)的看門狗喂狗超時(shí)告警次數(shù)進(jìn)行累加記錄。若該任務(wù)喂狗超時(shí)次數(shù)累計(jì)大于預(yù)設(shè)允許值,系統(tǒng)就會(huì)自動(dòng)重啟該任務(wù)。如果在設(shè)定的次數(shù)內(nèi)不能夠有效啟動(dòng)該任務(wù),軟件看門狗則延時(shí)喂內(nèi)置硬件看門狗,硬件看門狗計(jì)數(shù)器溢出,自動(dòng)重啟系統(tǒng)。各個(gè)任務(wù)的最大間隔執(zhí)行時(shí)間和喂狗超時(shí)告警次數(shù)為被存儲(chǔ)在永久存儲(chǔ)空間,保證數(shù)據(jù)不會(huì)因?yàn)橄到y(tǒng)故障重啟而丟失,這些數(shù)據(jù)可以用于日后的系統(tǒng)故障分析和性能評(píng)估。
3)監(jiān)控器任務(wù)在每個(gè)循環(huán)周期性會(huì)進(jìn)行硬件喂狗,累計(jì)硬件看門狗計(jì)數(shù),并統(tǒng)計(jì)自身任務(wù)調(diào)度間隔時(shí)間。若監(jiān)控器任務(wù)掛起,則硬件看門狗會(huì)因?yàn)槌瑫r(shí)而引發(fā)自動(dòng)重啟系統(tǒng),以確保系統(tǒng)長時(shí)間穩(wěn)定運(yùn)行。如圖1所示。
圖1 監(jiān)控器周期循環(huán)
2.2系統(tǒng)容錯(cuò)處理措施
在工業(yè)控制中,由于系統(tǒng)的運(yùn)行環(huán)境是比較惡劣,常存在干擾源,如環(huán)境溫度、電場、磁場等。干擾的信號(hào)可能導(dǎo)致數(shù)據(jù)采集失效、控制失靈或系統(tǒng)運(yùn)行失常。那么在軟件設(shè)計(jì)為消除或降低干擾影響采取一些措施。
2.2.1系統(tǒng)‘死鎖’的對(duì)策
嵌入式系統(tǒng)運(yùn)行過程中,由于干擾信號(hào)的破壞某個(gè)接口的狀態(tài),系統(tǒng)錯(cuò)誤地進(jìn)入外設(shè)服務(wù),如等待接受數(shù)據(jù),但實(shí)際沒有數(shù)據(jù)到此接口,系統(tǒng)的資源因此就被一直占用而不能釋放,其他的任務(wù)不能執(zhí)行,系統(tǒng)出現(xiàn)‘死鎖’現(xiàn)象。為了杜絕系統(tǒng)‘死鎖’問題 ,在代碼編碼過程中,針對(duì)每個(gè)接口對(duì)外設(shè)的響應(yīng)時(shí)間,分配最大允許響應(yīng)時(shí)間。在每個(gè)接口服務(wù)加上超時(shí)判斷。當(dāng)干擾信號(hào)改變接口狀態(tài)系統(tǒng)誤操作,由于外設(shè)的數(shù)據(jù)一直無效,等待一段時(shí)間該外設(shè)服務(wù)任務(wù)超時(shí)退出,系統(tǒng)的正常執(zhí)行周期不會(huì)被影響,從而解決系統(tǒng)‘死鎖’的問題。
2.2.2軟件濾波的方法
現(xiàn)代工業(yè)控制系統(tǒng)的硬件設(shè)計(jì)越來越復(fù)雜,相互干擾越來越強(qiáng)烈,模擬濾波電路已經(jīng)不能滿足要求。軟件濾波是利用一定的算法,運(yùn)用CPU運(yùn)算和控制功能,可以實(shí)現(xiàn)高難度的復(fù)雜信號(hào)處理。軟件濾波具有抗干擾性強(qiáng),改變靈活,工作穩(wěn)定等特性。實(shí)時(shí)系統(tǒng)中對(duì)于信號(hào)輸入,可以通過多次重復(fù)采樣,利用這些方法進(jìn)行數(shù)字濾波處理,有算術(shù)平均濾波法、程序判斷濾波法、加權(quán)遞推平均濾波法、中位值濾波法等。對(duì)于信號(hào)輸出,可以采用重復(fù)輸出。輸出的重復(fù)周期要盡可能短,這樣干擾信號(hào)影響執(zhí)行部件之前,正確信號(hào)又出現(xiàn)。
2.2.3數(shù)據(jù)的備份
工業(yè)控制系統(tǒng)一些關(guān)鍵數(shù)據(jù)需要定期進(jìn)行備份,并且至少有兩個(gè)以上的備份副本。這樣的數(shù)據(jù)備份時(shí),需要將數(shù)據(jù)以及數(shù)據(jù)的校驗(yàn)和一起保存起來。讀取數(shù)據(jù)也需要對(duì)數(shù)據(jù)和校驗(yàn)和一起比較從而保證數(shù)據(jù)的正確性。在操作這些數(shù)據(jù)時(shí),可以把主、副本數(shù)據(jù)進(jìn)行比較,若發(fā)現(xiàn)數(shù)據(jù)變化,要分析原因并采取預(yù)定的方法處理。
2.3故障診斷措施
嵌入式系統(tǒng)在運(yùn)行過程中可能出現(xiàn)異常導(dǎo)致系統(tǒng)重啟或死機(jī),異常又不容易重現(xiàn),這樣造成故障原因難于定位和解決。
我們的設(shè)計(jì)中使用ARM芯片和UCLinux操作系統(tǒng),ARM提供了一些異常向量并且Linux的內(nèi)核系統(tǒng)可以對(duì)這些向量進(jìn)行異常處理。當(dāng)異常發(fā)生時(shí),ARM根據(jù)當(dāng)前的工作模式跳轉(zhuǎn)到不同的異常地址并執(zhí)行異常例程。系統(tǒng)異常發(fā)生后利用Backtrace可以在程序異常退出時(shí)尋找錯(cuò)誤原因。是其原理是回溯堆棧,列出函數(shù)的調(diào)用關(guān)系。也就是在異常例程里對(duì)CPU寄存器現(xiàn)場的分析,找到異常發(fā)生時(shí)的函數(shù)地址和堆棧的幀地址,再分析上層函數(shù)的堆棧,再找再上層的幀地址……一直找到最頂層為止。幀地址指的是一塊在堆棧上存放局部變量,上層返回地址,及寄存器值的空間。因此我們利用Linux提供的庫函數(shù)Backtrace并加以改進(jìn),在異常處理例程里將系統(tǒng)異常時(shí)被調(diào)用的函數(shù)地址列表和CPU寄存器保存到永久存儲(chǔ)空間作為故障日志。我們的設(shè)計(jì)的實(shí)現(xiàn)是將程序編譯成ELF二進(jìn)制格式的,只有使用這樣的格式才能獲取系統(tǒng)所有的函數(shù)名稱和偏移地址的列表。在系統(tǒng)出現(xiàn)異常的時(shí)候,系統(tǒng)在出錯(cuò)時(shí)使用的CPU寄存器和被調(diào)用函數(shù)地址列表被記錄到跟蹤日志。由于系統(tǒng)上電加載的起始地址是動(dòng)態(tài)變化的,跟蹤日志也記錄了系統(tǒng)加載運(yùn)行時(shí)主程序入口地址。根據(jù)跟蹤日志記錄的出錯(cuò)函數(shù)地址與主程序入口地址的差值就是函數(shù)的偏移地址,對(duì)照系統(tǒng)函數(shù)名稱和偏移地址列表,就可以定位出錯(cuò)的函數(shù)名稱了。
圖2 系統(tǒng)異常函數(shù)關(guān)系
如圖2所示,系統(tǒng)異常發(fā)生是的函數(shù)及其的函數(shù)調(diào)用關(guān)系就可以清晰的呈現(xiàn)出,系統(tǒng)異常出現(xiàn)在touch_wdt(),其函數(shù)調(diào)用鏈為 timer_thread()Timer_FeedWD()Timer_touch_wdt()touch_wdt().這樣設(shè)計(jì)人員可以更容易地分析出錯(cuò)原因和更快地修正問題。
本文概述了在嵌入式系統(tǒng)開發(fā)過程中為了提高系統(tǒng)的可靠性采取的一些軟件技術(shù)措施。這些措施是在軟件設(shè)計(jì)上一些經(jīng)驗(yàn)總結(jié),而提高系統(tǒng)的可靠性是一項(xiàng)系統(tǒng)工程,還需要針對(duì)具體的產(chǎn)品需求,把系統(tǒng)的硬件和軟件有效的結(jié)合起來,才能設(shè)計(jì)出高質(zhì)量、高可靠性的系統(tǒng)。
[1]唐明.WatchDog在嵌入式應(yīng)用中的問題[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(11):70-71.
[2] Jean J.Labrosse.嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-Ⅲ[M]宮輝等譯.北京:航空航天大學(xué)出版社,2012.
[3] 凌忠興.嵌入式系統(tǒng)中數(shù)字濾波的算法及軟件流程 [J].電測與儀表,2007.1:58-61,17.
[4] 符意德,陸陽.嵌入式系統(tǒng)原理及接口技術(shù)[M].北京:清華大學(xué)出版社,2007.
[5] 白國政.嵌入式軟件異常處理機(jī)制的研究[J].微機(jī)發(fā)展,2005.(10):88-89,107.
TP311