專利名稱:一種嵌入式容錯系統(tǒng)及其容錯方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種嵌入式系統(tǒng)及其方法,尤其涉及一種嵌入式容錯系統(tǒng)及其容錯方法。
背景技術(shù):
隨著信息化,智能化,網(wǎng)絡(luò)化的發(fā)展,嵌入式系統(tǒng)技術(shù)獲得了廣闊的發(fā)展空間,應(yīng) 用非常的廣泛。一般的嵌入式系統(tǒng)如圖1,其包括RAM(Random-ACCesS Memory)模塊10、 CPU (Central Processing Unit) 20, VX R ROM (Read-Only Memory)牛莫雙 30。)(寸
些較小的嵌入系統(tǒng),其RAM、ROM可以內(nèi)置。在嵌入式系統(tǒng)中,程序代碼一般存放在ROM中。 嵌入式系統(tǒng)在運行過程中,常常會發(fā)生程序代碼被改寫、出差或丟失。其原因有很多,如因 干擾而導(dǎo)致的誤操作、靜電、電源沖擊、或器件疲勞等等,從而導(dǎo)致系統(tǒng)無法正常工作。因此,現(xiàn)有技術(shù)還有待于改進與發(fā)展。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種嵌入式容錯系統(tǒng)及其容錯方法,保證嵌入式系統(tǒng)在一 定問題下能正常工作,并告知用戶系統(tǒng)目前存在的問題。本發(fā)明的技術(shù)方案如下一種嵌入式容錯系統(tǒng),其包括一 RAM模塊、一與該RAM模塊通訊連接的CPU模塊, 其中,該系統(tǒng)還包括多個ROM模塊以及一 CPLD模塊,所述CPLD模塊分別與所述CPU模塊及 ROM模塊通訊連接,檢測ROM模塊的運行狀態(tài),并根據(jù)檢測結(jié)果在多個ROM模塊間切換系統(tǒng) 總線。所述的嵌入式容錯系統(tǒng),其中,所述CPLD模塊包括一與所述CPU模塊通訊連接的啟動過程檢測與控制模塊,用于檢測判斷ROM模塊 程序運行狀態(tài),并根據(jù)該程序運行狀態(tài)設(shè)置啟動過程狀態(tài)字,同時對ROM模塊中程序代碼 校驗結(jié)果與標(biāo)準(zhǔn)程序代碼校驗結(jié)果進行比較;一分別與所述啟動過程檢測與控制模塊、ROM模塊通訊連接的總線切換控制模塊, 用于根據(jù)所述啟動過程狀態(tài)字切換系統(tǒng)總線;一分別與所述CPU模塊、啟動過程檢測與控制模塊通訊連接的啟動校驗結(jié)果寄存 器模塊,用于存儲ROM模塊中程序代碼校驗結(jié)果;一與啟動過程檢測與控制模塊通訊連接的校驗結(jié)果寄存器模塊,用于存儲標(biāo)準(zhǔn)程 序代碼校驗結(jié)果。所述的嵌入式容錯系統(tǒng),其中,所述CPU模塊讀入啟動過程狀態(tài)字,并設(shè)定總線切 換控制字。所述的嵌入式容錯系統(tǒng),其中,所述總線切換控制模塊,用于根據(jù)所述總線切換控 制字切換系統(tǒng)總線。所述的嵌入式容錯系統(tǒng),其中,CPU模塊對ROM模塊中的程序代碼進行校驗。
4
所述的嵌入式容錯系統(tǒng),其中,所述程序代碼包括B00TL0ADER程序代碼和內(nèi)核 程序代碼。所述的嵌入式容錯系統(tǒng),其中,所述CPLD模塊還包括與所述啟動過程檢測與控制 模塊通訊連接的時間計算器模塊,用于對程序運行過程進行限時計時。所述的嵌入式容錯系統(tǒng),其中,所述時間計算器模塊包括第一時間計算器,用于對 B00TL0ADER程序運行過程進行限時計時。所述的嵌入式容錯系統(tǒng),其中,所述時間計算器模塊包括第二時間計算器,用于對 內(nèi)核程序運行過程進行限時計時。一種嵌入式容錯系統(tǒng)的容錯方法,其包括以下步驟A、檢測ROM模塊中B00TL0ADER程序狀態(tài),根據(jù)檢測結(jié)果切換系統(tǒng)總線,并比較判 斷該ROM模塊中B00TL0ADER程序代碼校驗結(jié)果與標(biāo)準(zhǔn)B00TL0ADER程序代碼校驗結(jié)果是否 相符;B、若兩校驗結(jié)果相符,則檢測ROM模塊中內(nèi)核程序狀態(tài),根據(jù)檢測結(jié)果切換系統(tǒng) 總線,并比較判斷該ROM模塊中內(nèi)核程序代碼校驗結(jié)果與標(biāo)準(zhǔn)內(nèi)核程序代碼校驗結(jié)果是否 相符;C、若兩校驗結(jié)果相符,則檢測ROM模塊中應(yīng)用程序狀態(tài),設(shè)置總線切換控制字,并 根據(jù)該總線切換控制字切換系統(tǒng)總線,運行所需應(yīng)用程序。所述的方法,其中,所述步驟A還包括以下步驟Al、檢測ROM模塊的B00TL0ADER程序運行狀態(tài),并根據(jù)該程序運行狀態(tài)設(shè)置啟動 過程狀態(tài)字;A2、根據(jù)所述啟動過程狀態(tài)字,切換系統(tǒng)總線;A3、校驗該ROM模塊內(nèi)的B00TL0ADER程序代碼,并將該校驗結(jié)果與標(biāo)準(zhǔn) B00TL0ADER程序代碼校驗結(jié)果進行比較,判斷確定兩校驗結(jié)果相符。所述的方法,其中,所述步驟A3還包括步驟判斷確定兩校驗結(jié)果不相符,則系統(tǒng) 復(fù)位。所述的方法,其中,所述啟動過程狀態(tài)字包括以下信息R0M模塊序號信息、運行 階段信息、B00TL0ADER程序代碼正確與否信息。所述的方法,其中,所述步驟A2包括以下步驟將系統(tǒng)總線切換至B00TL0ADER程 序代碼正確的ROM模塊中。所述的方法,其中,所述步驟A2還包括以下步驟當(dāng)所有ROM模塊的B00TL0ADER 程序代碼錯誤,則反饋B00TL0ADER程序失效信息。所述的方法,其中,所述步驟A3還包括以下步驟對B00TL0ADER程序運行過程進 行限時計時。所述的方法,其中,所述步驟B還包括以下步驟Bi、檢測ROM模塊的內(nèi)核程序運行狀態(tài),并根據(jù)該運行狀態(tài)設(shè)置啟動過程狀態(tài)字;B2、根據(jù)所述啟動過程狀態(tài)字,切換系統(tǒng)總線;B3、校驗該ROM模塊的內(nèi)核程序代碼,并將該校驗結(jié)果與標(biāo)準(zhǔn)內(nèi)核程序代碼校驗 結(jié)果進行比較,判斷確定兩校驗結(jié)果相符。所述的方法,其中,所述步驟B3中還包括步驟判斷確定兩校驗結(jié)果不相符,則系統(tǒng)復(fù)位。所述的方法,其中,所述啟動過程狀態(tài)字包括以下信息R0M模塊序號信息、運行 階段信息、內(nèi)核程序代碼正確與否信息。所述的方法,其中,所述步驟B2包括以下步驟將系統(tǒng)總線切換至內(nèi)核程序代碼 正確的ROM模塊中。所述的方法,其中,裝置步驟B2還包括以下步驟當(dāng)所有ROM模塊的內(nèi)核程序代碼 錯誤,則反饋內(nèi)核程序失效信息。所述的方法,其中,所述步驟B3還包括以下步驟對內(nèi)核程序運行過程進行限時 計時。所述的方法,其中,所述步驟C還包括以下步驟Cl、檢測ROM模塊內(nèi)應(yīng)用程序運行狀態(tài),并設(shè)置啟動過程狀態(tài)字;C2、讀取所述啟動過程狀態(tài)字,設(shè)定總線切換控制字,并將該總線切換控制字發(fā)送 于總線控制模塊;C3、根據(jù)總線切換控制字切換系統(tǒng)總線,則運行所需應(yīng)用程序。所述的方法,其中,所述步驟C3還括以下步驟判斷確定應(yīng)用程序執(zhí)行正確,則執(zhí) 行完畢后返回執(zhí)行步驟Cl。所述的方法,其中,所述步驟C3還包括以下步驟判斷確定應(yīng)用程序執(zhí)行錯誤,則 設(shè)置該應(yīng)用程序錯誤標(biāo)識,并返回執(zhí)行步驟Cl。本發(fā)明所提供的一種嵌入式容錯系統(tǒng)及其容錯方法,其方法由于采用根據(jù)檢測 ROM模塊運行狀態(tài)設(shè)置啟動過程狀態(tài)字,并根據(jù)該啟動過程狀態(tài)字切換系統(tǒng)總線的方式,保 證了系統(tǒng)在某一 ROM模塊運行出錯的情況,系統(tǒng)總線切換至另一 ROM模塊,使系統(tǒng)在該另一 ROM模塊下維持正常運行。
圖1為現(xiàn)有技術(shù)的嵌入式系統(tǒng)結(jié)構(gòu)示意圖;圖2為本發(fā)明的嵌入式容錯系統(tǒng)結(jié)構(gòu)示意圖;圖3為本發(fā)明的嵌入式容錯系統(tǒng)中CPLD模塊內(nèi)部結(jié)構(gòu)示意圖;圖4為本發(fā)明的ROM模塊內(nèi)各程序結(jié)構(gòu)示意圖;圖5為本發(fā)明的ROM模塊內(nèi)各程序另一結(jié)構(gòu)示意圖;圖6為本發(fā)明的CPLD模塊調(diào)用B00TL0ADER弓丨導(dǎo)程序流程圖;圖7為本發(fā)明的CPLD模塊調(diào)用內(nèi)核程序流程圖;圖8為本發(fā)明的CPLD模塊調(diào)用應(yīng)用程序流程圖;圖9為本發(fā)明的容錯方法的CPU模塊的工作流程圖;圖10為本發(fā)明的容錯方法的CPU模塊另一工作流程圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明的各較佳實施例進行更為詳細的描述。在嵌入式系統(tǒng)ROM模塊中,B00TL0ADER引用程序代碼需放置在指定的地址,為了 達到嵌入式系統(tǒng)的容錯效果,嵌入式系統(tǒng)需兩個或兩個以上的ROM模塊,并需在CPU模塊和ROM模塊之間,增加一個CPLD模塊對多個ROM模塊間進行系統(tǒng)總線切換。如圖2所示,本發(fā) 明的嵌入式容錯系統(tǒng)包括一 RAM模塊10、一與該RAM模塊10通訊連接的CPU模塊20、兩 個ROM模塊31與32以及一分別與所述CPU模塊20和ROM模塊通訊連接的CPLD模塊40。
其中,CPU模塊20可設(shè)置總線切換控制字,用于表示系統(tǒng)總線應(yīng)該切換到哪個ROM 模塊上;該CPU模塊20,還用于對該ROM模塊中B00TL0ADER程序代碼以及內(nèi)核程序代碼進 行CRC校驗,并將校驗結(jié)果發(fā)送于啟動校驗結(jié)果寄存器模塊43。 本發(fā)明嵌入式容錯系統(tǒng)的CPLD模塊40如圖3所示,其包括一與所述CPU模塊20 通訊連接的啟動過程檢測與控制模塊41 ;一分別與所述啟動過程檢測與控制模塊41、ROM 模塊31與32通訊連接的總線切換控制模塊42 ;—分別與所述CPU模塊20、啟動過程檢測 與控制模塊41通訊連接的啟動校驗結(jié)果寄存器模塊43 ;與啟動過程檢測與控制模塊41通 訊連接的校驗結(jié)果寄存器模塊45 ;與所述啟動過程檢測與控制模塊41通訊連接的時間計 算器模塊44。其中,啟動過程檢測與控制模塊41,用于檢測判斷ROM模塊程序運行狀態(tài)。即判斷 系統(tǒng)運行到哪一 ROM模塊的哪一步,并判斷系統(tǒng)運行的每一步驟是否成功;同時根據(jù)此判 斷設(shè)定啟動過程狀態(tài)字。如果系統(tǒng)在某個步驟啟動失敗,則引導(dǎo)系統(tǒng)重新復(fù)位。啟動過程狀態(tài)字包括有R0M模塊序號信息、運行階段信息、程序代碼正確與否信 肩、ο總線切換控制模塊42,用于根據(jù)啟動過程狀態(tài)字來切換系統(tǒng)的總線。對于應(yīng)用程序,調(diào)用隨機性大,其包括有調(diào)用、卸載、重復(fù)調(diào)用等情況。應(yīng)用程序 調(diào)用時間不確定,因此在調(diào)用應(yīng)用程序前,通過CPU模塊20讀入啟動過程狀態(tài)字,判斷讀取 哪一 ROM模塊。同時根據(jù)該判斷結(jié)果設(shè)定總線切換控制字,并將其發(fā)送于總線切換控制模 塊42,然后對應(yīng)用程序進行調(diào)用,該啟動過程狀態(tài)字實時設(shè)定,掉電不保護。在調(diào)用應(yīng)用程序過程中,總線切換控制模塊42根據(jù)總線切換控制字切換系統(tǒng)總 線。啟動過程狀態(tài)字,用來表明系統(tǒng)的運行到哪一 ROM模塊的哪一步。ROM模塊可以 是EEPR0M、NOR FLASH、或NAND FLASH等等,在此以FLASH為例對啟動過程狀態(tài)字進行描 述,如當(dāng)啟動過程狀態(tài)字為“#1FLASH#1段”則表明系統(tǒng)選用1號FLASH模塊,并處于運行 B00TL0ADER程序狀態(tài);若啟動過程狀態(tài)字為“#1FLASH#2段”,則表明系統(tǒng)選用1號FLASH 模塊,且B00TL0ADER程序運行成功,進行內(nèi)核程序調(diào)用;若啟動過程狀態(tài)字為“#1FLASH#3 段”,則表明系統(tǒng)選用1號FLASH模塊,且內(nèi)核程序調(diào)用成功,進行應(yīng)用程序調(diào)用。啟動過程狀態(tài)字由啟動過程檢測與控制模塊41根據(jù)系統(tǒng)程序運行狀態(tài)設(shè)定,并 通過啟動過程檢測與控制模塊41發(fā)送于總線切換控制模塊42,則該總線切換控制模塊42 根據(jù)該啟動過程狀態(tài)字進行系統(tǒng)總線切換。其中該啟動過程狀態(tài)字為實時設(shè)定,掉電不保 護。啟動校驗結(jié)果寄存器模塊43,用于存儲ROM模塊的B00TL0ADER程序代碼校驗結(jié)果 及內(nèi)核程序代碼校驗結(jié)果。系統(tǒng)在B00TL0ADER程序或內(nèi)核程序調(diào)用前,CPU模塊20需對ROM模塊的 B00TL0ADER程序代碼或內(nèi)核程序代碼進行CRC校驗,并將校驗結(jié)果發(fā)送于啟動校驗結(jié)果寄 存器模塊43。其中該啟動校驗結(jié)果寄存器模塊43實時設(shè)定,掉電不保護。
校驗結(jié)果寄存器模塊45包括第一校驗結(jié)果寄存器和第二校驗結(jié)果寄存器。 其中,第一校驗結(jié)果寄存器用于存儲標(biāo)準(zhǔn)B00TL0ADER程序代碼CRC校驗結(jié)果。該標(biāo)準(zhǔn) B00TL0ADER程序代碼CRC校驗結(jié)果在程序燒錄時寫進所述第一校驗結(jié)果寄存器,其掉電 保護。系統(tǒng)在判斷B00TL0ADER程序啟動是否成功時,通過啟動過程檢測與控制模塊41將 該標(biāo)準(zhǔn)B00TL0ADER程序代碼CRC校驗結(jié)果與啟動校驗結(jié)果寄存器模塊43內(nèi)ROM模塊的 B00TL0ADER程序代碼CRC校驗結(jié)果進行比較,判斷兩者是否相符。若相符則表明ROM模塊 的B00TL0ADER程序代碼正確,即B00TL0ADER程序運行成功,否則B00TL0ADER程序運行失 敗。第二校驗結(jié)果寄存器,用于存儲標(biāo)準(zhǔn)內(nèi)核程序代碼CRC校驗結(jié)果,該標(biāo)準(zhǔn)內(nèi)核程 序代碼CRC校驗結(jié)果在程序燒錄時寫進所述第二校驗結(jié)果寄存器,該標(biāo)準(zhǔn)內(nèi)核程序代碼 CRC校驗結(jié)果掉電保護。系統(tǒng)在判斷內(nèi)核程序調(diào)用是否成功時,通過啟動過程檢測與控制模 塊41將該標(biāo)準(zhǔn)內(nèi)核程序代碼CRC校驗結(jié)果與啟動校驗結(jié)果寄存器模塊43內(nèi)ROM模塊的內(nèi) 核程序代碼CRC校驗結(jié)果進行比較,判斷兩者是否相符。若相符則表明ROM模塊的內(nèi)核程 序代碼正確,即內(nèi)核程序運行成功,否則內(nèi)核程序運行失敗。時間計數(shù)器模塊44包括第一時間計數(shù)器和第二時間計數(shù)器。其中,第一時間計 數(shù)器用于對B00TL0ADER程序運行過程進行限時計時,即對B00TL0ADER程序啟動過程與其 在RAM模塊10中運行過程進行限時計時。在該限時時間內(nèi),啟動過程檢測與控制模塊41 完成對第一校驗結(jié)果寄存器與啟動校驗結(jié)果寄存器模塊43內(nèi)的CRC校驗結(jié)果進行比較,判 斷ROM模塊中的B00TL0ADER程序代碼是否正確,從而判斷B00TL0ADER程序運行是否成功。 該限時的時間常數(shù)在程序燒錄時寫入并保存于該第一時間計數(shù)器內(nèi)。第二時間計數(shù)器用于對內(nèi)核程序運行過程進行限時計時,即對內(nèi)核程序調(diào)用過程 與其在RAM模塊10中運行過程進行限時計時。在該限時時間內(nèi),啟動過程檢測與控制模塊 41完成對第二校驗結(jié)果寄存器與啟動校驗結(jié)果寄存器模塊43內(nèi)的校驗結(jié)果進行比較,判 斷ROM模塊中的內(nèi)核程序代碼是否正確,從而判斷內(nèi)核程序運行是否成功。該限時的時間 常數(shù)在程序燒錄時寫入,并保存于該第二時間計數(shù)器內(nèi)。本發(fā)明的啟動過程狀態(tài)字包括多個ROM模塊的啟動過程狀態(tài)字,每個ROM模塊的 過程狀態(tài)字又包括三個不同階段的啟動過程狀態(tài)字,每個階段有包括兩種啟動過程狀態(tài) 字。在此以FLASH模塊為代表對ROM模塊的啟動過程狀態(tài)字進行詳細的解說,如當(dāng)系統(tǒng)設(shè)置 有兩個FLASH模塊,則其包括有如下12個啟動過程狀態(tài)字“#1FLASH #1 0XAA”、“#1 FLASH #10XFF,,;“#1 FLASH #2 0XAA,,、“#1 FLASH #2 0XFF,,;“#1 FLASH #30XAA,,、“#1 FLASH #3 0XFF,,;“#2 FLASH #1 0XAA,,、“#2 FLASH #10XFF,,;“#2 FLASH #2 0XAA,,、“#2 FLASH #2 0XFF”;“#2 FLASH #30XAA”、“#2 FLASH #3 0XFF”。其中,“#1 FLASH #1 OXAA”用來標(biāo)識#1號FLASH模塊中B00TL0ADER程序代碼正 確,“#1FLASH#1 OXFF “用來標(biāo)識#1號FLASH模塊中B00TL0ADER程序代碼錯誤,“#1 FLASH #2 0ΧΑΑ”用來標(biāo)識#1號FLASH模塊中內(nèi)核程序代碼正確,“#1 FLASH #2 OXFF “用來標(biāo)識 #1號FLASH模塊中內(nèi)核程序代碼錯誤,"#1 FLASH #3 OXAA”用來標(biāo)識#1號FLASH模塊中 應(yīng)用程序代碼正確,“#1 FLASH #3 OXFF “用來標(biāo)識#1號FLASH模塊中用于程序代碼錯誤, #2號FLASH模塊的啟動過程狀態(tài)字所表達的含義與此相同,不再贅述。下面對啟動過程狀態(tài)字的設(shè)置過程作更為具體的描述。
“ # 1 FLASH # 1 ”狀態(tài)標(biāo)識字,用來標(biāo)識# 1號FLASH模塊中B00TL0ADER程序。該程 序代碼是否正確,用標(biāo)識字來表示,其包括“0ΧΑΑ”和“0XFF”。當(dāng)其標(biāo)識字為“0ΧΑΑ”,則表 明該程序代碼正確,掉電保護。在初始燒錄時,將該狀態(tài)標(biāo)識字初始化為“0ΧΑΑ”。如果在運 行過程中B00TL0ADER程序代碼判斷為錯誤,則啟動過程檢測與控制模塊41將該狀態(tài)標(biāo)識 字設(shè)置為“0XFF”?!?#1FLASH#2,,狀態(tài)標(biāo)識字,用來標(biāo)識# 1號FLASH模塊中內(nèi)核程序。該程序代碼是 否正確,用標(biāo)識字來表示,其包括“0ΧΑΑ”和“0XFF”。當(dāng)其標(biāo)識字為“0ΧΑΑ”,則表明該程序 代碼正確,掉電保護。在初始燒錄時,將該狀態(tài)標(biāo)識字初始化為“0ΧΑΑ”。若在運行的過程中 內(nèi)核程序代碼判斷為錯誤,則啟動過程檢測與控制模塊41將狀態(tài)標(biāo)識字設(shè)置為“0XFF”。"#1 FLASH#3”狀態(tài)標(biāo)識字,用來標(biāo)識#1號FLASH中應(yīng)用程序程序。一個嵌入式 系統(tǒng)可能有很多的應(yīng)用程序,一般用一個BIT位表示一個應(yīng)用程序代碼的狀態(tài)。如“0X00” 可以表示8個應(yīng)用程序代碼的狀態(tài),當(dāng)其為“0X00”,則表明這8個應(yīng)用程序代碼段都正確; 若某一相應(yīng)的BIT位為“1”,則表明該對應(yīng)的應(yīng)用程序代碼段錯誤。在初始燒錄時,將該狀 態(tài)標(biāo)識字初始化為“0X00”。在運行的過程中,如果某個應(yīng)用程序代碼判斷為錯誤,則CPU模 塊20對該狀態(tài)標(biāo)識字進行讀寫,直接把該錯誤應(yīng)用程序代碼相應(yīng)的應(yīng)用程序標(biāo)識位設(shè)定 為“BIT1”。如此設(shè)置,可以使其掉電保護。當(dāng)整個系統(tǒng)重新啟動,CPU模塊20可直接對每 個應(yīng)用程序代碼進行讀取,并根據(jù)讀取的結(jié)果對每個應(yīng)用程序代碼是否正確進行判斷。
“ #2FLASH# 1,,狀態(tài)標(biāo)識字,用來標(biāo)識#2號LASH模塊B00TL0ADER程序。該程序代 碼是否正確,用標(biāo)識字來表示,其包括“0ΧΑΑ”和“0XFF”。如果其為“0ΧΑΑ”,則表明這程序 代碼正確,掉電保護。在初始燒錄時,將該狀態(tài)標(biāo)識字初始化為“0ΧΑΑ”。若在運行的過程 中B00TL0ADER程序代碼判斷為錯誤,則啟動過程檢測與控制模塊41將該狀態(tài)標(biāo)識字設(shè)置 為 “0XFF”?!?#2FLASH#2,,狀態(tài)標(biāo)識字,用來標(biāo)識#2號FLASH模塊內(nèi)核程序代。該程序代碼是 否正確,用標(biāo)識字來表示,其包括“0ΧΑΑ”和“0XFF”。如果其為“0ΧΑΑ”,則表明該程序代碼 正確,掉電保護。在初始燒錄時,將狀態(tài)標(biāo)識字初始化為“0ΧΑΑ”。如在運行的過程中內(nèi)核程 序代碼判斷為錯誤,啟動過程檢測與控制模塊41將該狀態(tài)標(biāo)識字設(shè)置為“0XFF”?!?2FLASH#3”狀態(tài)標(biāo)識字,用來標(biāo)識#2號FLASH模塊中應(yīng)用程序。一個嵌入式系 統(tǒng)可能有很多的應(yīng)用程序,一般一個BIT位表示一個應(yīng)用程序代碼的狀態(tài)。如“0X00”可以 表示8個應(yīng)用程序代碼的狀態(tài),如果為“0X00”,則表明這8個應(yīng)用程序代碼正確;當(dāng)某一相 應(yīng)的BIT位為“1”則表明這個應(yīng)用程序的代碼錯誤。在初始燒錄時,則該狀態(tài)標(biāo)識字初始 化為“0X00”,若運行過程中某個應(yīng)用程序代碼判斷為錯誤,則CPU模塊20可對該狀態(tài)標(biāo)識 字進行讀寫,直接把該錯誤應(yīng)用程序代碼相應(yīng)的應(yīng)用程序標(biāo)識位設(shè)定為“BIT1”。如此設(shè)置, 可使其掉電保護。當(dāng)整個系統(tǒng)重新啟動,CPU模塊20可直接對每個應(yīng)用程序代碼進行讀取, 并根據(jù)讀取的結(jié)果對每個應(yīng)用程序代碼是否正確進行判斷。本發(fā)明的嵌入式容錯系統(tǒng),其CPU模塊20可以讀取ROM模塊的各程序狀態(tài)標(biāo)識 字,并將其相應(yīng)的狀態(tài)通知用戶。本發(fā)明的容錯系統(tǒng)還有一種極端狀態(tài),即在系統(tǒng)中多個 ROM模塊的B00TL0ADER程序代碼都出錯,則此時系統(tǒng)沒法初始化,即系統(tǒng)無法正常運行。當(dāng) 出現(xiàn)這種情況,本系統(tǒng)設(shè)置一個LED指示燈對該狀態(tài)進行顯示,以此告知用戶系統(tǒng)出現(xiàn)的 狀況。
9
本發(fā)明的嵌入式容錯系統(tǒng)涉及的系統(tǒng)主要為高端的嵌入系統(tǒng)。如圖4所示,這種 高端嵌入系統(tǒng)的ROM模塊30依次設(shè)置有B00TL0ADER程序、內(nèi)核程序、應(yīng)用程序。即ROM模 塊30中依次存放的程序代碼為B00TL0ADER程序代碼、內(nèi)核程序代碼、應(yīng)用程序代碼。這 三種程序代碼一般來說其地址是分開的,即非連續(xù)性放置,當(dāng)然也可以連續(xù)性放置。本發(fā)明的嵌入式容錯系統(tǒng),如圖5所示,B00TL0ADER程序代碼放置在指定地址,而 內(nèi)核程序代碼與應(yīng)用程序代碼則靈活放置。在ROM模塊30中可放置一個或多個內(nèi)核程序 代碼的備份,CPU模塊20通過B00TL0ADER引用程序?qū)?nèi)核程序代碼調(diào)用時可選擇所需內(nèi) 核程序代碼。同樣,在ROM模塊30中也可以放置一個或多個應(yīng)用程序代碼。本發(fā)明的嵌入式容錯系統(tǒng)的容錯方法中,其CPLD模塊的工作流程如圖6所示,具 體步驟如下Ll、調(diào)用 B00TL0ADER 程序;L11、啟動過程檢測與控制模塊41對FLASH模塊進行檢測,判斷是否正常運行到#1 號FLASH模塊的B00TL0ADER程序階段;L12、啟動過程檢測與控制模塊41根據(jù)判斷其結(jié)果為“是”,則設(shè)置狀態(tài)標(biāo)識字為 “#1FLASH#10XAA”,并將其發(fā)送于總線切換控制模塊; L13、總線切換控制模塊42將系統(tǒng)總線切換到#1號FLASH模塊,讀取B00TL0ADER 程序,并將其寫入RAM模塊10中,然后執(zhí)行步驟L14 ;L121、當(dāng)其判斷結(jié)果為“否”,則檢測#2號FLASH模塊,啟動過程檢測與控制模塊41 對#2號FLASH模塊進行檢測,判斷是否正常運行到#2號FLASH模塊的B00TL0ADER程序階 段;L122、啟動過程檢測與控制模塊41根據(jù)判斷其結(jié)果為“是”,則設(shè)置狀態(tài)標(biāo)識字為 "#2FLASH#20XAA",并將其發(fā)送于總線切換控制模塊42 ;L123、總線切換控制模塊42將系統(tǒng)總線切換到#2號FLASH模塊,讀取B00TL0ADER 程序,將其寫入RAM模塊10中,然后執(zhí)行步驟L14 ;L133、若其判斷結(jié)果仍然為“否”,則啟動LED指示燈,表明B00TL0ADER程序失效。L14、CPU模塊20對FLASH模塊中的B00TL0ADER程序代碼進行CRC校驗,并將該 校驗結(jié)果發(fā)送于啟動校驗結(jié)果寄存器模塊43 ;L15、第一時間計數(shù)器對B00TL0ADER程序啟動過程與其在RAM模塊10中運行過程 進行限時計時,并在計時完畢后,對第一校驗結(jié)果寄存器與啟動校驗結(jié)果寄存器模塊43中 的校驗結(jié)果進行比較,判斷兩者是否相符,若相符則執(zhí)行步驟L161,否則執(zhí)行步驟L162 ;L161、兩者相符,進入內(nèi)核程序的調(diào)用。L162、將該FLASH模塊的B00TL0ADER程序的狀態(tài)標(biāo)識設(shè)置為“0XFF”,則CPLD模塊 40進行復(fù)位輸出,即系統(tǒng)復(fù)位。L2內(nèi)核程序的調(diào)用,如圖7所示。L21、啟動過程檢測與控制模塊41對FLASH模塊進行檢測,判斷是否正常運行到#1 號FLASH模塊的內(nèi)核程序調(diào)用階段;L22、啟動過程檢測與控制模塊41根據(jù)判斷其結(jié)果為“是”,則設(shè)置狀態(tài)標(biāo)識字為 "#1FLASH#20XAA",并將其發(fā)送于總線切換控制模塊42 ;L23、總線切換控制模塊42將系統(tǒng)總線切換到#1號FLASH模塊,讀取內(nèi)核程序代碼,并將其寫入RAM模塊10中,然后執(zhí)行步驟L24 ;L221、當(dāng)其判斷結(jié)果為“否”,則檢測#2號FLASH模塊,啟動過程檢測與控制模塊 41對#2號FLASH模塊進行檢測,判斷是否正常運行到#2號FLASH模塊的內(nèi)核程序調(diào)用階 段;L222、啟動過程檢測與控制模塊41根據(jù)判斷其結(jié)果為“是”,則設(shè)置狀態(tài)標(biāo)識字為 "#2FLASH#20XAA",并將其發(fā)送于總線切換控制模塊42 ;L223、總線切換控制模塊42將系統(tǒng)總線切換到#2號FLASH模塊,讀取內(nèi)核程序代 碼,并將其寫入RAM模塊10中,然后執(zhí)行步驟L24 ;L233、若其判斷結(jié)果仍然為“否”,則將該內(nèi)核程序失效,并通過CPU模塊20告知用戶。L24、CPU模塊20對FLASH模塊中的內(nèi)核程序代碼進行CRC校驗,并將該校驗結(jié)果 發(fā)送于啟動校驗結(jié)果寄存器模塊43 ;L25、第二時間計數(shù)器對內(nèi)核調(diào)用過程與其在RAM模塊10中運行過程進行限時計 時,并在計時完畢后,對第二校驗結(jié)果寄存器與啟動校驗結(jié)果寄存器模塊43中的校驗結(jié)果 進行比較,判斷兩者是否相符,若相符則執(zhí)行步驟L261,否則執(zhí)行步驟L262;L261、兩者相符,進入應(yīng)用程序的調(diào)用階段;L262、將該FLASH模塊的內(nèi)核程序的標(biāo)識字設(shè)置為“0XFF”,則CPLD模塊進行復(fù)位 輸出,系統(tǒng)復(fù)位。L3、應(yīng)用程序的調(diào)用,如圖8所示L31、啟動過程檢測與控制模塊41對FLASH模塊進行檢測,判斷是否正常運行到#1 號FLASH模塊的應(yīng)用程序調(diào)用階段,并設(shè)定相應(yīng)的啟動過程狀態(tài)字;L32、CPU模塊20讀取上一步驟的啟動過程狀態(tài)字,并根據(jù)啟動過程狀態(tài)字設(shè)置總 線切換控制字,并將該總線切換控制字發(fā)送于總線切換控制模塊42 ;L33、總線切換控制模塊42根據(jù)該總線切換控制字,將系統(tǒng)總線切換到該啟動過 程狀態(tài)字相對應(yīng)的FLASH模塊中,則系統(tǒng)運行其后續(xù)相關(guān)程序。本實施例以兩個FLASH模塊為例對本發(fā)明嵌入式容錯方法的CPU模塊工作流程進 行詳細說明,如圖9所示,其流程如下Hl、對#1號FLASH模塊的B00TL0ADER程序代碼進行CRC校驗,并將該校驗結(jié)果發(fā) 送于CPLD模塊40,所述CPLD模塊40根據(jù)該校驗結(jié)果判斷B00TL0ADER程序弓|導(dǎo)是否成功, 若成功執(zhí)行步驟H2,否則執(zhí)行步驟H21 ;H2、對#1號FLASH模塊的內(nèi)核程序代碼進行CRC校驗,并將該校驗結(jié)果發(fā)送于 CPLD模塊40,所述CPLD模塊40該校驗結(jié)果判斷該內(nèi)核程序調(diào)用是否成功;若成功則執(zhí)行 步驟H3,否則執(zhí)行步驟H22 ;H3、讀入#1號FLASH模塊的應(yīng)用程序的狀態(tài)標(biāo)識字,即“#1FLASH#3”的狀態(tài)標(biāo)識 字;H4、根據(jù)該狀態(tài)標(biāo)識字對應(yīng)的BIT位,設(shè)置總線切換控制字,并發(fā)送于CPLD模塊 40 ;H5、根據(jù)實際需要,調(diào)用某一應(yīng)用程序;H6、判斷該應(yīng)用程序執(zhí)行是否正確,若正確則返回步驟H3 ;否則執(zhí)行步驟H7 ;
11
H7、將該應(yīng)用程序的標(biāo)識位設(shè)置為BIT1,并調(diào)整讀寫地址的指向,即指定FLASH模 塊的對應(yīng)的應(yīng)用程序代碼,然后返回步驟H3。H21、對#2號FLASH模塊的B00TL0ADER程序代碼進行CRC校驗,并將該校驗結(jié)果 發(fā)送于CPLD模塊40,所述CPLD模塊40根據(jù)該校驗結(jié)果判斷B00TL0ADER程序引導(dǎo)是否成 功,若成功則執(zhí)行步驟H22,否則B00TL0ADER程序失效;H22、對#2號FLASH模塊的內(nèi)核程序代碼進行CRC校驗,并將該校驗結(jié)果發(fā)送于 CPLD模塊40,所述CPLD模塊40該校驗結(jié)果判斷該內(nèi)核程序調(diào)用是否成功,若成功則執(zhí)行 步驟H23,否則內(nèi)核程序失效;H23、讀入#2號FLASH模塊的應(yīng)用程序的狀態(tài)標(biāo)識字,S卩“#2FLASH#3”的狀態(tài)標(biāo)識 字;H24、根據(jù)該狀態(tài)標(biāo)識字對應(yīng)的BIT位,設(shè)置總線切換控制字,并發(fā)送于CPLD模塊 40 ;H25、根據(jù)實際需要,調(diào)用某一應(yīng)用程序;H26、判斷該應(yīng)用程序執(zhí)行是否正確,若正確則返回步驟H23 ;否則執(zhí)行步驟H27 ;H27、將該應(yīng)用程序的標(biāo)識位設(shè)置為BIT1,并調(diào)整讀寫地址的指向,即指定FLASH 模塊的對應(yīng)的應(yīng)用程序代碼,然后返回步驟H23。 在CPU模塊的工作流程中,如圖10所示,當(dāng)#1號FLASH模塊的B00TL0ADER程序弓| 導(dǎo)失敗,系統(tǒng)總線切換到B00TL0ADER程序引導(dǎo)成功的#2號FLASH模塊,并對該#2號FLASH 模塊內(nèi)核程序調(diào)用是否成功進行判斷,當(dāng)該#2號FLASH模塊內(nèi)核程序調(diào)用失敗,則跳轉(zhuǎn)到 步驟H2,即對#1號FLASH模塊的內(nèi)核程序代碼進行CRC校驗,并將該校驗結(jié)果發(fā)送于CPLD 模塊40,所述CPLD模塊40該校驗結(jié)果判斷該內(nèi)核程序調(diào)用是否成功;當(dāng)該#1號FLASH模 塊的內(nèi)核程序也調(diào)用失敗,則表明系統(tǒng)內(nèi)核程序失效。本發(fā)明所提供的一種嵌入式容錯系統(tǒng)及其容錯方法,其方法由于采用根據(jù)檢測 ROM模塊運行狀態(tài)設(shè)置啟動過程狀態(tài)字,并根據(jù)該啟動過程狀態(tài)字切換系統(tǒng)總線的方式,保 證了系統(tǒng)在某一 ROM模塊運行出錯的情況,系統(tǒng)總線切換至另一 ROM模塊,使系統(tǒng)在該另一 ROM模塊繼續(xù)正常運行,即系統(tǒng)在存在一定問題的情況下還能繼續(xù)正常工作,提高了系統(tǒng)的 工作效率。應(yīng)當(dāng)理解的是,上述具體實施例的描述較為詳細,不能因此而理解為對本發(fā)明專 利保護范圍的限制,本發(fā)明專利保護范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
一種嵌入式容錯系統(tǒng),其包括一RAM模塊、一與該RAM模塊通訊連接的CPU模塊,其特征在于,該系統(tǒng)還包括多個ROM模塊以及一CPLD模塊,所述CPLD模塊分別與所述CPU模塊及ROM模塊通訊連接,檢測ROM模塊的運行狀態(tài),并根據(jù)檢測結(jié)果切換系統(tǒng)總線在多個ROM模塊間進行選擇。
2.根據(jù)權(quán)利要求1所述的嵌入式容錯系統(tǒng),其特征在于,所述CPLD模塊包括一與所述CPU模塊通訊連接的啟動過程檢測與控制模塊,用于檢測判斷ROM模塊程序 運行狀態(tài),并根據(jù)該程序運行狀態(tài)設(shè)置啟動過程狀態(tài)字,同時對ROM模塊中程序代碼校驗 結(jié)果與標(biāo)準(zhǔn)程序代碼校驗結(jié)果進行比較;一分別與所述啟動過程檢測與控制模塊、ROM模塊通訊連接的總線切換控制模塊,用于 根據(jù)所述啟動過程狀態(tài)字切換系統(tǒng)總線;一分別與所述CPU模塊、啟動過程檢測與控制模塊通訊連接的啟動校驗結(jié)果寄存器模 塊,用于存儲ROM模塊中程序代碼校驗結(jié)果;一與啟動過程檢測與控制模塊通訊連接的校驗結(jié)果寄存器模塊,用于存儲標(biāo)準(zhǔn)程序代 碼校驗結(jié)果。
3.根據(jù)權(quán)利要求2所述的嵌入式容錯系統(tǒng),其特征在于,所述CPU模塊讀入啟動過程狀 態(tài)字,并設(shè)定總線切換控制字。
4.根據(jù)權(quán)利要求2或3所述的嵌入式容錯系統(tǒng),其特征在于,所述總線切換控制模塊, 用于根據(jù)所述總線切換控制字切換系統(tǒng)總線。
5.根據(jù)權(quán)利要求2所述的嵌入式容錯系統(tǒng),其特征在于,CPU模塊對ROM模塊中的程序 代碼進行校驗。
6.根據(jù)權(quán)利要求2或5所述的嵌入式容錯系統(tǒng),其特征在于,所述程序代碼包括 B00TL0ADER程序代碼和內(nèi)核程序代碼。
7.根據(jù)權(quán)利要求2所述的嵌入式容錯系統(tǒng),其特征在于,所述CPLD模塊還包括與所 述啟動過程檢測與控制模塊通訊連接的時間計算器模塊,用于對程序運行過程進行限時計 時。
8.根據(jù)權(quán)利要求7所述嵌入式容錯系統(tǒng),其特征在于,所述時間計算器模塊包括第一 時間計算器,用于對B00TL0ADER程序運行過程進行限時計時。
9.根據(jù)權(quán)利要求7所述的嵌入式容錯系統(tǒng),其特征在于,所述時間計算器模塊包括第 二時間計算器,用于對內(nèi)核程序運行過程進行限時計時。
10.一種嵌入式容錯系統(tǒng)的容錯方法,其包括以下步驟A、檢測ROM模塊中B00TL0ADER程序狀態(tài),根據(jù)檢測結(jié)果切換系統(tǒng)總線,并比較判斷該 ROM模塊中B00TL0ADER程序代碼校驗結(jié)果與標(biāo)準(zhǔn)B00TL0ADER程序代碼校驗結(jié)果是否相 符;B、若兩校驗結(jié)果相符,則檢測ROM模塊中內(nèi)核程序狀態(tài),根據(jù)檢測結(jié)果切換系統(tǒng)總線, 并比較判斷該ROM模塊中內(nèi)核程序代碼校驗結(jié)果與標(biāo)準(zhǔn)內(nèi)核程序代碼校驗結(jié)果是否相符;C、若兩校驗結(jié)果相符,則檢測ROM模塊中應(yīng)用程序狀態(tài),設(shè)置總線切換控制字,并根據(jù) 該總線切換控制字切換系統(tǒng)總線,運行所需應(yīng)用程序。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述步驟A還包括以下步驟Al、檢測ROM模塊的B00TL0ADER程序運行狀態(tài),并根據(jù)該程序運行狀態(tài)設(shè)置啟動過程狀態(tài)字;A2、根據(jù)所述啟動過程狀態(tài)字,切換系統(tǒng)總線;A3、校驗該ROM模塊內(nèi)的B00TL0ADER程序代碼,并將該校驗結(jié)果與標(biāo)準(zhǔn)B00TL0ADER程 序代碼校驗結(jié)果進行比較,判斷兩校驗結(jié)果是否相符。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述步驟A3還包括步驟若判斷確定 兩校驗結(jié)果不相符,則系統(tǒng)復(fù)位。
13.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述啟動過程狀態(tài)字包括以下信息 ROM模塊序號信息、運行階段信息、B00TL0ADER程序代碼正確與否信息。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述步驟A2包括以下步驟將系統(tǒng)總 線切換至B00TL0ADER程序代碼正確的ROM模塊中。
15.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述步驟A2還包括以下步驟當(dāng)所有 ROM模塊的B00TL0ADER程序代碼錯誤,則反饋B00TL0ADER程序失效信息。
16.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述步驟A3還包括以下步驟對 B00TL0ADER程序運行過程進行限時計時。
17.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述步驟B還包括以下步驟Bi、檢測ROM模塊的內(nèi)核程序運行狀態(tài),并根據(jù)該運行狀態(tài)設(shè)置啟動過程狀態(tài)字;B2、根據(jù)所述啟動過程狀態(tài)字,切換系統(tǒng)總線;B3、校驗該ROM模塊的內(nèi)核程序代碼,并將該校驗結(jié)果與標(biāo)準(zhǔn)內(nèi)核程序代碼校驗結(jié)果 進行比較,判斷兩校驗結(jié)果是否相符。
18.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述步驟B3中還包括步驟若判斷確 定兩校驗結(jié)果不相符,則系統(tǒng)復(fù)位。
19.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述啟動過程狀態(tài)字包括以下信息 ROM模塊序號信息、運行階段信息、內(nèi)核程序代碼正確與否信息。
20.根據(jù)權(quán)利要求19所述的方法,其特征在于,所述步驟B2包括以下步驟將系統(tǒng)總 線切換至內(nèi)核程序代碼正確的ROM模塊中。
21.根據(jù)權(quán)利要求19所述的方法,其特征在于,裝置步驟B2還包括以下步驟當(dāng)所有 ROM模塊的內(nèi)核程序代碼錯誤,則反饋內(nèi)核程序失效信息。
22.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述步驟B3還包括以下步驟對內(nèi)核 程序運行過程進行限時計時。
23.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述步驟C還包括以下步驟Cl、檢測ROM模塊內(nèi)應(yīng)用程序運行狀態(tài),并設(shè)置啟動過程狀態(tài)字;C2、讀取所述啟動過程狀態(tài)字,設(shè)定總線切換控制字,并將該總線切換控制字發(fā)送于總 線控制模塊;C3、根據(jù)總線切換控制字切換系統(tǒng)總線,運行所需應(yīng)用程序。
24.根據(jù)權(quán)利要求23所述的方法,其特征在于,所述步驟C3還括以下步驟判斷確定 應(yīng)用程序執(zhí)行正確,則執(zhí)行完畢后返回執(zhí)行步驟Cl。
25.根據(jù)權(quán)利要求23所述的方法,其特征在于,所述步驟C3還包括以下步驟判斷確 定應(yīng)用程序執(zhí)行錯誤,則設(shè)置該應(yīng)用程序錯誤標(biāo)識,并返回執(zhí)行步驟Cl。
全文摘要
本發(fā)明公開了一種嵌入式容錯系統(tǒng)及其容錯方法,其方法如下檢測ROM模塊BOOTLOADER程序狀態(tài),切換系統(tǒng)總線,判斷ROM模塊BOOTLOADER程序代碼校驗結(jié)果與標(biāo)準(zhǔn)BOOTLOADER程序代碼校驗結(jié)果是否相符;檢測ROM模塊內(nèi)核程序狀態(tài),切換系統(tǒng)總線,判斷ROM模塊內(nèi)核程序代碼校驗結(jié)果與標(biāo)準(zhǔn)內(nèi)核程序代碼校驗結(jié)果是否相符;檢測ROM模塊應(yīng)用程序狀態(tài),設(shè)置總線切換控制字,切換系統(tǒng)總線,運行所需應(yīng)用程序。本發(fā)明所提供的系統(tǒng)及其容錯方法,其方法由于采用根據(jù)檢測ROM模塊運行狀態(tài),根據(jù)運行狀態(tài)切換系統(tǒng)總線的方式,保證了系統(tǒng)在某一ROM模塊出錯情況下,系統(tǒng)總線切換至另一ROM模塊,使系統(tǒng)繼續(xù)運行。
文檔編號G06F11/07GK101923495SQ20091010804
公開日2010年12月22日 申請日期2009年6月10日 優(yōu)先權(quán)日2009年6月10日
發(fā)明者黃劍堅 申請人:Tcl集團股份有限公司