?

嵌入式系統的可靠性措施

2016-09-28 10:21洪妙婷
甘肅科技 2016年15期
關鍵詞:看門狗監控器線程

洪妙婷

(廈門ABB低壓電器設備有限公司,福建 廈門 361006)

嵌入式系統的可靠性措施

洪妙婷

(廈門ABB低壓電器設備有限公司,福建廈門361006)

工業控制中的嵌入式系統可靠性是至關重要。文章結合實際,闡述了在嵌入式系統的軟件設計所采取的一些措施。

嵌入式系統;可靠性;軟件

1 概述

隨著嵌入式系統在工業控制領域廣泛的應用,應用的復雜度不斷提高,使人們對它的穩定性和可靠性的要求越來越高。特別是在工業應用下,這樣的要求更是嚴苛。如果系統在某段時間無法完成預期服務,可能就會導致用戶巨大的損失。本文主要探討在嵌入式系統開發過程所采取的一系列提供軟件可靠性的措施,在實際應用中驗證這些措施是行之有效的。

2 提高嵌入式系統可靠性的軟件措施

2.1嵌入式系統的任務調度監控

實時嵌入式系統中任務之間是優先級搶占式調度,相同優先級任務之間是時間片輪轉進行調度。這樣可以保證重要的任務最先運行。當任務發生異常,如除零、數據溢出或者訪問一個非法內存地址,CPU就會觸發異常,系統會默認將任務掛起。異常之后CPU忽略掛起任務的調度,系統不會自動把有任務掛起的消息自動傳遞給用戶,所以在任務的調度時系統會忽略處于掛起狀態的任務,這樣某些重要的任務由于掛起而被系統忽略,系統變得不穩定,用戶任務得不到執行,用戶需求得不到滿足等等,甚至造成系統死機。

為了避免任務調度異常而引發的系統問題,就所有的任務調度進行調度監控,并且某個任務出現錯誤后,進行及時修復。因此在多個實時任務系統中應用了軟件喂狗結合硬件喂狗方法。在主程序中首先創建一個監控器任務線程,它的優先級高于其他線程。監控線程在其他被監控的線程正常工作的情況下,一定時間內對看門狗進行喂狗操作,喂狗操作通過調用軟件喂狗完成。如果某個線程出現故障,監控線程監控并記錄該線程的看門狗計數器 和看門狗超時次數。當該線程累加看門狗超時大于預定的告警次數,就自動重啟的該線程。如果監控線程自身出現故障,不能及時執行硬件喂狗操作,看門狗也自動復位重啟。

我們設計中看門狗通過檢查各應用任務是否在規定的時間內對其 “軟件喂狗”來確定各任務的運行狀態,硬件看門狗通過檢查軟件看門狗是否在規定的時間內對其 “喂狗”來實現對監視器任務的監視.我們的設計使用UCLinux為操作系統,系統為每個任務設定優先級和分配看門狗計時變量.系統具體的執行操作如下:

1)監控器任務在系統中有最高優先級,監控器的執行周期是1ms,其執行周期也是所有任務里最短的。監控器在執行周期會對每個被監控任務的軟件看門狗計數累加。

系統中每個被監控的任務有一個軟件看門狗計數器,周期性地對每個被監控任務“軟件喂狗”,就是對軟件看門狗計數清零處理。

監控器被監控任務的軟件看門狗計數累加值,比較歷史記錄的最大看門狗計數值,就可以記錄每個被監控任務最大間隔執行時間。

2)當某個被監控任務掛起或中斷運行,軟件看門狗的計數就會不斷累加,且其計數器值超過預定的告警時間,該任務的看門狗喂狗超時告警次數進行累加記錄。若該任務喂狗超時次數累計大于預設允許值,系統就會自動重啟該任務。如果在設定的次數內不能夠有效啟動該任務,軟件看門狗則延時喂內置硬件看門狗,硬件看門狗計數器溢出,自動重啟系統。各個任務的最大間隔執行時間和喂狗超時告警次數為被存儲在永久存儲空間,保證數據不會因為系統故障重啟而丟失,這些數據可以用于日后的系統故障分析和性能評估。

3)監控器任務在每個循環周期性會進行硬件喂狗,累計硬件看門狗計數,并統計自身任務調度間隔時間。若監控器任務掛起,則硬件看門狗會因為超時而引發自動重啟系統,以確保系統長時間穩定運行。如圖1所示。

圖1 監控器周期循環

2.2系統容錯處理措施

在工業控制中,由于系統的運行環境是比較惡劣,常存在干擾源,如環境溫度、電場、磁場等。干擾的信號可能導致數據采集失效、控制失靈或系統運行失常。那么在軟件設計為消除或降低干擾影響采取一些措施。

2.2.1系統‘死鎖’的對策

