專利名稱:一種實(shí)時(shí)嵌入系統(tǒng)的故障定位方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)通信領(lǐng)域,尤其涉及一種實(shí)時(shí)嵌入系統(tǒng)中的故障定位方法。
背景技術(shù):
在現(xiàn)有的實(shí)時(shí)嵌入系統(tǒng)中,通常使用“看門狗”監(jiān)控系統(tǒng)的運(yùn)行狀態(tài),防止系統(tǒng)長期處于故障狀態(tài),無法運(yùn)行。從原理上講看門狗是一個(gè)計(jì)數(shù)器(一般而言是個(gè)減法計(jì)數(shù)器),由外部時(shí)鐘驅(qū)動(dòng),每隔一定的時(shí)間間隔就會(huì)減1,直到計(jì)數(shù)器為0時(shí)就超時(shí)。啟動(dòng)看門狗時(shí),在看門狗的計(jì)數(shù)器里設(shè)置了一個(gè)初始值,此后每一定時(shí)間間隔減1,當(dāng)計(jì)數(shù)器的值減到0時(shí),看門狗就會(huì)產(chǎn)生信號,通知系統(tǒng)超時(shí)。如果在看門狗超時(shí)前對看門狗的計(jì)數(shù)器進(jìn)行一次設(shè)置,看門狗的計(jì)數(shù)器就會(huì)恢復(fù)初值,重新開始計(jì)數(shù)。
根據(jù)看門狗的物理構(gòu)造的不同以及產(chǎn)生信號的不同,可以將看門狗分為硬件看門狗和軟件看門狗。
在實(shí)際應(yīng)用中,硬看門狗通常是一個(gè)獨(dú)立于CPU之外的硬件器件,由獨(dú)立的時(shí)鐘驅(qū)動(dòng),硬看門狗的計(jì)數(shù)器的初始值以及外部時(shí)鐘驅(qū)動(dòng)頻率由器件本身決定了,外部無法更改。硬看門狗的輸出信號管腳與CPU的RESET管腳相連。CPU通過一個(gè)引腳將重置計(jì)數(shù)器的信號送到硬看門狗上,使得硬看門狗重新計(jì)數(shù)而不超時(shí)。系統(tǒng)正常運(yùn)行時(shí)軟件系統(tǒng)定時(shí)從這個(gè)引腳輸出信號重置硬看門狗的定時(shí)器,而一旦系統(tǒng)出現(xiàn)故障,軟件不能正常運(yùn)行,硬看門狗得不到重置的信號,超時(shí)以后,硬看門狗就會(huì)從輸出管腳輸出一個(gè)低電平給CPU的RESET管腳,引起CPU復(fù)位,系統(tǒng)重新初始化,這樣就避免了嚴(yán)重的錯(cuò)誤導(dǎo)致軟件系統(tǒng)不能正確運(yùn)行,但是又無法恢復(fù),系統(tǒng)“死掉”。
軟看門狗實(shí)際上是高檔處理器內(nèi)置的一個(gè)計(jì)數(shù)器,其時(shí)鐘驅(qū)動(dòng)頻率由處理器決定(有的可以由軟件設(shè)定),而計(jì)數(shù)器的初值由軟件設(shè)定,因而超時(shí)時(shí)間大小可以在一定范圍內(nèi)變化。軟看門狗也需要定時(shí)重置計(jì)數(shù)器以防止超時(shí)(通常稱為“清狗操作”)。當(dāng)軟看門狗超時(shí)時(shí),由于軟看門狗位于處理器內(nèi)部,一般都是產(chǎn)生內(nèi)部由CPU可以識別的信號,通常是中斷(或稱異常[Exception]),不經(jīng)過特殊處理,不能直接引起軟件系統(tǒng)重起。
發(fā)明內(nèi)容
目前的系統(tǒng),對類似的問題只能采取引起CPU復(fù)位的方式,使系統(tǒng)重新初始化,這樣可以避免系統(tǒng)“死掉”,但對于分析故障的各種數(shù)據(jù)沒有有效的輸出和相應(yīng)的分析,而對于故障發(fā)生時(shí)的現(xiàn)場數(shù)據(jù),往往是系統(tǒng)復(fù)位前的重要信息,是定位復(fù)位原因的重要線索,問題實(shí)際上沒有得到解決。
本發(fā)明就是要充分利用軟看門狗的特點(diǎn),在軟看門狗復(fù)位時(shí)保存現(xiàn)場信息,提供一種比較強(qiáng)大的故障定位方法。
本發(fā)明的目的是這樣實(shí)現(xiàn)的一種實(shí)時(shí)嵌入系統(tǒng)的故障定位方法,外部環(huán)境為帶有軟看門狗的CPU,其特征在于包括如下步驟a、軟看門狗初始化,設(shè)置一個(gè)計(jì)數(shù)器初始值和時(shí)鐘頻率以及一個(gè)程序定時(shí)值,該程序定時(shí)值小于該計(jì)數(shù)器的初始值;b、計(jì)數(shù)器開始計(jì)數(shù),初始值和程序定時(shí)值開始減少;c、經(jīng)過一個(gè)程序定時(shí)值的時(shí)長,判斷該程序定時(shí)值是否減少為0,是則返回步驟a,否則進(jìn)入步驟d;d、初始值繼續(xù)減少;e、當(dāng)初始值減少為0時(shí),進(jìn)入步驟f;f、軟看門狗產(chǎn)生復(fù)位信號,提供給CPU,進(jìn)入步驟g;g、輸出現(xiàn)場信息,系統(tǒng)復(fù)位。其中步驟g中,也可以先系統(tǒng)復(fù)位,然后輸出現(xiàn)場信息。所述現(xiàn)場信息包括CPU的寄存器狀態(tài),通過分析該寄存器記錄,定位異常發(fā)生的地址和原因。所述現(xiàn)場信息包括當(dāng)前任務(wù)信息、堆棧位置、堆棧結(jié)構(gòu)、堆棧內(nèi)容等。通過對堆棧結(jié)構(gòu)的分析,得出異常發(fā)生前當(dāng)前任務(wù)的函數(shù)調(diào)用軌跡。
通過本發(fā)明的方法,可以將系統(tǒng)故障發(fā)生時(shí)的重要現(xiàn)場信息完整地保存下來,任務(wù)運(yùn)行時(shí)大量臨時(shí)數(shù)據(jù)的分析,為系統(tǒng)復(fù)位提供了非常有效的支持,改進(jìn)了以前的看門狗只導(dǎo)致系統(tǒng)復(fù)位而無法進(jìn)行數(shù)據(jù)輸出及故障分析的問題。
四
圖一是現(xiàn)有技術(shù)中看門狗的工作原理圖。
圖二是使用本方法的流程圖。
圖三是Motorola公司的MPC8260通信處理器的配置圖。
圖四是本實(shí)施例的一個(gè)堆棧結(jié)構(gòu)圖。
五、具體實(shí)施例本方案基于Motorola公司的MPC8260通信處理器實(shí)現(xiàn),其內(nèi)核是MPC603e的CPU。本方案可以基本不加改動(dòng)或加以很少改動(dòng)就可移植到PowerPC系列其他的32位CPU上,本方案可以使用PSOS操作系統(tǒng)。
如圖3所示,在SWTC位設(shè)置軟看門狗的初始值,在SWI位設(shè)置當(dāng)軟看門狗超時(shí)的時(shí)候是引起machine check中斷(向量號為0×200)還是軟件復(fù)位中斷(向量號為0×100),本方案選擇軟復(fù)位中斷,實(shí)際上選擇machinecheck中斷本方案也一樣可以處理。最后設(shè)置SWE位,將軟看門狗使能。
設(shè)置一個(gè)程序定時(shí)值及一個(gè)時(shí)鐘頻率,本實(shí)施例可以將程序定時(shí)值設(shè)置為初始值的1/50,也可以設(shè)置為其他的小于初始值的數(shù)值;當(dāng)經(jīng)過的時(shí)間間隔等于程序定時(shí)值時(shí),判斷該程序定時(shí)值是否為零,是則重新執(zhí)行軟看門狗初始化,重新設(shè)置一個(gè)計(jì)數(shù)器初始值和時(shí)鐘頻率以及程序定時(shí)值;否則繼續(xù)計(jì)數(shù),初始值繼續(xù)減少;
當(dāng)初始值減少為0時(shí),軟看門狗產(chǎn)生復(fù)位信號,提供給CPU;輸出現(xiàn)場數(shù)據(jù);最后,軟看門狗產(chǎn)生復(fù)位信號,提供給CPU,引起系統(tǒng)復(fù)位。
其中,輸出現(xiàn)場數(shù)據(jù)的步驟也可以在系統(tǒng)復(fù)位之后,只需要一個(gè)簡單的設(shè)置即可。
所述輸出的現(xiàn)場數(shù)據(jù)包括CPU的寄存器狀態(tài)、當(dāng)前任務(wù)信息、堆棧位置、堆棧結(jié)構(gòu)、堆棧內(nèi)容等數(shù)據(jù)。
異常信息的輸出可以通過多種渠道,一是通過直接的串口打印,可以輸出到與MPC8260串口連接的標(biāo)準(zhǔn)終端上,二是通過基于MPC8260的產(chǎn)品的輸出手段輸出,如告警、調(diào)試信息輸出或者產(chǎn)品的打印渠道。
根據(jù)PowerPC CPU的異常處理機(jī)制,本方案屏蔽了操作系統(tǒng)對CPU異常(Exception)的處理,直接接管了PowerPC CPU的所有異常,按照自己定義的異常處理方式對CPU的硬件異常進(jìn)行處理。其中System Reset(0×100)和Machine Check(0×200)可以根據(jù)選擇用來處理軟件狗超時(shí)記錄現(xiàn)場信息。
在異常處理過程中需要記錄軟件應(yīng)用程序運(yùn)行的上下文(Context),包括當(dāng)前任務(wù)的調(diào)用棧關(guān)系、當(dāng)前任務(wù)的堆棧內(nèi)容,以及所有的通用寄存器(GPRsr0~r31),記錄了與異常上下文相關(guān)的專用寄存器(SPRs),這些寄存器有CR、BAR、CTR、LR、XER、SRR0、SRR1、DAR、DSISR,這些寄存器記錄了異常發(fā)生時(shí)的機(jī)器狀態(tài),定位異常發(fā)生的地址和原因。
異常信息在異常處理程序中就記錄到內(nèi)存,本設(shè)計(jì)方案中將異常信息記錄到非易失(Non-volatile)的存儲器,如Flash、帶后備電池的SRAM等。
對于System Reset異常,SRR0保存了異常發(fā)生時(shí)系統(tǒng)正要執(zhí)行的指令的地址,SRR1的16~31比特記錄了機(jī)器狀態(tài)(與MSR寄存器的完全相同)。對于軟看門狗超時(shí)復(fù)位,這里記錄的機(jī)器狀態(tài)是軟看門狗超時(shí)的那個(gè)時(shí)刻的機(jī)器狀態(tài),這里記錄的指令是軟看門狗超時(shí)的那個(gè)時(shí)刻CPU正在執(zhí)行的指令,這兩個(gè)寄存器有助于我們定位異常發(fā)生的指令以及原因。而堆棧信息則有助于我們進(jìn)一步了解軟看門狗超時(shí)的那個(gè)時(shí)刻系統(tǒng)正在運(yùn)行的任務(wù)的情況,這個(gè)任務(wù)往往是引起錯(cuò)誤的任務(wù)。對于任務(wù)的相關(guān)信息的了解,只有通過對任務(wù)的堆棧進(jìn)行分析。
我們根據(jù)這樣的調(diào)用棧結(jié)構(gòu),可以分析出當(dāng)前任務(wù)的調(diào)用棧結(jié)構(gòu),尤其是可以分析出函數(shù)調(diào)用關(guān)系,這樣我們就可以分析定位系統(tǒng)故障的具體地點(diǎn)和原因。
除上述實(shí)施例外,本發(fā)明還可以有其他實(shí)施方式。例如打印的輸出渠道和存儲介質(zhì)可以靈活改變等,或者在該系統(tǒng)中添加其他未實(shí)質(zhì)性改變系統(tǒng)工作方法的設(shè)備等,凡此種種,均落在本發(fā)明的權(quán)利要求之中。
權(quán)利要求
1.一種實(shí)時(shí)嵌入系統(tǒng)的故障定位方法,外部環(huán)境為帶有軟看門狗的CPU,其特征在于包括如下步驟a、軟看門狗初始化,設(shè)置一個(gè)計(jì)數(shù)器初始值和時(shí)鐘頻率以及一個(gè)程序定時(shí)值,該程序定時(shí)值小于該計(jì)數(shù)器的初始值;b、計(jì)數(shù)器開始計(jì)數(shù),初始值和程序定時(shí)值開始減少;c、經(jīng)過一個(gè)程序定時(shí)值的時(shí)長,判斷該程序定時(shí)值是否減少為0,是則返回步驟a,否則進(jìn)入步驟d;d、初始值繼續(xù)減少;e、當(dāng)初始值減少為0時(shí),進(jìn)入步驟f;f、軟看門狗產(chǎn)生復(fù)位信號,提供給CPU,進(jìn)入步驟g;g、輸出現(xiàn)場信息,系統(tǒng)復(fù)位。
2.如權(quán)利要求1所述的故障輔助定位方法,其特征在于所述的步g中,先系統(tǒng)復(fù)位,然后輸出現(xiàn)場信息。
3.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于該現(xiàn)場信息包括CPU的寄存器狀態(tài),通過分析該寄存器記錄,定位異常發(fā)生的地址和原因。
4.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于該現(xiàn)場信息包括堆棧位置、堆棧結(jié)構(gòu)、堆棧內(nèi)容等,通過對堆棧結(jié)構(gòu)的分析,得出異常發(fā)生前當(dāng)前任務(wù)的函數(shù)調(diào)用軌跡。
5.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于該現(xiàn)場信息包括當(dāng)前任務(wù)信息。
6.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于通過制作轉(zhuǎn)換工具對異常信息進(jìn)行轉(zhuǎn)換分析。
7.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于該現(xiàn)場數(shù)據(jù)被記錄到內(nèi)存。
8.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于該現(xiàn)場數(shù)據(jù)被記錄到非易失存儲器。
9.如權(quán)利要求1或2所述的故障輔助定位方法,其特征在于該現(xiàn)場數(shù)據(jù)通過打印輸出。
全文摘要
本發(fā)明涉及一種實(shí)時(shí)嵌入系統(tǒng)中的故障定位方法,包括如下步驟a.軟看門狗初始化,設(shè)置一個(gè)計(jì)數(shù)器初始值和時(shí)鐘頻率以及一個(gè)程序定時(shí)值;b.計(jì)數(shù)器開始計(jì)數(shù);c.經(jīng)過一個(gè)程序定時(shí)值的時(shí)長,判斷該程序定時(shí)值是否減少為0,是則返回步驟a,否則進(jìn)入步驟d;d.初始值繼續(xù)減少;e.當(dāng)初始值減少為0時(shí),進(jìn)入步驟f;f.軟看門狗產(chǎn)生復(fù)位信號,提供給CPU;g.輸出現(xiàn)場信息,系統(tǒng)復(fù)位。通過本發(fā)明的方法,可以將系統(tǒng)故障發(fā)生時(shí)的重要現(xiàn)場信息完整地保存下來,任務(wù)運(yùn)行時(shí)大量臨時(shí)數(shù)據(jù)的分析,為系統(tǒng)復(fù)位提供了非常有效的支持,改進(jìn)了以前的看門狗只導(dǎo)致系統(tǒng)復(fù)位而無法進(jìn)行數(shù)據(jù)輸出及故障分析的問題。
文檔編號G06F11/30GK1400529SQ0112307
公開日2003年3月5日 申請日期2001年7月30日 優(yōu)先權(quán)日2001年7月30日
發(fā)明者利文勁, 張宇昕 申請人:華為技術(shù)有限公司