嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及故障檢測技術(shù)領(lǐng)域,特別是涉及一種嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法和系統(tǒng)。
【背景技術(shù)】
[0002]嵌入式軟件就是嵌入在硬件中的操作系統(tǒng)和開發(fā)工具軟件,它在產(chǎn)業(yè)中的關(guān)聯(lián)關(guān)系體現(xiàn)為:芯片設(shè)計制造—嵌入式系統(tǒng)軟件—嵌入式電子設(shè)備開發(fā)、制造。嵌入式軟件廣泛應(yīng)用于國防、工控、家用、商用、辦公、醫(yī)療等領(lǐng)域。
[0003]傳統(tǒng)的嵌入式軟件故障檢測及恢復(fù)方法,一般是在某個循環(huán)程序或中斷程序中周期性的進行“喂狗”操作,當(dāng)軟件系統(tǒng)出現(xiàn)故障,超過一定時間沒有“喂狗”時,硬件看門狗啟動,對CPU進行復(fù)位,軟件系統(tǒng)重新運行。而在實時多任務(wù)系統(tǒng)中,各任務(wù)程序獨立完成不同的功能,當(dāng)系統(tǒng)中任何一個任務(wù)運行出現(xiàn)故障時,都會引起整個軟件系統(tǒng)重新啟動,可能會帶來嚴(yán)重后果。此外,當(dāng)軟件系統(tǒng)某一功能模塊出現(xiàn)故障時,只要硬件看門狗的“喂狗”程序可以正常運行,軟件系統(tǒng)就不會重啟,這時軟件系統(tǒng)就處于帶病運行狀態(tài),會導(dǎo)致某些功能失效或其它意想不到的后果。傳統(tǒng)的嵌入式軟件故障檢測及恢復(fù)方法存在可靠性低的缺點。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對上述問題,提供一種可靠性高的嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法和系統(tǒng)。
[0005]—種嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法,包括以下步驟:
[0006]實時對嵌入式軟件系統(tǒng)的多個應(yīng)用任務(wù)進行監(jiān)控,檢測是否存在應(yīng)用任務(wù)出現(xiàn)故障;
[0007]若是,則對出現(xiàn)故障的應(yīng)用任務(wù)進行重啟;
[0008]檢測所述嵌入式軟件系統(tǒng)是否出現(xiàn)任務(wù)調(diào)度故障;
[0009]在檢測到所述嵌入式軟件系統(tǒng)出現(xiàn)任務(wù)調(diào)度故障時,對所述嵌入式軟件系統(tǒng)進行故障恢復(fù)。
[0010]一種嵌入式軟件系統(tǒng)故障檢測恢復(fù)系統(tǒng),包括:
[0011]任務(wù)監(jiān)控模塊,用于實時對嵌入式軟件系統(tǒng)的多個應(yīng)用任務(wù)進行監(jiān)控,檢測是否存在應(yīng)用任務(wù)出現(xiàn)故障;
[0012]任務(wù)重啟模塊,用于在應(yīng)用任務(wù)出現(xiàn)故障時,對出現(xiàn)故障的應(yīng)用任務(wù)進行重啟;
[0013]調(diào)度檢測模塊,用于檢測所述嵌入式軟件系統(tǒng)是否出現(xiàn)任務(wù)調(diào)度故障;
[0014]故障恢復(fù)模塊,用于在檢測到所述嵌入式軟件系統(tǒng)出現(xiàn)任務(wù)調(diào)度故障時,對所述嵌入式軟件系統(tǒng)進行故障恢復(fù)。
[0015]上述嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法和系統(tǒng),實時對嵌入式軟件系統(tǒng)的多個應(yīng)用任務(wù)進行監(jiān)控,檢測是否存在應(yīng)用任務(wù)出現(xiàn)故障,并對出現(xiàn)故障的應(yīng)用任務(wù)進行重啟。檢測嵌入式軟件系統(tǒng)是否出現(xiàn)任務(wù)調(diào)度故障,并在檢測到嵌入式軟件系統(tǒng)出現(xiàn)任務(wù)調(diào)度故障時,對嵌入式軟件系統(tǒng)進行故障恢復(fù)。通過實時監(jiān)控嵌入式軟件系統(tǒng)的各應(yīng)用任務(wù)的運行情況,當(dāng)檢測到某一應(yīng)用任務(wù)出現(xiàn)故障時重啟應(yīng)用任務(wù)來恢復(fù)軟件系統(tǒng)到正常狀態(tài)運行。檢測嵌入式軟件系統(tǒng)的任務(wù)調(diào)度是否失效,若任務(wù)調(diào)度失效則對嵌入式軟件系統(tǒng)進行故障恢復(fù),以達(dá)到軟件系統(tǒng)整體恢復(fù)的目的。不僅可以檢測出實時多任務(wù)系統(tǒng)中的局部軟件故障和整體的軟件系統(tǒng)故障,并且在軟件系統(tǒng)出現(xiàn)故障時可以自動恢復(fù)軟件系統(tǒng)到正常運行狀態(tài),實現(xiàn)了有選擇性的軟件故障檢測和恢復(fù),檢測范圍更全面、無死角,且簡單可靠。
【附圖說明】
[0016]圖1為一實施例中嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法的流程圖;
[0017]圖2為另一實施例中嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法的流程圖;
[0018]圖3為一實施例中嵌入式軟件系統(tǒng)故障檢測恢復(fù)系統(tǒng)的結(jié)構(gòu)圖;
[0019]圖4為另一實施例中嵌入式軟件系統(tǒng)故障檢測恢復(fù)系統(tǒng)的結(jié)構(gòu)圖。
【具體實施方式】
[0020]一種嵌入式軟件系統(tǒng)故障檢測恢復(fù)方法,適用于對實時多任務(wù)嵌入式軟件系統(tǒng)進行故障檢測和恢復(fù)。如圖1所示,上述方法包括以下步驟:
[0021]步驟S120:實時對嵌入式軟件系統(tǒng)的多個應(yīng)用任務(wù)進行監(jiān)控,檢測是否存在應(yīng)用任務(wù)出現(xiàn)故障。實時對嵌入式軟件系統(tǒng)的各應(yīng)用任務(wù)進行檢測,監(jiān)控各應(yīng)用任務(wù)的運行情況,當(dāng)實時多任務(wù)系統(tǒng)中的某一應(yīng)用任務(wù)未在設(shè)定時間內(nèi)作出反應(yīng)時,則可判定為此應(yīng)用任務(wù)運行出現(xiàn)故障。若檢測到應(yīng)用任務(wù)出現(xiàn)故障,則進行步驟S130;若否,可返回步驟S120,繼續(xù)對應(yīng)用任務(wù)進行監(jiān)控,也可直接進行步驟S140,進行任務(wù)調(diào)度故障檢測。本實施例中在步驟S120未檢測到應(yīng)用任務(wù)出現(xiàn)故障時進行步驟S140。在其中一個實施例中,具體可通過軟件看門狗模塊對應(yīng)用任務(wù)進行監(jiān)控。步驟SI 20包括步驟122和步驟124。
[0022]步驟122:通過嵌入式軟件系統(tǒng)的實時多任務(wù)系統(tǒng)中預(yù)設(shè)的監(jiān)控任務(wù),實時接收實時多任務(wù)系統(tǒng)中各應(yīng)用任務(wù)發(fā)送的軟件喂狗信號。可預(yù)先在實時多任務(wù)系統(tǒng)中建立一個運行優(yōu)先級最高的任務(wù)作為監(jiān)控任務(wù),通過監(jiān)控任務(wù)對各應(yīng)用任務(wù)進行監(jiān)控,實時接收各應(yīng)用任務(wù)發(fā)送的軟件喂狗信號。
[0023]具體以對DMP300C保護測控裝置的軟件系統(tǒng)進行故障檢測和恢復(fù)為例,軟件系統(tǒng)的調(diào)度器采用實時內(nèi)核對各應(yīng)用任務(wù)進行調(diào)度。應(yīng)用任務(wù)在程序初始化后申請全局資源,包括內(nèi)存、文件等。應(yīng)用任務(wù)調(diào)用軟件看門狗模塊的ResetTaskWtd函數(shù)復(fù)位軟件看門狗模塊的定時計數(shù)器,持續(xù)發(fā)送軟件喂狗信號至軟件看門狗模塊進行“喂狗”,同時應(yīng)用任務(wù)執(zhí)行相應(yīng)的功能流程。
[0024]步驟124:通過監(jiān)控任務(wù)提取在預(yù)設(shè)時間內(nèi)未發(fā)出軟件喂狗信號的應(yīng)用任務(wù)作為出現(xiàn)故障的應(yīng)用任務(wù)。預(yù)設(shè)時間的具體取值范圍可根據(jù)實際情況調(diào)整,監(jiān)控任務(wù)每10ms周期性的檢測各應(yīng)用任務(wù)是否在預(yù)設(shè)時間內(nèi)調(diào)用了 TerminateTask函數(shù)對軟件看門狗進行了復(fù)位,如果應(yīng)用任務(wù)超出預(yù)設(shè)時間沒有及時調(diào)用TerminateTask函數(shù),則認(rèn)為此應(yīng)用任務(wù)出現(xiàn)故障。
[0025]步驟S130:對出現(xiàn)故障的應(yīng)用任務(wù)進行重啟。若檢測到應(yīng)用任務(wù)出現(xiàn)故障,則通過軟件看門狗模塊對出現(xiàn)故障的應(yīng)用任務(wù)進行重啟,來恢復(fù)軟件系統(tǒng)到正常狀態(tài)運行。在其中一個實施例中,步驟SI30包括132至步驟136。
[0026]步驟132:通過監(jiān)控任務(wù)釋放出現(xiàn)故障的應(yīng)用任務(wù)所占資源。具體可調(diào)用出現(xiàn)超時的應(yīng)用任務(wù)的TerminateTask回調(diào)函數(shù),釋放應(yīng)用任務(wù)占用的資源。
[0027]步驟I34:通過監(jiān)控任務(wù)刪除出現(xiàn)故障的應(yīng)用任務(wù)。具體可調(diào)用實時內(nèi)核的TaskDel函數(shù)刪除超時的應(yīng)用任務(wù)。
[0028]步驟136:通過監(jiān)控任務(wù)重新創(chuàng)建出現(xiàn)故障的應(yīng)用任務(wù)。具體可調(diào)用實時內(nèi)核的TaskCreate函數(shù)重新創(chuàng)建出現(xiàn)超時的應(yīng)用任務(wù)。
[0029]通過軟件看門狗模塊對應(yīng)用任務(wù)監(jiān)控,并對檢測到出現(xiàn)故障的應(yīng)用任務(wù)進行重啟,以達(dá)到有選擇性的恢復(fù)局部故障的目的。
[0030]步驟S140:檢測嵌入式軟件系統(tǒng)是否出現(xiàn)任務(wù)調(diào)度故障。當(dāng)軟件系統(tǒng)故障較嚴(yán)重時,可能會使實時操作系統(tǒng)內(nèi)核的任務(wù)調(diào)度失效,即出現(xiàn)任務(wù)調(diào)度故障,導(dǎo)致整個軟件系統(tǒng)停止運行。若未檢測到應(yīng)用任務(wù),或者對出現(xiàn)故障的應(yīng)用任務(wù)進行重啟之后,對嵌入式軟件系統(tǒng)進行任務(wù)調(diào)度故障檢測,判斷是否存在整體軟件系統(tǒng)故障。
[0031]具體地,任務(wù)調(diào)度故障可包括兩種情況:1、監(jiān)控任務(wù)得不到執(zhí)行,在檢測到應(yīng)用任務(wù)出現(xiàn)故障時無法對應(yīng)用任務(wù)進行重啟。2、監(jiān)控任務(wù)在運行但應(yīng)用任務(wù)得不到執(zhí)行,這種情況下監(jiān)控任務(wù)會檢測出其它應(yīng)用任務(wù)出現(xiàn)運行超時的情況,并對其它應(yīng)用任務(wù)進行重啟,嘗試恢復(fù)其它應(yīng)用任務(wù)的運行,但此時因調(diào)度器已經(jīng)出現(xiàn)故障,其它應(yīng)用任務(wù)雖然重啟但是仍然分配不到CPU的執(zhí)行時間。
[0032]對應(yīng)地,在其中一個實施例中,步驟S140包括步驟142和/或步驟144。
[0033]步驟142:檢測在設(shè)定時間內(nèi)是否接收到監(jiān)控任務(wù)發(fā)送的硬件喂狗信號;若否,則嵌入式軟件系統(tǒng)出現(xiàn)任務(wù)調(diào)度故障。設(shè)定時間的具體取值范圍同樣可根據(jù)實際情況調(diào)整,針對監(jiān)控任務(wù)得不到執(zhí)行這一情況,具體可通過硬件看門狗對監(jiān)控任務(wù)進行監(jiān)控,使監(jiān)控任務(wù)定期對硬件看門狗裝置進行“喂狗”操作,如果監(jiān)測任務(wù)未在設(shè)定時間內(nèi)發(fā)送硬件喂狗信號,則說明監(jiān)控任務(wù)本身沒有運行,在檢測到應(yīng)用任務(wù)出現(xiàn)故障時無法對應(yīng)用任務(wù)進行重啟。此時可認(rèn)為嵌入式軟件系統(tǒng)出現(xiàn)任務(wù)調(diào)度故