嵌入式系統運行過程中,由于干擾信號的破壞某個接口的狀態,系統錯誤地進入外設服務,如等待接受數據,但實際沒有數據到此接口,系統的資源因此就被一直占用而不能釋放,其他的任務不能執行,系統出現‘死鎖’現象。為了杜絕系統‘死鎖’問題 ,在代碼編碼過程中,針對每個接口對外設的響應時間,分配最大允許響應時間。在每個接口服務加上超時判斷。當干擾信號改變接口狀態系統誤操作,由于外設的數據一直無效,等待一段時間該外設服務任務超時退出,系統的正常執行周期不會被影響,從而解決系統‘死鎖’的問題。

2.2.2軟件濾波的方法

現代工業控制系統的硬件設計越來越復雜,相互干擾越來越強烈,模擬濾波電路已經不能滿足要求。軟件濾波是利用一定的算法,運用CPU運算和控制功能,可以實現高難度的復雜信號處理。軟件濾波具有抗干擾性強,改變靈活,工作穩定等特性。實時系統中對于信號輸入,可以通過多次重復采樣,利用這些方法進行數字濾波處理,有算術平均濾波法、程序判斷濾波法、加權遞推平均濾波法、中位值濾波法等。對于信號輸出,可以采用重復輸出。輸出的重復周期要盡可能短,這樣干擾信號影響執行部件之前,正確信號又出現。

2.2.3數據的備份

工業控制系統一些關鍵數據需要定期進行備份,并且至少有兩個以上的備份副本。這樣的數據備份時,需要將數據以及數據的校驗和一起保存起來。讀取數據也需要對數據和校驗和一起比較從而保證數據的正確性。在操作這些數據時,可以把主、副本數據進行比較,若發現數據變化,要分析原因并采取預定的方法處理。

2.3故障診斷措施

嵌入式系統在運行過程中可能出現異常導致系統重啟或死機,異常又不容易重現,這樣造成故障原因難于定位和解決。

我們的設計中使用ARM芯片和UCLinux操作系統,ARM提供了一些異常向量并且Linux的內核系統可以對這些向量進行異常處理。當異常發生時,ARM根據當前的工作模式跳轉到不同的異常地址并執行異常例程。系統異常發生后利用Backtrace可以在程序異常退出時尋找錯誤原因。是其原理是回溯堆棧,列出函數的調用關系。也就是在異常例程里對CPU寄存器現場的分析,找到異常發生時的函數地址和堆棧的幀地址,再分析上層函數的堆棧,再找再上層的幀地址……一直找到最頂層為止。幀地址指的是一塊在堆棧上存放局部變量,上層返回地址,及寄存器值的空間。因此我們利用Linux提供的庫函數Backtrace并加以改進,在異常處理例程里將系統異常時被調用的函數地址列表和CPU寄存器保存到永久存儲空間作為故障日志。我們的設計的實現是將程序編譯成ELF二進制格式的,只有使用這樣的格式才能獲取系統所有的函數名稱和偏移地址的列表。在系統出現異常的時候,系統在出錯時使用的CPU寄存器和被調用函數地址列表被記錄到跟蹤日志。由于系統上電加載的起始地址是動態變化的,跟蹤日志也記錄了系統加載運行時主程序入口地址。根據跟蹤日志記錄的出錯函數地址與主程序入口地址的差值就是函數的偏移地址,對照系統函數名稱和偏移地址列表,就可以定位出錯的函數名稱了。

圖2 系統異常函數關系

如圖2所示,系統異常發生是的函數及其的函數調用關系就可以清晰的呈現出,系統異常出現在touch_wdt(),其函數調用鏈為 timer_thread()Timer_FeedWD()Timer_touch_wdt()touch_wdt().這樣設計人員可以更容易地分析出錯原因和更快地修正問題。

4 結束語

本文概述了在嵌入式系統開發過程中為了提高系統的可靠性采取的一些軟件技術措施。這些措施是在軟件設計上一些經驗總結,而提高系統的可靠性是一項系統工程,還需要針對具體的產品需求,把系統的硬件和軟件有效的結合起來,才能設計出高質量、高可靠性的系統。

[1]唐明.WatchDog在嵌入式應用中的問題[J].單片機與嵌入式系統應用,2007(11):70-71.

[2] Jean J.Labrosse.嵌入式實時操作系統uC/OS-Ⅲ[M]宮輝等譯.北京:航空航天大學出版社,2012.

[3] 凌忠興.嵌入式系統中數字濾波的算法及軟件流程 [J].電測與儀表,2007.1:58-61,17.

[4] 符意德,陸陽.嵌入式系統原理及接口技術[M].北京:清華大學出版社,2007.

[5] 白國政.嵌入式軟件異常處理機制的研究[J].微機發展,2005.(10):88-89,107.

TP311

猜你喜歡
看門狗監控器線程
基于C#線程實驗探究
一種嵌入式計算機系統的看門狗設計
關于MK10 型下滑儀近場監控參數超標的故障檢修
基于國產化環境的線程池模型研究與實現
把他叫醒
淺談linux多線程協作
一種自動監控系統的輸液監控器的設計
把它叫醒
把它叫醒
國家標準委批準發布強制性國家標準《防火門監控器》
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合