嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法及裝置制造方法
【專利摘要】本發(fā)明涉及一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法及裝置,該方法采用離線與在線相結(jié)合的代碼運(yùn)行時故障檢測機(jī)制,同時提供在線恢復(fù)代碼段數(shù)據(jù),所述的恢復(fù)方法具體包括以下步驟:1)代碼段數(shù)據(jù)離線校驗(yàn)處理階段;2)代碼段實(shí)時檢測與在線恢復(fù)階段;所述的裝置包括遠(yuǎn)程工作站PC機(jī)和嵌入式設(shè)備,該嵌入式設(shè)備包括主處理模塊、電源模塊和CPLD邏輯模塊。與現(xiàn)有技術(shù)相比,本發(fā)明具有解決了應(yīng)用程序代碼段數(shù)據(jù)出現(xiàn)異常的問題,并且保證了應(yīng)用程序的可靠性和安全性。
【專利說明】嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種提高軟件代碼段可靠性的技術(shù),尤其是涉及一種嵌入式軟件運(yùn)行 時故障的在線自檢與切片恢復(fù)方法及裝置。
【背景技術(shù)】
[0002] 應(yīng)用在軌道交通行業(yè)中的安全計算機(jī),從外部設(shè)備接收數(shù)據(jù),并進(jìn)行邏輯運(yùn)算處 理,在實(shí)際應(yīng)用中主要設(shè)計安全應(yīng)用軟件來實(shí)現(xiàn)邏輯運(yùn)算的功能,安全應(yīng)用軟件在運(yùn)行過 程中執(zhí)行的指令,被存儲在安全計算機(jī)系統(tǒng)內(nèi)存的代碼段中,安全計算機(jī)系統(tǒng)所處的工作 環(huán)境具有高溫、震動劇烈、輻射強(qiáng)等特點(diǎn),可能出現(xiàn)各種軟硬件故障,導(dǎo)致存儲在代碼段中 的數(shù)據(jù)發(fā)生異常,從而使任何運(yùn)行在內(nèi)存中的邏輯運(yùn)算結(jié)果出錯,最終影響整個系統(tǒng)的安 全性和可靠性。
[0003] 為了保證安全計算機(jī)代碼段的正確性和可靠性,需要實(shí)時的對代碼段進(jìn)行檢測, 同時,如果發(fā)現(xiàn)代碼段錯誤,應(yīng)該采取一些措施來時安全計算機(jī)不會產(chǎn)生錯誤的輸出。目前 已有一些提高應(yīng)用軟件代碼段可靠性的方法,但這些方法有以下不足:
[0004] 1、對應(yīng)用程序本身進(jìn)行校驗(yàn),不能動態(tài)在線的對代碼段進(jìn)行檢測;
[0005] 2、難以實(shí)時地發(fā)現(xiàn)因內(nèi)存系統(tǒng)性故障引起代碼段異常;
[0006] 3、在發(fā)現(xiàn)代碼段故障后,對系統(tǒng)應(yīng)用軟件功能進(jìn)行恢復(fù)時,往往中斷業(yè)務(wù)的時間 比較長,其中恢復(fù)業(yè)務(wù)消耗時間長達(dá)秒級甚至分鐘級;
[0007] 4、通過系統(tǒng)自身軟件對代碼段副本進(jìn)行一致性比較,來進(jìn)行代碼段檢測,運(yùn)算量 大,占用系統(tǒng)資源,實(shí)時性不好;
[0008] 5、自身軟件文件損壞后,在現(xiàn)場對嵌入式板卡的設(shè)備進(jìn)行恢復(fù),需要采用專用設(shè) 備對板卡的Flash進(jìn)行燒寫,操作繁瑣,耗時長達(dá)秒級甚至分鐘級。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種嵌入式軟件運(yùn) 行時故障的在線自檢與切片恢復(fù)方法,解決了應(yīng)用程序代碼段數(shù)據(jù)出現(xiàn)異常的問題,并且 保證了應(yīng)用程序的可靠性和安全性。
[0010] 本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
[0011] 一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其特征在于,該方法采 用離線與在線相結(jié)合的代碼運(yùn)行時故障檢測機(jī)制,同時提供在線恢復(fù)代碼段數(shù)據(jù),所述的 恢復(fù)方法具體包括以下步驟:
[0012] 1)代碼段數(shù)據(jù)離線校驗(yàn)處理階段;
[0013] 2)代碼段實(shí)時檢測與在線恢復(fù)階段。
[0014] 所述的步驟1)代碼段數(shù)據(jù)離線校驗(yàn)處理階段具體為:
[0015] al)在應(yīng)用程序的代碼編碼完成后,放入工作站PC機(jī)上進(jìn)行交叉編譯,生成可在 嵌入式設(shè)備上運(yùn)行的ELF格式的可執(zhí)行文件HPM. out ;
[0016] a2)通過ELF文件離線解析工具OffLineParseElfTool來獲取文件HPM. out的解 析ELF信息頭數(shù)據(jù),從中計算段頭數(shù)據(jù)總表的偏移與大??;
[0017] a3) OffLineParseElfTool在頭數(shù)據(jù)總表中解析代碼段信息頭數(shù)據(jù),計算代碼段在 ELF文件中的偏移與大小,然后從對應(yīng)位置獲取代碼段數(shù)據(jù);
[0018] a4) OffLineParseElfTool根據(jù)代碼段數(shù)據(jù)和10組冗余碼,生成10組離線校驗(yàn)數(shù) 據(jù);
[0019] a5)利用VHDL語言編寫校驗(yàn)算法邏輯,并生成相應(yīng)文件,將相應(yīng)文件和離線生成 的校驗(yàn)數(shù)據(jù)碼數(shù)據(jù)燒寫到CPLD中;
[0020] a6)通過ftp工具將可執(zhí)行應(yīng)用程序文件HPM. out進(jìn)行遠(yuǎn)程下載,或在線燒寫到嵌 入式設(shè)備的板載Flash中。
[0021] 在線燒寫前,備份較老版本的應(yīng)用程序文件為HPM. old,如果燒寫失敗,從HPM. old文件恢復(fù),使用老版本應(yīng)用程序。
[0022] 所述的步驟2)代碼段實(shí)時檢測與在線恢復(fù)階段具體為:
[0023] bl)嵌入式設(shè)備上電后,初始化硬件設(shè)備,并對CPLD模塊進(jìn)行初始化,如果初始化 成功繼續(xù)步驟b2),否則執(zhí)行步驟bll);
[0024] b2)嵌入式設(shè)備的操作系統(tǒng)開始初始化,掛載Flash文件系統(tǒng),并且創(chuàng)建系統(tǒng)初始 化任務(wù)InitTask,如果初始化成功繼續(xù)步驟b3),否則執(zhí)行步驟bll);
[0025] b3)初始化任務(wù)InitTask從Flash文件系統(tǒng)的加載可執(zhí)行文件HPM. out,加載到 指定的內(nèi)存區(qū)域;InitTask創(chuàng)建恢復(fù)任務(wù)RecoverTask、主處理任務(wù)MainTask和網(wǎng)絡(luò)任務(wù) NetTask,并掛起恢復(fù)任務(wù)RecoverTask ;InitTask獲取對應(yīng)代碼段在內(nèi)存區(qū)域中地址和大 小,然后并從中解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的 校驗(yàn)碼比較,如果校驗(yàn)通過繼續(xù)步驟b4),否則執(zhí)行步驟bll);
[0026] b4)MainTask對嵌入式設(shè)備的系統(tǒng)數(shù)據(jù)進(jìn)行邏輯處理,并執(zhí)行步驟b5);
[0027] b5)判斷定時中斷是否觸發(fā),如果觸發(fā)執(zhí)行步驟b6),否則返回執(zhí)行步驟b4);
[0028] b6)定時中斷處理函數(shù)通過鎖住操作系統(tǒng)操作來禁止任務(wù)調(diào)度和響應(yīng)中斷,然后 通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,并與離線生成的校驗(yàn)碼比較,如果校驗(yàn)通過繼續(xù)步驟 b7),否則執(zhí)行步驟b8);
[0029] b7)解鎖操作系統(tǒng)操作來恢復(fù)任務(wù)調(diào)度和響應(yīng)中斷,并返回執(zhí)行步驟b4);
[0030] b8)獲取主處理任務(wù)MainTask運(yùn)行參數(shù)與系統(tǒng)狀態(tài)變量切片值,并將這些變量切 片值保存到系統(tǒng)內(nèi)存的高內(nèi)存的教育數(shù)據(jù)區(qū),同時對該教育數(shù)據(jù)進(jìn)行CRC(循環(huán)冗余校驗(yàn) 碼)處理,并保存CRC值,供教育恢復(fù)時,校驗(yàn)數(shù)據(jù)使用,繼續(xù)步驟b9);
[0031] b9)調(diào)用在線恢復(fù)代碼段功能模塊,來恢復(fù)應(yīng)用程序的代碼段數(shù)據(jù),判斷如果恢復(fù) 成功,執(zhí)行步驟blO),否則執(zhí)行步驟bll);
[0032] blO)從教育數(shù)據(jù)區(qū)恢復(fù)主處理任務(wù)MainTask運(yùn)行參數(shù)與系統(tǒng)狀態(tài)變量并返回執(zhí) 行步驟b4);
[0033] bll)控制板卡前面板上LED閃爍,來進(jìn)行告警,并持續(xù)閃爍3分鐘后,嵌入式設(shè)備 重啟。
[0034] 所述的步驟b5)中的定時中斷的周期為500ms。
[0035] 6.根據(jù)權(quán)利要求4所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方 法,其特征在于,所述的在線恢復(fù)代碼段功能模塊具體工作流程如下:
[0036] cl)解鎖操作系統(tǒng),激活創(chuàng)建恢復(fù)任務(wù)RecoverTask,RecoverTask開始運(yùn)行,并關(guān) 閉CPLD中定時器,繼續(xù)步驟c2);
[0037] c2)恢復(fù)任務(wù) RecoverTask 刪除 MainTask 和 NetTask,并且清除 MainTask 和 NetTask的控制塊信息,刪除HPM. out模塊加載信息,繼續(xù)步驟c3);
[0038] c3)恢復(fù)任務(wù)RecoverTask從Flash文件系統(tǒng)的加載可執(zhí)行文件HPM. out,從中解 析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的校驗(yàn)碼比較,如果 校驗(yàn)通過繼續(xù)步驟c6),否則執(zhí)行步驟c4);
[0039] c4)恢復(fù)任務(wù)RecoverTask通過FTP協(xié)議從遠(yuǎn)程工作站PC機(jī)下載可執(zhí)行文件HPM. out,從中解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的校驗(yàn)碼 比較,繼續(xù)步驟c5);
[0040] c5)判斷校驗(yàn)碼是否一致,如果校驗(yàn)碼一致繼續(xù)步驟c6),否則設(shè)置g_REC0VER為 1,并執(zhí)行步驟c8);
[0041] c6)恢復(fù)任務(wù)RecoverTask加載可執(zhí)行文件HPM. out,加載到指定的內(nèi)存區(qū)域;然 后創(chuàng)建主處理任務(wù)MainTask和網(wǎng)絡(luò)任務(wù)NetTask,并掛起恢復(fù)任務(wù)RecoverTask ;
[0042] c7)判斷是否加載成功,如果成功,設(shè)置g_REC0VER為0,否則,設(shè)置g_REC0VER為 1,然后執(zhí)行步驟c8);
[0043] c8)打開CPLD中的定時器,并返回。
[0044] 一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法的裝置,其特征在于,包 括遠(yuǎn)程工作站PC機(jī)和嵌入式設(shè)備,該嵌入式設(shè)備包括主處理模塊、電源模塊和CPLD邏輯模 塊,所述的主處理模塊包括微處理器以及分別與微處理器連接的內(nèi)存模塊、Flash模塊、網(wǎng) 絡(luò)模塊和看門狗模塊,所述的CPLD邏輯模塊包括分別與微處理器連接的HSD(High Speed Detection)模塊、LED指示模塊、定時器模塊,所述的網(wǎng)絡(luò)模塊與遠(yuǎn)程工作站PC機(jī)連接;
[0045] 所述的主處理模塊通過網(wǎng)絡(luò)模塊從外部設(shè)備接收網(wǎng)絡(luò)數(shù)據(jù)包,然后由微處理器負(fù) 責(zé)對接收的數(shù)據(jù)進(jìn)行邏輯處理,所述的CPLD模塊從主處理模塊接收數(shù)據(jù),并根據(jù)預(yù)先設(shè)計 的冗余碼生成在線校驗(yàn)碼,所述的HSD模塊負(fù)責(zé)生成在線校驗(yàn)碼,并比較在線校驗(yàn)碼和離 線校驗(yàn)碼的一致性。
[0046] 所述的遠(yuǎn)程工作站PC機(jī)依次通過網(wǎng)絡(luò)連接線、路由設(shè)備、以太網(wǎng)與嵌入式設(shè)備連 接。
[0047] 所述的電源模塊將輸入的220V電壓轉(zhuǎn)換成24V的電壓,給主處理模塊、CPLD模塊 供電。
[0048] 與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0049] 1、采用硬件邏輯進(jìn)行代碼段檢測,檢測速度高、不占用微處理器資源;
[0050] 2、采用多組冗余碼數(shù)據(jù),通過離線工具生成校驗(yàn)碼,與在線生成校驗(yàn)碼一致性比 較,提高了檢測結(jié)果的可靠性;
[0051] 3、以500ms為周期進(jìn)行代碼段在線檢測,檢測周期短,提高了系統(tǒng)的可靠性;
[0052] 4、采用代碼段切片在線恢復(fù)技術(shù),不需要重啟設(shè)備,能最低限度的降低對業(yè)務(wù)的 影響;
[0053] 5、采用切片參數(shù)再教育技術(shù),保持代碼恢復(fù)前與代碼恢復(fù)后,系統(tǒng)處理數(shù)據(jù)的一 致性,可以方便快捷重新開始處理業(yè)務(wù),耗時為100秒,提高了設(shè)備的可用性。
[0054] 6、通過在Flash文件系統(tǒng)中加載可執(zhí)行文件和網(wǎng)絡(luò)下載可執(zhí)行文件相結(jié)合,加強(qiáng) 了檢測與恢復(fù)流程的穩(wěn)定性和可靠性。
[0055] 7、通過遠(yuǎn)程下載應(yīng)用程序文件,方便快捷,中斷業(yè)務(wù)時間為3分鐘,提高了系統(tǒng)的 可用性。
【專利附圖】
【附圖說明】
[0056] 圖1為離線處理的流程圖;
[0057] 圖2為代碼段在線檢測的流程圖;
[0058] 圖3為代碼段在線恢復(fù)的流程圖;
[0059] 圖4為本發(fā)明的裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0060] 下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。
[0061] 圖1、圖2、圖3所示為本發(fā)明的具體流程。結(jié)合圖1、圖2、圖3和圖4對以下各步 驟進(jìn)行詳細(xì)描述:
[0062] 如圖1所示,一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法的代碼段數(shù) 據(jù)離線校驗(yàn)處理階段,該階段包括以下步驟:
[0063] 1)在應(yīng)用程序的代碼編碼完成后,在工作站PC機(jī)上進(jìn)行交叉編譯,生成可以在嵌 入式設(shè)備上運(yùn)行的ELF格式的可執(zhí)行文件HPM. out ;
[0064] 2)通過ELF文件離線解析工具OffLineParseElfTool來獲取文件HPM. out的解析 ELF信息頭數(shù)據(jù),從中計算段頭數(shù)據(jù)總表的偏移與大?。?br>
[0065] 3) OffLineParseElfTool在頭數(shù)據(jù)總表中解析代碼段信息頭數(shù)據(jù),計算代碼段在 ELF文件中的偏移與大小,然后從對應(yīng)位置獲取代碼段數(shù)據(jù);
[0066] 4) OffLineParseElfTool根據(jù)代碼段數(shù)據(jù)和10組冗余碼,生成10組離線校驗(yàn)數(shù) 據(jù);
[0067] 5)利用VHDL語言編寫校驗(yàn)算法邏輯,并生成相應(yīng)文件,將相應(yīng)文件和離線生成的 校驗(yàn)數(shù)據(jù)碼數(shù)據(jù)燒寫到CPLD中。
[0068] 6)通過ftp工具將可執(zhí)行應(yīng)用程序文件HPM. out,遠(yuǎn)程下載,并在線燒寫到嵌入式 設(shè)備的板載Flash中。在燒寫前,備份較老版本的應(yīng)用程序文件為HPM. old,如果燒寫失敗, 從HPM. old文件恢復(fù),使用老版本應(yīng)用程序。
[0069] 如圖2所示,一種嵌入式的代碼運(yùn)行時在線自檢與恢復(fù)方法的代碼段實(shí)時檢測與 在線恢復(fù)階段,該階段包括以下步驟:
[0070] 101)嵌入式設(shè)備上電后,開始初始化0?比狀1^1&811、網(wǎng)絡(luò)芯片等硬件,并對0?0) 模塊進(jìn)行初始化,如果初始化成功繼續(xù)步驟102),否則執(zhí)行步驟111);
[0071] 102)嵌入式設(shè)備的操作系統(tǒng)開始初始化,掛載Flash文件系統(tǒng),并且創(chuàng)建系統(tǒng)初 始化任務(wù)InitTask,如果初始化成功繼續(xù)步驟103),否則執(zhí)行步驟111);
[0072] 103)初始化任務(wù)InitTask從Flash文件系統(tǒng)的加載可執(zhí)行文件HPM. out,加載到 指定的內(nèi)存區(qū)域:InitTask創(chuàng)建恢復(fù)任務(wù)RecoverTask、主處理任務(wù)MainTask和網(wǎng)絡(luò)任務(wù) NetTask,并掛起恢復(fù)任務(wù)RecoverTask ;InitTask獲取對應(yīng)代碼段在內(nèi)存區(qū)域中地址和大 小,然后并從中解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的 校驗(yàn)碼比較,如果校驗(yàn)通過繼續(xù)步驟104),否則執(zhí)行步驟111);
[0073] 104)MainTask對嵌入式設(shè)備的系統(tǒng)數(shù)據(jù)進(jìn)行邏輯處理,并執(zhí)行步驟105);
[0074] 105)判斷周期為500ms的定時中斷是否觸發(fā),如果觸發(fā)執(zhí)行步驟106),否則返回 執(zhí)行步驟104);
[0075] 106)定時中斷處理函數(shù)通過鎖住操作系統(tǒng)操作來禁止任務(wù)調(diào)度和響應(yīng)中斷,然后 通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,并與離線生成的校驗(yàn)碼比較,如果校驗(yàn)通過繼續(xù)步驟 107),否則執(zhí)行步驟108);
[0076] 107)解鎖操作系統(tǒng)操作來恢復(fù)任務(wù)調(diào)度和響應(yīng)中斷,并返回執(zhí)行步驟104);
[0077] 108)獲取主處理任務(wù)MainTask運(yùn)行參數(shù)與系統(tǒng)狀態(tài)變量值,并將這些變量值保 存到系統(tǒng)內(nèi)存的高內(nèi)存的教育數(shù)據(jù)區(qū),繼續(xù)步驟109);
[0078] 109)調(diào)用在線恢復(fù)代碼段功能模塊,來恢復(fù)應(yīng)用程序的代碼段數(shù)據(jù),判斷如果恢 復(fù)成功,執(zhí)行步驟110),否則執(zhí)行步驟111);
[0079] 110)從教育數(shù)據(jù)區(qū)恢復(fù)主處理任務(wù)MainTask運(yùn)行參數(shù)與系統(tǒng)狀態(tài)變量并返回執(zhí) 行步驟4);
[0080] 111)控制板卡前面板上LED閃爍,來進(jìn)行告警,并持續(xù)閃爍3分鐘后,嵌入式設(shè)備 重啟。
[0081] 如圖3所示,一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法的代碼段實(shí) 時檢測與在線恢復(fù)階段,包含在線恢復(fù)代碼段功能模塊執(zhí)行子階段,該子階段包括以下步 驟:
[0082] 201)解鎖操作系統(tǒng),激活創(chuàng)建恢復(fù)任務(wù)RecoverTask, RecoverTask開始運(yùn)行,并 關(guān)閉CPLD中定時器,繼續(xù)步驟202);
[0083] 202)恢復(fù)任務(wù) RecoverTask 刪除 MainTask 和 NetTask,并且清除 MainTask 和 NetTask的控制塊信息,刪除HPM.out模塊加載信息。繼續(xù)步驟203);
[0084] 203)恢復(fù)任務(wù)RecoverTask從Flash文件系統(tǒng)的加載可執(zhí)行文件HPM. out,從中 解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的校驗(yàn)碼比較,如 果校驗(yàn)通過繼續(xù)步驟206),否則執(zhí)行步驟204);
[0085] 204)恢復(fù)任務(wù)RecoverTask通過FTP協(xié)議從工作站PC機(jī)下載可執(zhí)行文件HPM. out,從中解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的校驗(yàn)碼 比較;
[0086] 205)判斷校驗(yàn)碼是否一致,如果校驗(yàn)碼一致繼續(xù)步驟206),否則設(shè)置g_REC0VER 為1,并執(zhí)行步驟208);
[0087] 206)恢復(fù)任務(wù)RecoverTask加載可執(zhí)行文件HPMout,加載到指定的內(nèi)存區(qū)域;然 后創(chuàng)建主處理任務(wù)MainTask和網(wǎng)絡(luò)任務(wù)NetTask,并掛起恢復(fù)任務(wù)RecoverTask ;
[0088] 207)判斷是否加載成功,如果成功,設(shè)置g_REC0VER為0,否則,設(shè)置g_REC0VER為 1,然后執(zhí)行步驟208);
[0089] 208)打開CPLD中的定時器,并返回。
[0090] (2)如圖4所示,一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)裝置,該裝置 包括遠(yuǎn)程工作站PC機(jī)f和嵌入式設(shè)備。所述遠(yuǎn)程工作站PC機(jī)為工業(yè)計算機(jī)。所述的嵌入 式設(shè)備主要由主處理模塊a、CPLD邏輯模塊b和電源模塊C組成,所述的主處理模塊a由微 處理器al、內(nèi)存模塊a3、Flash模塊a5、網(wǎng)絡(luò)模塊a2、看門狗模塊a4組成,所述CPLD邏輯模 塊b主要由HSD(High Speed Detection)模塊bl、LED指示模塊b2、定時器模塊b3組成, 所述的電源模塊c給主處理模塊a、CPLD模塊b供電,微處理器al通過本地系統(tǒng)總線與主 處理模塊a其他子模塊(a2, a3, a4, a5)以及CPLD模塊b連接,遠(yuǎn)程工作站PC機(jī)f通過網(wǎng) 絡(luò)連接線e、路由設(shè)備d、以太網(wǎng)g與嵌入式設(shè)備連接。
[0091] 主處理模塊a通過網(wǎng)絡(luò)模塊a2從外部設(shè)備接收網(wǎng)絡(luò)數(shù)據(jù)包,然后由微處理器al 負(fù)責(zé)對接收的數(shù)據(jù)進(jìn)行邏輯處理。網(wǎng)絡(luò)模塊a2采用1000M速率的網(wǎng)絡(luò)芯片,微處理器al的 型號為ARM(C〇rtex-R)。內(nèi)存模塊a3為嵌入式設(shè)備運(yùn)行提供內(nèi)存空間。Flash模塊a5主 要用于Flash文件系統(tǒng),存儲可執(zhí)行文件以及其他配置文件。看門狗模塊a4主要負(fù)責(zé)系統(tǒng) 監(jiān)控功能,防止程序進(jìn)入異常死循環(huán)狀態(tài)。
[0092] CPLD模塊b從主處理模塊a接收數(shù)據(jù),并根據(jù)預(yù)先設(shè)計的冗余碼生成在線校驗(yàn)碼。 HSD模塊bl負(fù)責(zé)生成在線校驗(yàn)碼,并比較在線校驗(yàn)碼和離線校驗(yàn)碼的一致性。LED指示模 塊b2為多色LED燈,通過閃爍不同的顏色表示不同的告警內(nèi)容。定時器模塊b3主要負(fù)責(zé) 產(chǎn)生定時器中斷信號,中斷信號的周期為500ms。
[0093] 電源模塊c將輸入的220V電壓轉(zhuǎn)換成24V的電壓,給主處理模塊a、CPLD模塊b 供電。
[0094] 主處理模塊a上運(yùn)行的操作系統(tǒng)為嵌入式vxWorks操作系統(tǒng),HPM. out軟件采用 標(biāo)準(zhǔn)C語言進(jìn)行軟件開發(fā)。
[0095] CPLD模塊b中的邏輯功能通過VHDL硬件邏輯語言開發(fā)。
[0096] 遠(yuǎn)程工作站PC機(jī)f上運(yùn)行的操作系統(tǒng)為Microsoft Windows XP Professional。 網(wǎng)絡(luò)連接線e為帶屏蔽層的雙絞線,路由設(shè)備d為思科路由器設(shè)備。
[0097] 離線解析工具OffLineParseElfTool采用C++語言開發(fā),軟件開發(fā)環(huán)境為微軟公 司的 Visual Studio 2010。
[0098] 可執(zhí)行文件HPM. out主要包含主處理任務(wù)和網(wǎng)絡(luò)任務(wù)的邏輯代碼,HPM. out的軟 件結(jié)構(gòu)如下:
[0099] 1)網(wǎng)絡(luò)通信任務(wù)模塊
[0100] 通過網(wǎng)絡(luò)協(xié)議接收輸入數(shù)據(jù)和發(fā)送輸出數(shù)據(jù),數(shù)據(jù)包括狀態(tài)信息和控制命令。
[0101] 2)主處理任務(wù)模塊
[0102] 對輸入的數(shù)據(jù)進(jìn)行邏輯處理,并輸出。
[0103] 在應(yīng)用程序編譯完成后,會生成ELF格式的可執(zhí)行文件HPM. out,利用離線解析工 具OffLineParseElfTool從中提取出代碼段數(shù)據(jù),利用校驗(yàn)碼生成算法結(jié)合設(shè)計好的10組 冗余碼,來生成10組離線校驗(yàn)碼,并將生成的10組相異的校驗(yàn)碼,存儲到對應(yīng)的文件中。10 組冗余碼如表1所示:表1
[0104]
【權(quán)利要求】
1. 一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其特征在于,該方法采用 離線與在線相結(jié)合的代碼運(yùn)行時故障檢測機(jī)制,同時提供在線恢復(fù)代碼段數(shù)據(jù),所述的恢 復(fù)方法具體包括以下步驟: 1) 代碼段數(shù)據(jù)離線校驗(yàn)處理階段; 2) 代碼段實(shí)時檢測與在線恢復(fù)階段。
2. 根據(jù)權(quán)利要求1所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其 特征在于,所述的步驟1)代碼段數(shù)據(jù)離線校驗(yàn)處理階段具體為: al)在應(yīng)用程序的代碼編碼完成后,放入工作站PC機(jī)上進(jìn)行交叉編譯,生成可在嵌入 式設(shè)備上運(yùn)行的ELF格式的可執(zhí)行文件HPM. out ; a2)通過ELF文件離線解析工具OffLineParseElfTool來獲取文件HPM. out的解析ELF 信息頭數(shù)據(jù),從中計算段頭數(shù)據(jù)總表的偏移與大小; a3) OffLineParseElfTool在頭數(shù)據(jù)總表中解析代碼段信息頭數(shù)據(jù),計算代碼段在ELF 文件中的偏移與大小,然后從對應(yīng)位置獲取代碼段數(shù)據(jù); a4) OffLineParseElfTool根據(jù)代碼段數(shù)據(jù)和10組冗余碼,生成10組離線校驗(yàn)數(shù)據(jù); a5)利用VHDL語言編寫校驗(yàn)算法邏輯,并生成相應(yīng)文件,將相應(yīng)文件和離線生成的校 驗(yàn)數(shù)據(jù)碼數(shù)據(jù)燒寫到CPLD中; a6)通過ftp工具將可執(zhí)行應(yīng)用程序文件HPM. out進(jìn)行遠(yuǎn)程下載,或在線燒寫到嵌入式 設(shè)備的板載Flash中。
3. 根據(jù)權(quán)利要求2所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其 特征在于,在線燒寫前,備份較老版本的應(yīng)用程序文件為HPM. old,如果燒寫失敗,從HPM. old文件恢復(fù),使用老版本應(yīng)用程序。
4. 根據(jù)權(quán)利要求2所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其 特征在于,所述的步驟2)代碼段實(shí)時檢測與在線恢復(fù)階段具體為: bl)嵌入式設(shè)備上電后,初始化硬件設(shè)備,并對CPLD模塊進(jìn)行初始化,如果初始化成功 繼續(xù)步驟b2),否則執(zhí)行步驟bll); b2)嵌入式設(shè)備的操作系統(tǒng)開始初始化,掛載Flash文件系統(tǒng),并且創(chuàng)建系統(tǒng)初始化任 務(wù)InitTask,如果初始化成功繼續(xù)步驟b3),否則執(zhí)行步驟bll); b3)初始化任務(wù)InitTask從Flash文件系統(tǒng)的加載可執(zhí)行文件HPM. out,加載到指 定的內(nèi)存區(qū)域;InitTask創(chuàng)建恢復(fù)任務(wù)RecoverTask、主處理任務(wù)MainTask和網(wǎng)絡(luò)任務(wù) NetTask,并掛起恢復(fù)任務(wù)RecoverTask ;InitTask獲取對應(yīng)代碼段在內(nèi)存區(qū)域中地址和大 小,然后并從中解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的 校驗(yàn)碼比較,如果校驗(yàn)通過繼續(xù)步驟b4),否則執(zhí)行步驟bll); b4)MainTask對嵌入式設(shè)備的系統(tǒng)數(shù)據(jù)進(jìn)行邏輯處理,并執(zhí)行步驟b5); b5)判斷定時中斷是否觸發(fā),如果觸發(fā)執(zhí)行步驟b6),否則返回執(zhí)行步驟b4); b6)定時中斷處理函數(shù)通過鎖住操作系統(tǒng)操作來禁止任務(wù)調(diào)度和響應(yīng)中斷,然后通過 CPLD根據(jù)冗余碼來生成校驗(yàn)碼,并與離線生成的校驗(yàn)碼比較,如果校驗(yàn)通過繼續(xù)步驟b7), 否則執(zhí)行步驟b8); b7)解鎖操作系統(tǒng)操作來恢復(fù)任務(wù)調(diào)度和響應(yīng)中斷,并返回執(zhí)行步驟b4); b8)獲取主處理任務(wù)MainTask運(yùn)行參數(shù)與系統(tǒng)狀態(tài)變量切片值,并將這些變量切片值 保存到系統(tǒng)內(nèi)存的高內(nèi)存的教育數(shù)據(jù)區(qū),同時對該教育數(shù)據(jù)進(jìn)行CRC處理,并保存CRC值, 供教育恢復(fù)時,校驗(yàn)數(shù)據(jù)使用,繼續(xù)步驟b9); b9)調(diào)用在線恢復(fù)代碼段功能模塊,來恢復(fù)應(yīng)用程序的代碼段數(shù)據(jù),判斷如果恢復(fù)成 功,執(zhí)行步驟blO),否則執(zhí)行步驟bll); blO)從教育數(shù)據(jù)區(qū)恢復(fù)主處理任務(wù)MainTask運(yùn)行參數(shù)與系統(tǒng)狀態(tài)變量并返回執(zhí)行步 驟 b4); bl 1)控制板卡前面板上LED閃爍,來進(jìn)行告警,并持續(xù)閃爍3分鐘后,嵌入式設(shè)備重啟。
5. 根據(jù)權(quán)利要求4所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其 特征在于,所述的步驟b5)中的定時中斷的周期為500ms。
6. 根據(jù)權(quán)利要求4所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法,其 特征在于,所述的在線恢復(fù)代碼段功能模塊具體工作流程如下: cl)解鎖操作系統(tǒng),激活創(chuàng)建恢復(fù)任務(wù)RecoverTask,RecoverTask開始運(yùn)行,并關(guān)閉 CPLD中定時器,繼續(xù)步驟c2); c2)恢復(fù)任務(wù) RecoverTask 刪除 MainTask 和 NetTask,并且清除 MainTask 和 NetTask 的控制塊信息,刪除HPM. out模塊加載信息,繼續(xù)步驟c3); c3)恢復(fù)任務(wù)RecoverTask從Flash文件系統(tǒng)的加載可執(zhí)行文件HPM. out,從中解析出 代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的校驗(yàn)碼比較,如果校驗(yàn) 通過繼續(xù)步驟c6),否則執(zhí)行步驟c4); c4)恢復(fù)任務(wù)RecoverTask通過FTP協(xié)議從遠(yuǎn)程工作站PC機(jī)下載可執(zhí)行文件HPM. out,從中解析出代碼段數(shù)據(jù),并通過CPLD根據(jù)冗余碼來生成校驗(yàn)碼,與離線生成的校驗(yàn)碼 比較,繼續(xù)步驟c5); c5)判斷校驗(yàn)碼是否一致,如果校驗(yàn)碼一致繼續(xù)步驟c6),否則設(shè)置g_REC0VER為1,并 執(zhí)行步驟c8); c6)恢復(fù)任務(wù)RecoverTask加載可執(zhí)行文件HPM. out,加載到指定的內(nèi)存區(qū)域;然后創(chuàng) 建主處理任務(wù)MainTask和網(wǎng)絡(luò)任務(wù)NetTask,并掛起恢復(fù)任務(wù)RecoverTask ; c7)判斷是否加載成功,如果成功,設(shè)置g_REC0VER為0,否則,設(shè)置g_REC0VER為1,然 后執(zhí)行步驟c8); c8)打開CPLD中的定時器,并返回。
7. -種實(shí)施權(quán)利要求1至6中任一的嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方 法的裝置,其特征在于,包括遠(yuǎn)程工作站PC機(jī)和嵌入式設(shè)備,該嵌入式設(shè)備包括主處理模 塊、電源模塊和CPLD邏輯模塊,所述的主處理模塊包括微處理器以及分別與微處理器連接 的內(nèi)存模塊、Flash模塊、網(wǎng)絡(luò)模塊和看門狗模塊,所述的CPLD邏輯模塊包括分別與微處理 器連接的HSD模塊、LED指示模塊、定時器模塊,所述的網(wǎng)絡(luò)模塊與遠(yuǎn)程工作站PC機(jī)連接; 所述的主處理模塊通過網(wǎng)絡(luò)模塊從外部設(shè)備接收網(wǎng)絡(luò)數(shù)據(jù)包,然后由微處理器負(fù)責(zé)對 接收的數(shù)據(jù)進(jìn)行邏輯處理,所述的CPLD模塊從主處理模塊接收數(shù)據(jù),并根據(jù)預(yù)先設(shè)計的冗 余碼生成在線校驗(yàn)碼,所述的HSD模塊負(fù)責(zé)生成在線校驗(yàn)碼,并比較在線校驗(yàn)碼和離線校 驗(yàn)碼的一致性。
8. 根據(jù)權(quán)利要求7所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法的 裝置,其特征在于,所述的遠(yuǎn)程工作站PC機(jī)依次通過網(wǎng)絡(luò)連接線、路由設(shè)備、以太網(wǎng)與嵌入 式設(shè)備連接。
9.根據(jù)權(quán)利要求7所述的一種嵌入式軟件運(yùn)行時故障的在線自檢與切片恢復(fù)方法的 裝置,其特征在于,所述的電源模塊將輸入的220V電壓轉(zhuǎn)換成24V的電壓,給主處理模塊、 CPLD模塊供電。
【文檔編號】G06F11/36GK104298599SQ201410562454
【公開日】2015年1月21日 申請日期:2014年10月21日 優(yōu)先權(quán)日:2014年10月21日
【發(fā)明者】徐軍, 孫軍峰, 周庭梁, 周宇恒, 汪明新, 張磊 申請人:卡斯柯信號有限公司