歡迎您光臨本站 登入註冊首頁

一種高可靠MCU系統監控方案

admin @ 2014-03-14 , reply:0

概述

1目前MCU系統監控中的問題對於單片機系統,一般都需要監控電路來提高系統的可靠性。包括用電壓比較器對電源的監控和看門狗對程序的監控。為防止系統程序受干擾“飛掉”,常用看門狗定時……

1目前MCU系統監控中的問題
對於單片機系統,一般都需要監控電路來提高系統的可靠性。包括用電壓比較器對電源的監控和看門狗對程序的監控。為防止系統程序受干擾“飛掉”,常用看門狗定時器,這種方式對於系統進入死循環時很有效,而程序“飛掉”時極有可能跳過一段程序,正好進入另一條指令的開頭。尤其在RISC系統中,絕大部分是單周期指令,容易遇到這種情況,此時程序會繼續運行下去,使看門狗失效。跳過的這段程序,可能包括一些介面控制執行指令,或某些數據的輸入輸出,或條件判斷,整個系統會因此而運行紊亂,或直接產生故障。系統出現這類故障時很難立即察覺。
1.在運用極其廣泛的一類MCU系統,如分段定時控制系統中,象家用電器的電腦控制微波爐、洗衣機、電飯煲;電力行業的發電機轉速控制;冶金行業的連鑄、焊管及流水線系統等,都可能會在系統運行中遇到分段定時控制或某一區域內運行狀態與前段運行狀態密切相關的情況。此時簡單地用看門狗電路作系統監控,一旦出現系統死鎖而複位,將會使啟動以後的整個運行過程失效,這種方法顯然是行不通的。
2.對於分時多任務系統,其中的某個或幾個任務出現死鎖,而又有一個或多個任務仍正常運行的情況下,看門狗定時器可能會被“蒙蔽”而失去監控作用。
3.在一個程序運行周期很短,或系統根據不同運行狀況的程序處理時間相差很大的情況下,看門狗定時周期難以定得合適,此時若出現干擾死機可能因難於及時發現並解決而造成故障。
如果有一種方法,使系統在運行過程中能夠自行感知程序運行狀況,出現問題能夠隨時察覺;發現故障立即報警、停止運行或複位,甚至可以自動糾錯,使程序恢復正確的運行,以實現對程序的最佳監控,那將是比較理想的。
2系統在線自行跟蹤基本方法
系統在線運行過程中,如果能夠隨時將系統運行的過程即系統當前程序的實際流程路線自動記錄下來,就有辦法將預期的運行路線與之比較,從而避免程序出現不可預測的死鎖。打個比方,設想有一輛在公路上行駛的汽車,只要知道該汽車在各個岔路口的走向,就可以描繪出這輛汽車整個的行駛路線,但是難以保證汽車可能會在一條單一路線上行駛時拋錨。如果每隔一定距離以及重要路段設上“哨卡”,就能更加細緻地了解到汽車的行駛情況,一旦出現問題就能立即知道事故出現的具體路段。同理,在程序運行過程中也可以通過人為設置的“哨卡”來記錄程序當前的運行路線。在多數情況下,這些“哨卡”對系統運行並沒有太大的影響。
實際上,這些“哨卡”就是可以任意插入流程中的簡短程序段,每一個“哨卡”有一個特定的“標誌碼”以使我們能夠知道程序到底運行到何處。將這些標記按出現的順序記錄在存儲器中,就能依此知道CPU“行駛”的具體路線。當然,對系統的運行狀態了解得越細緻,程序的運行時間會越長。應將它們設置在重要的數據讀寫或介面操作處,各分支路口和相對獨立的程序塊入口處,盡量減小對系統的影響。
下面以GMS97C51單片機構成的MCU系統為例說明系統對自身運行路線的跟蹤記錄方法。
如圖1所示,設系統CPU為97C51,外接一片SRAM6116來作運行記錄,為防止掉電和死機的影響,將RAM用後備電池保護起來(系統上電初始化程序應包括將6116清零,清零程序在此略去)。

圖1自行跟蹤系統介面
在系統原來程序段中需要設“哨卡”的地方插入語句:
MOV
SIGN,#MARK
;#MARK為標誌號,SIGN定義
LCALL
GUIDE
;為存放標誌號的寄存器地址
這樣,僅插入6個位元組對原來程序的存儲空奸哀無多大影響,所有的“哨卡”共用一個子程序。
GUIDE:
PUSH PSW
;保護原來程序可能用到的寄存器,如有必要也可
PUSH ACC
;將DPTR壓棧保護
INC ADDR
;ADDR為標誌號存放單元,上電后需清零
MOV A,ADDR
;假設只用RAM中的256個單元來做記錄
JZ OUT
;若存儲空間用完則停止存儲記錄
MOV DPL,ADDR
;設6116存儲地址為7F××H
MOV DPH,#7FH
MOVX @DPTR,A
OUT:
POP ACC
;存儲記錄
POP PSW
RET
假設總共“哨卡”數量少於256個,用一個位元組來作標誌,每一個“哨卡”都會有一個獨立的標誌號,通過查詢RAM記錄內容就可知道程序的實際運行路線了。這裡我們還發現程序自行跟蹤的一個額外的作用,即只需一個讀RAM的簡單裝置,此方法就可用來作程序開發過程中的模擬調試而無須PC機及模擬器。
若系統無法用到并行匯流排,可將6116換成串列存儲器,如美國Xicor公司的非易失性RAMX24C45,程序則應作相應改動。插入“哨卡”后應考慮對原系統運行時間上的影響。
3利用自行跟蹤方式對系統的實時監控
在作系統監控的應用中,系統必須對自身運行狀況作實時監控。利用上面的方式,在系統中加上監控程序,系統對自身運行情況亦可作自行監測。但這樣一來,不僅會對原來程序造成較大影響,而且會因為系統本身可能受到干擾或其它原因而癱瘓,因而是不可靠的。對於高可靠性要求的系統,有必要另加一套監控系統來對原系統及監控系統自身作專門監護,從後面的討論中可知,這外加的系統可以是廉價、小巧、安全可靠和高效的。
在實時監控過程中,可以省掉對程序運行路線的存儲記錄而直接判斷。系統電路如圖2所示。它進一步減小了對原系統的影響而又提高了運行效率。在監控系統運行過程中,應從以下三個方面來考慮:

圖2自行跟蹤監控系統電路
1.監控系統對原系統的精確跟蹤;
2.利用軟體狗防止主系統死鎖;
3.對監控系統自身的監控。
系統非正常運行除硬體與電源系統的問題之外,難以琢磨的主要是軟體系統。程序受到干擾產生故障有兩種情況:
一是CPU沒有按既定程序運行,系統指針“飛”到其它指令代碼地址處,好象非法執行了一個跳轉語句。這種情況存在很大的潛在危險性,利用看門狗技術難以察覺,可能帶來難以預料的事故,且無論哪一類結構的指令系統都無法排除。此時利用在線跟蹤技術發揮其監控作用是一個有效方法。可以在程序運行的各個路口和重要的操作前後插入“哨卡”,並將“哨卡”在系統程序中均勻分佈,用專門的監控CPU實時跟蹤,與已預存在監控系統中的正確路線比較,可及時排除原系統軟體產生的故障,有時還可以使系統從其產生誤操作之前的一個“哨卡”處恢復系統的正常運行。

[admin via 研發互助社區 ] 一種高可靠MCU系統監控方案已經有2189次圍觀

http://cocdig.com/docs/show-post-701.html