專(zhuān)利名稱(chēng):可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,用于空間應(yīng)用的單粒子翻轉(zhuǎn)或其他造成程序代碼錯(cuò)誤的檢錯(cuò)糾錯(cuò)。
背景技術(shù):
對(duì)抗單粒子翻轉(zhuǎn)的設(shè)計(jì)目前主要有兩種方式,一是通過(guò)硬件設(shè)計(jì)軟件配合對(duì)應(yīng)用程序進(jìn)行EDAC檢錯(cuò)糾錯(cuò)或者軟件直接在對(duì)單粒子翻轉(zhuǎn)幾乎免疫的高等級(jí)器件上運(yùn)行,二是不依賴(lài)于硬件設(shè)計(jì),采用純軟件設(shè)計(jì)的方式對(duì)應(yīng)用程序進(jìn)行單粒子翻轉(zhuǎn)的檢錯(cuò)糾錯(cuò)。
近年來(lái),從公開(kāi)刊物及公開(kāi)渠道上所了解到的國(guó)內(nèi)外基于存儲(chǔ)器RAM抗單粒子翻轉(zhuǎn)事件防護(hù)設(shè)計(jì)情況如下
方案(1)采用檢錯(cuò)糾錯(cuò)數(shù)據(jù)編碼對(duì)單粒子翻轉(zhuǎn)進(jìn)行檢測(cè)和糾正,如奇偶校驗(yàn)碼、 循環(huán)冗余檢驗(yàn)碼、海明碼、R-S碼等?;谶@種措施,目前國(guó)內(nèi)外主要采取下列兩種方式
a)本身自帶EDAC設(shè)計(jì)的CPU芯片。如TSC695芯片、AT697芯片系列等。
b)DSP片外存儲(chǔ)器+FPGA(或ASIC)實(shí)現(xiàn)的EDAC校驗(yàn)。但是它不能對(duì)DSP內(nèi)部存儲(chǔ)器空間進(jìn)行檢錯(cuò)糾錯(cuò)處理。
該方案主要實(shí)現(xiàn)對(duì)片外存儲(chǔ)器的單粒子翻轉(zhuǎn)檢錯(cuò)糾錯(cuò)功能,缺點(diǎn)是對(duì)處理器內(nèi)部程序存儲(chǔ)器空間不能進(jìn)行單粒子翻轉(zhuǎn)檢錯(cuò)糾錯(cuò)功能。
方案(2)通過(guò)結(jié)構(gòu)冗余TMR實(shí)現(xiàn)軟件檢錯(cuò)糾錯(cuò)。采用三片處理器芯片同時(shí)運(yùn)行相同的程序,由主控計(jì)算機(jī)通過(guò)處理器芯片的選擇口來(lái)控制,對(duì)地址總線(xiàn)和數(shù)據(jù)進(jìn)行三選一判決,當(dāng)表決電路檢測(cè)出一位錯(cuò)誤時(shí),糾錯(cuò)服務(wù)子程序啟動(dòng)工作,來(lái)根據(jù)表決電路和自檢程序識(shí)別出的錯(cuò)誤等級(jí),錯(cuò)誤類(lèi)型修復(fù)系統(tǒng)回歸正常。這種方式較好的解決了單粒子翻轉(zhuǎn)問(wèn)題,但是其缺點(diǎn)是硬件開(kāi)銷(xiāo)大,需要硬件冗余,同時(shí)由于硬件結(jié)構(gòu)復(fù)雜,帶來(lái)了一系列可靠性問(wèn)題。而本文采用純軟件設(shè)計(jì),不需要修改硬件平臺(tái)即可實(shí)現(xiàn)抗單粒子翻轉(zhuǎn)的功能??蓞⒖嘉墨I(xiàn):Single Event Upset Characterization of the SMJ320C670IDigital Signal Processor Using Proton Irradiation,David M. Hiemstra,SeniorMember IEEE,Bojan Miladinovic,and Fayez Chayab ;
方案( 程序代碼直接固化在對(duì)單粒子翻轉(zhuǎn)幾乎免疫的PROM中運(yùn)行。但是大多數(shù)數(shù)字信號(hào)處理軟件功能性能由于受PROM運(yùn)行速度限制,無(wú)法在PROM中運(yùn)行,必須在DSP 內(nèi)部RAM中高速運(yùn)行,而本方法恰恰是解決DSP內(nèi)部RAM的抗單粒子翻轉(zhuǎn)問(wèn)題。
方案(4)采用應(yīng)用軟件定時(shí)刷新方式進(jìn)行程序抗單粒子翻轉(zhuǎn)。該方案采取軟件定時(shí)加載刷新的方式,由于每次都要全部加載軟件,若刷新時(shí)間間隔長(zhǎng),則在間隔期間內(nèi)無(wú)法實(shí)現(xiàn)抗單粒子翻轉(zhuǎn)功能,若刷新太快,則由于頻繁的從PROM中讀取程序?qū)懭隦AM,既影響程序的實(shí)時(shí)運(yùn)行又會(huì)產(chǎn)生一些可靠性問(wèn)題。目前星載軟件一般至少是以小時(shí)或分鐘的數(shù)量級(jí)刷新一次。與該方案比較,本方法是對(duì)應(yīng)用程序單粒子翻轉(zhuǎn)檢錯(cuò)后才從PROM中加載相應(yīng)部分代碼達(dá)到糾錯(cuò)的目的,因此,本方法的糾錯(cuò)時(shí)機(jī)優(yōu)于方案G),且方案由于是定時(shí)刷新,無(wú)法統(tǒng)計(jì)單粒子翻轉(zhuǎn)的次數(shù),而本發(fā)明可以統(tǒng)計(jì),為地面下傳豐富的單粒子翻轉(zhuǎn)信息。
方案( 基于部分軟件重構(gòu)的抗單粒子技術(shù)。該方案采取定時(shí)加載只讀ROM中的糾錯(cuò)程序?qū)崿F(xiàn)對(duì)應(yīng)用程序進(jìn)行檢錯(cuò)糾錯(cuò),應(yīng)用程序在運(yùn)行過(guò)程中,進(jìn)行保護(hù)現(xiàn)場(chǎng)后,通過(guò)加載糾錯(cuò)代碼實(shí)現(xiàn)對(duì)應(yīng)用程序代碼的糾錯(cuò)檢查,檢查后進(jìn)行現(xiàn)場(chǎng)恢復(fù),繼續(xù)運(yùn)行。該方案每次刷新前要從PROM中加載程序,也存在刷新周期的問(wèn)題,對(duì)間隔期間內(nèi)無(wú)法實(shí)現(xiàn)抗單粒子翻轉(zhuǎn)檢錯(cuò)糾錯(cuò)功能,同時(shí)由于該糾錯(cuò)程序是對(duì)程序存儲(chǔ)器直接編程實(shí)現(xiàn)的,不適用于目前空間大量應(yīng)用的高速信號(hào)處理器如DSP 6X系列等。參見(jiàn)專(zhuān)利申請(qǐng)201010527687. 6。
目前尚未在公開(kāi)文獻(xiàn)中看到利用DMA方式,采用純軟件設(shè)計(jì),利用容錯(cuò)處理雙冗余技術(shù)對(duì)處理器內(nèi)部程序代碼進(jìn)行全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法。發(fā)明內(nèi)容
本發(fā)明技術(shù)解決問(wèn)題克服現(xiàn)有技術(shù)的不足,提供了一種可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,實(shí)現(xiàn)了對(duì)空間應(yīng)用中具有DMA功能的處理器程序存儲(chǔ)器軟件進(jìn)行全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)錯(cuò)誤的檢錯(cuò)糾錯(cuò),從而提高了軟件在軌運(yùn)行的可靠性和安全性。
本發(fā)明技術(shù)解決方案可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特點(diǎn)在于包括存儲(chǔ)器地址鏈接配置、容錯(cuò)處理參數(shù)生成模塊、容錯(cuò)處理A模塊和容錯(cuò)處理B模塊的執(zhí)行,步驟如下
(1)存儲(chǔ)器地址鏈接配置
將存儲(chǔ)器地址分成R0M_A區(qū)、R0M_B,根據(jù)編譯鏈接分別對(duì)應(yīng)程序存儲(chǔ)器的RAM_A, RAM_B ;所述R0M_A區(qū)只放置容錯(cuò)處理B模塊的程序代碼,所述R0M_B區(qū)放置所有應(yīng)用程序的程序代碼,及容錯(cuò)處理參數(shù)生成模塊和容錯(cuò)處理A模塊的程序代碼;
(2)容錯(cuò)處理參數(shù)生成模塊
通過(guò)DMA的兩個(gè)通道DMAl和DMA2分別將RAM_A,RAM_B的程序代碼搬移到程序代碼對(duì)應(yīng)的數(shù)據(jù)區(qū),通過(guò)校驗(yàn)算法動(dòng)態(tài)生成容錯(cuò)處理A模塊和容錯(cuò)處理B模塊所有的校驗(yàn)參數(shù),并分別對(duì)校驗(yàn)參數(shù)進(jìn)行冗余存儲(chǔ)。
具有DMA處理器芯片上電或復(fù)位后,在初始化時(shí)調(diào)用容錯(cuò)處理參數(shù)生成函數(shù)動(dòng)態(tài)生成容錯(cuò)參數(shù)。該程序在處理器上電或復(fù)位后僅調(diào)用執(zhí)行一次,生成的容錯(cuò)參數(shù)通過(guò)冗余設(shè)計(jì)存儲(chǔ)在RAM中;
(3)容錯(cuò)處理A模塊
容錯(cuò)處理A用于自主實(shí)時(shí)監(jiān)測(cè)程序存儲(chǔ)器RAM_A區(qū)內(nèi)程序代碼的運(yùn)行,一旦該程序代碼發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤,則記錄所述錯(cuò)誤信息,并啟動(dòng)糾錯(cuò)功能,從R0M_A中讀取程序代碼覆蓋RAM_A區(qū)程序代碼,保證RAM_A區(qū)程序代碼安全健康運(yùn)行;
(4)容錯(cuò)處理B模塊
容錯(cuò)處理B用于自主實(shí)時(shí)監(jiān)測(cè)程序存儲(chǔ)器RAM_B區(qū)內(nèi)程序代碼的運(yùn)行,一旦該程序代碼發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤,則記錄所述錯(cuò)誤信息,并啟動(dòng)糾錯(cuò)功能,從R0M_B中讀取程序代碼覆蓋RAM_B區(qū)程序代碼,保證RAM_B區(qū)程序代碼安全健康運(yùn)行;
(5)獲取上述步驟(1)程序存儲(chǔ)器R0M_A區(qū)、RAM_A區(qū)的起始地址、程序存儲(chǔ)器 R0M_B區(qū)、RAM_B區(qū)的起始地址,讀取通過(guò)編譯鏈接后的生成的MAP表中程序代碼信息,查看 RAM_A區(qū)、RAM_B區(qū)的程序代碼長(zhǎng)度,將這些信息作為容錯(cuò)處理參數(shù)生成模塊、容錯(cuò)處理A模塊和容錯(cuò)處理B模塊中的形式參數(shù)予以調(diào)用,從而在線(xiàn)實(shí)現(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)錯(cuò)誤。
所述步驟O)的具體實(shí)現(xiàn)過(guò)程如下
(21)首先啟動(dòng)DMAl通道,從CPU不可直接讀寫(xiě)的程序存儲(chǔ)器RAM_B區(qū)中搬移程序代碼到數(shù)據(jù)區(qū);
(22)搬移完成后通過(guò)校驗(yàn)算法動(dòng)態(tài)生成RAM_B區(qū)搬移程序代碼的校驗(yàn)參數(shù);
(23)通過(guò)冗余存儲(chǔ)方法將校驗(yàn)參數(shù)存儲(chǔ)在數(shù)據(jù)RAM中;
(24)啟動(dòng)DMA2通道,從CPU不可直接讀寫(xiě)的程序存儲(chǔ)器RAM_A區(qū)中搬移程序代碼到數(shù)據(jù)區(qū);
(25)搬移完成后通過(guò)校驗(yàn)算法動(dòng)態(tài)生成RAM_A區(qū)搬移程序代碼的校驗(yàn)參數(shù);
(26)通過(guò)余存儲(chǔ)方法將校驗(yàn)和存儲(chǔ)在數(shù)據(jù)RAM中。
所述步驟(3)容錯(cuò)處理A模塊具體實(shí)現(xiàn)過(guò)程如下
(31)搬移功能
查看DMAl通道的程序代碼是否滿(mǎn)足程序搬移條件,如果滿(mǎn)足,則設(shè)置DMAl通道的控制器參數(shù),所述控制器參數(shù)包括源地址、目的地址、DMAl通道的主控和副控寄存器設(shè)置, 源地址設(shè)置為RAM_A區(qū)起始地址,目的地址設(shè)置為數(shù)據(jù)區(qū),啟動(dòng)DMAl通道的主控和副控寄存器進(jìn)行程序搬移,將程序搬移條件設(shè)置為不可搬移,設(shè)置DMAl通道的程序可修復(fù)條件, 搬移工作由DMAl通道自動(dòng)完成,搬移完成后源地址區(qū)程序代碼全部拷貝到目的地址數(shù)據(jù)區(qū);
(32)校驗(yàn)監(jiān)測(cè)功能
a.當(dāng)DMAl通道的搬移功能完成后,進(jìn)行單粒子翻轉(zhuǎn)錯(cuò)誤的檢錯(cuò),通過(guò)校驗(yàn)算法動(dòng)態(tài)生成搬移程序代碼的校驗(yàn)參數(shù),所述校驗(yàn)算法與權(quán)利要求1步驟O)的相一致;
b.對(duì)動(dòng)態(tài)生成的容錯(cuò)處理A模塊的校驗(yàn)參數(shù)進(jìn)行刷新處理,達(dá)到冗余存儲(chǔ)的校驗(yàn)參數(shù)相一致,得到冗余存儲(chǔ)的校驗(yàn)參數(shù);
c.將b步驟的校驗(yàn)參數(shù)和a步驟中的校驗(yàn)參數(shù)相比較,如果不一致,則認(rèn)定發(fā)生了單粒子翻轉(zhuǎn)錯(cuò)誤,達(dá)到監(jiān)測(cè)功能;
(33)糾錯(cuò)功能
a.上述步驟c中比較結(jié)果不一致,則啟動(dòng)DMAl通道的源地址設(shè)置為R0M_A區(qū)起始地址,目的地址設(shè)置為RAM_A區(qū)起始地址;設(shè)置DMAl通道的程序不可修復(fù)條件,通過(guò)DMAl 通道的主控和副控寄存器設(shè)置啟動(dòng)DMAl通道的程序代碼搬移,將R0M_A區(qū)存儲(chǔ)的原始的程序代碼加載到RAM,覆蓋原有異常程序代碼,從而完成單粒子翻轉(zhuǎn)錯(cuò)誤的糾錯(cuò);
b.在糾錯(cuò)完成,設(shè)置DMAl通道為可搬移條件,設(shè)置DMAl通道修復(fù)條件為可修復(fù), 循環(huán)完成對(duì)RAM_A區(qū)程序代碼檢的糾錯(cuò)。
所述步驟(4)容錯(cuò)處理B模塊具體實(shí)現(xiàn)過(guò)程如下
(41)搬移功能
查看DMA2通道的程序代碼是否滿(mǎn)足程序搬移條件,如果滿(mǎn)足,則設(shè)置DMA2通道的控制器參數(shù),所述控制器參數(shù)包括源地址、目的地址、DMA2通道的主控和副控寄存器設(shè)置, 源地址設(shè)置為RAM_B區(qū)起始地址,目的地址設(shè)置為數(shù)據(jù)區(qū),啟動(dòng)DMA2通道的主控和副控寄存器進(jìn)行程序搬移,將程序搬移條件設(shè)置為不可搬移,設(shè)置DMA2通道的程序可修復(fù)條件, 搬移工作由DMA2通道自動(dòng)完成,搬移完成后源地址區(qū)程序代碼全部拷貝到目的地址數(shù)據(jù)區(qū);
(42)校驗(yàn)監(jiān)測(cè)功能
a.當(dāng)DMA2通道的搬移功能完成后,進(jìn)行單粒子翻轉(zhuǎn)錯(cuò)誤的檢錯(cuò),通過(guò)校驗(yàn)算法動(dòng)態(tài)生成搬移程序代碼的校驗(yàn)參數(shù),所述校驗(yàn)算法與權(quán)利要求1步驟O)的相一致;
b.對(duì)動(dòng)態(tài)生成的容錯(cuò)處理B模塊的校驗(yàn)參數(shù)進(jìn)行刷新處理,達(dá)到冗余存儲(chǔ)的校驗(yàn)參數(shù)相一致,得到冗余存儲(chǔ)的校驗(yàn)參數(shù);
c.將b步驟的校驗(yàn)參數(shù)和a步驟中的校驗(yàn)參數(shù)相比較,如果不一致,則認(rèn)定發(fā)生了單粒子翻轉(zhuǎn)錯(cuò)誤,達(dá)到監(jiān)測(cè)功能;
(43)糾錯(cuò)功能
a.上述步驟c中比較結(jié)果不一致,則啟動(dòng)DMAl通道的源地址設(shè)置為R0M_B區(qū)起始地址,目的地址設(shè)置為RAM_B區(qū)起始地址;設(shè)置DMA 2通道的程序不可修復(fù)條件,通過(guò)DMA2 通道的主控和副控寄存器設(shè)置啟動(dòng)DMA 2通道的程序代碼搬移,將R0M_B區(qū)存儲(chǔ)的原始的程序代碼加載到RAM,覆蓋原有異常程序代碼,從而完成單粒子翻轉(zhuǎn)錯(cuò)誤的糾錯(cuò);
b.在糾錯(cuò)完成,設(shè)置DMAl通道為可搬移條件,設(shè)置DMAl通道修復(fù)條件為可修復(fù), 循環(huán)完成對(duì)RAM_A區(qū)程序代碼檢的糾錯(cuò)。
所述步驟O)中的校驗(yàn)算法為異或和校驗(yàn)算法,累加和,或CRC校驗(yàn)法。
所述步驟O)中的冗余存儲(chǔ)為3取2冗余存儲(chǔ)。
本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于
(1)本發(fā)明主要針對(duì)目標(biāo)是CPU不可直接讀寫(xiě)的程序存儲(chǔ)器,采用純軟件實(shí)現(xiàn)了對(duì)該程序存儲(chǔ)器代碼進(jìn)行檢錯(cuò)糾錯(cuò),主要過(guò)程通過(guò)DMA方式進(jìn)行,極少占用CPU時(shí)間,目的是在檢錯(cuò)糾錯(cuò)的同時(shí)能保證程序代碼實(shí)時(shí)運(yùn)行。目前尚未在公開(kāi)文獻(xiàn)中看到利用DMA方式和容錯(cuò)處理雙冗余技術(shù)對(duì)處理器內(nèi)部程序代碼進(jìn)行全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)情況,因此本發(fā)明具有一定的新穎性和創(chuàng)造性,同時(shí)節(jié)省了大量的硬件成本和時(shí)間成本, 提高了效率;
(2)現(xiàn)有技術(shù)主要是應(yīng)用軟件定時(shí)刷新方式或部分軟件重構(gòu)方式進(jìn)行抗單粒子翻轉(zhuǎn)設(shè)計(jì)。該技術(shù)具有局限性,若間隔期設(shè)置長(zhǎng),在間隔期間內(nèi)無(wú)法實(shí)現(xiàn)抗單粒子翻轉(zhuǎn)功能; 若間隔期設(shè)置短,則因頻繁加載又會(huì)影響程序的實(shí)時(shí)運(yùn)行。而本發(fā)明中對(duì)程序存儲(chǔ)器單粒子翻轉(zhuǎn)的檢錯(cuò)糾錯(cuò)時(shí)機(jī)由應(yīng)用程序調(diào)用周期決定,因此本發(fā)明糾錯(cuò)時(shí)機(jī)優(yōu)于現(xiàn)有技術(shù);
(3)現(xiàn)有技術(shù)通過(guò)定時(shí)刷新或軟件重構(gòu)進(jìn)行程序抗單粒子翻轉(zhuǎn),由于存在間隔期, 現(xiàn)有技術(shù)統(tǒng)計(jì)空間單粒子翻轉(zhuǎn)次數(shù)準(zhǔn)確性低,而本發(fā)明由應(yīng)用程序調(diào)用周期決定,統(tǒng)計(jì)單粒子翻轉(zhuǎn)次數(shù)全面,可以為地面下傳豐富的單粒子翻轉(zhuǎn)信息。
圖1為本發(fā)明ROM空間及內(nèi)部存儲(chǔ)器空間映射搬移情況圖2為本發(fā)明的DMA搬移情況圖3為本發(fā)明的容錯(cuò)處理模塊調(diào)用情況圖4為本發(fā)明的容錯(cuò)處理參數(shù)動(dòng)態(tài)生成函數(shù)執(zhí)行情況圖5為本發(fā)明的容錯(cuò)處理A執(zhí)行流程圖6為本發(fā)明的容錯(cuò)處理B執(zhí)行流程圖。
具體實(shí)施方式
以下通過(guò)使用較多的DSP 6X系列處理器來(lái)進(jìn)行具體實(shí)施說(shuō)明。
1、進(jìn)行存儲(chǔ)器地址鏈接配置
DSP處理器芯片復(fù)位后,根據(jù)存儲(chǔ)器映射關(guān)系,采用ROM加載模式,通過(guò)處理器芯片將ROM空間的代碼全部搬移到程序存儲(chǔ)器空間地址上。如
圖1所示。
加載地址分段對(duì)應(yīng)情況R0M_B區(qū)放置包括所有應(yīng)用程序的程序代碼,及容錯(cuò)處理參數(shù)生成模塊和容錯(cuò)處理A模塊的程序代碼,程序運(yùn)行時(shí)加載在對(duì)應(yīng)程序存儲(chǔ)器RAM_B 區(qū),;R0M_A區(qū)放置容錯(cuò)處理B模塊的程序代碼,程序運(yùn)行時(shí)加載到對(duì)應(yīng)程序存儲(chǔ)器RAM_A 區(qū),R0M_B區(qū)和R0M_A區(qū)根據(jù)各自所裝載程序量的大小來(lái)確定。
2、容錯(cuò)處理參數(shù)生成
容錯(cuò)處理參數(shù)生成模塊在CPU復(fù)位或上電時(shí)僅進(jìn)行一次動(dòng)態(tài)參數(shù)產(chǎn)生,該設(shè)計(jì)使得冗余糾錯(cuò)程序最大程度的模塊化。容錯(cuò)處理參數(shù)生成模塊的調(diào)用情況為void xor_ init(UNIT32*pAddl, UNIT32 * pAdd2, UNIT32pPro_lenl, UNIT32 pPro_len2),其中 pAddl 為RAM_A區(qū)起始地址,其中pAdd2為RAM_B區(qū)起始地址,pPro_lenl為RAM_A區(qū)代碼長(zhǎng)度、 pPro_len2為RAM_B區(qū)代碼長(zhǎng)度,調(diào)用過(guò)程如
圖3所示。容錯(cuò)處理參數(shù)生成模塊執(zhí)行情況如
圖4所示,主要進(jìn)行以下過(guò)程
(1)首先設(shè)置DMAl通道,源地址為RAM_A區(qū)起始地址,目的地址為數(shù)據(jù)區(qū)數(shù)組地址 &xor_ram_data_sig,設(shè)置DMAl主控、副控寄存器,啟動(dòng)DMAl通道,從CPU不可直接進(jìn)行讀寫(xiě)的程序存儲(chǔ)器RAM_A區(qū)中搬移程序代碼到數(shù)據(jù)區(qū);
(2)搬移完成后計(jì)算RAM_A區(qū)搬移程序代碼的校驗(yàn)參數(shù),采用的校驗(yàn)算法為異或和校驗(yàn)算法(也可以采用累加和,或CRC校驗(yàn)法計(jì)算校驗(yàn)參數(shù));
(3)通過(guò)3取2冗余存儲(chǔ)方法將校驗(yàn)參數(shù)存儲(chǔ)在數(shù)據(jù)RAM中Xor_Single_Sum ;
(4)設(shè)置DMA2通道,源地址為RAM_B區(qū)起始地址,目的地址為數(shù)據(jù)區(qū)數(shù)組地址 &xor_ram_data_sig,設(shè)置DMA2主控、副控寄存器,啟動(dòng)DMA2通道,從CPU不可直接進(jìn)行讀寫(xiě)的程序存儲(chǔ)器RAM_B區(qū)中搬移程序代碼到數(shù)據(jù)區(qū);
(5)搬移完成后計(jì)算RAM_B區(qū)搬移程序代碼的校驗(yàn)參數(shù),采用的校驗(yàn)算法為異或和校驗(yàn)算法(也可以采用累加和,或CRC校驗(yàn)法計(jì)算校驗(yàn)參數(shù));
(6)通過(guò)3取2冗余存儲(chǔ)方法將校驗(yàn)參數(shù)存儲(chǔ)在數(shù)據(jù)RAM中Xor_Al l_Sum ;
3、容錯(cuò)處理A模塊執(zhí)行
應(yīng)用程序代碼周期性調(diào)用容錯(cuò)處理A模塊,容錯(cuò)處理A模塊的調(diào)用參數(shù)情況為 void sig_code_To_Ram(UNIT32 * pAddl,UNIT32 pPro_lenl),參數(shù)情況:pAddl 為 RAM_A 區(qū)代碼起始地址、pftx)_lenl為RAM_A區(qū)代碼長(zhǎng)度,調(diào)用過(guò)程如
圖3所示。容錯(cuò)處理 A模塊執(zhí)行情況如
圖5所示,功能實(shí)現(xiàn)包括程序代碼搬移、校驗(yàn)監(jiān)測(cè)、糾錯(cuò),具體實(shí)現(xiàn)過(guò)程如下
(1)程序代碼搬移
a.查看DMAl通道的程序代碼是否滿(mǎn)足程序搬移條件(設(shè)置OxAA為滿(mǎn)足,且初始化第一次為OxAA),如果滿(mǎn)足,則設(shè)置DMAl通道的控制器參數(shù),源地址設(shè)置為RAM_A區(qū)起始地址,目的地址設(shè)置為數(shù)據(jù)區(qū),啟動(dòng)DMAl通道的主控和副控寄存器進(jìn)行程序搬移,將程序搬移條件設(shè)置為不可搬移(設(shè)置為0x0),
b.設(shè)置DMA 1通道的程序可修復(fù)條件(設(shè)置為OxAA),搬移工作由DMAl通道自動(dòng)完成,搬移完成后源地址區(qū)程序代碼全部拷貝到目的地址數(shù)據(jù)區(qū);
(2)程序代碼校驗(yàn)監(jiān)測(cè)
a.當(dāng)DMAl通道的搬移功能完成后,通過(guò)校驗(yàn)算法動(dòng)態(tài)生成RAM_Ag搬移程序代碼的校驗(yàn)參數(shù),采用的校驗(yàn)算法為異或和校驗(yàn)算法(也可以采用累加和,或CRC校驗(yàn)法計(jì)算校驗(yàn)參數(shù)),保證本步驟校驗(yàn)算法與容錯(cuò)處理參數(shù)生成時(shí)的校驗(yàn)算法一致;
b.對(duì)動(dòng)態(tài)生成的容錯(cuò)處理A模塊的校驗(yàn)參數(shù)Xor_Single_Sum進(jìn)行刷新處理,達(dá)到冗余存儲(chǔ)的校驗(yàn)參數(shù)相一致,得到冗余存儲(chǔ)的校驗(yàn)參數(shù);
c.將b步驟的校驗(yàn)參數(shù)和a步驟中的校驗(yàn)參數(shù)相比較,如果不一致,則認(rèn)定發(fā)生了單粒子翻轉(zhuǎn)錯(cuò)誤,達(dá)到監(jiān)測(cè)功能;
(3)程序代碼糾錯(cuò)
a.上述步驟c中比較結(jié)果不一致,則啟動(dòng)DMAl通道的源地址設(shè)置為R0M_A區(qū)起始地址,目的地址設(shè)置為RAM_A區(qū)起始地址;設(shè)置DMA 1通道的程序不可修復(fù)條件(設(shè)置為 0x0),通過(guò)DMAl通道的主控和副控寄存器設(shè)置啟動(dòng)DMA 1通道的程序代碼搬移,將R0M_A 區(qū)存儲(chǔ)的原始的程序代碼加載到RAM,覆蓋原有異常程序代碼,從而完成單粒子翻轉(zhuǎn)錯(cuò)誤的糾錯(cuò);
b.在糾錯(cuò)完成,設(shè)置DMAl通道為可搬移條件(設(shè)置為OxAA),設(shè)置DMAl通道修復(fù)條件為可修復(fù)(設(shè)置為OxAA),循環(huán)完成對(duì)RAM_A區(qū)程序代碼檢的糾錯(cuò)。
4、容錯(cuò)處理B模塊執(zhí)行
應(yīng)用程序代碼周期性調(diào)用容錯(cuò)處理B模塊,容錯(cuò)處理B模塊的調(diào)用參數(shù)情況為 void all_code_To_Ram (UNIT32 * pAdd2,UNIT32 pPro_len2),參數(shù)情況pAdd2 為 RAM_B 區(qū)代碼起始地址、pftx)_len2為RAM_B區(qū)代碼長(zhǎng)度,調(diào)用過(guò)程如
圖3所示。容錯(cuò)處理 B模塊執(zhí)行情況如
圖6所示,功能實(shí)現(xiàn)包括程序代碼搬移、校驗(yàn)監(jiān)測(cè)、糾錯(cuò),具體實(shí)現(xiàn)過(guò)程如下
(1)程序代碼搬移
a.查看DMA2通道的程序代碼是否滿(mǎn)足程序搬移條件(設(shè)置OxAA為滿(mǎn)足,且初始化第一次為OxAA),如果滿(mǎn)足,則設(shè)置DMA2通道的控制器參數(shù),源地址設(shè)置為RAM_B區(qū)起始地址,目的地址設(shè)置為數(shù)據(jù)區(qū),啟動(dòng)DMA2通道的主控和副控寄存器進(jìn)行程序搬移,將程序搬移條件設(shè)置為不可搬移(設(shè)置為0x0),
b.設(shè)置DMA 2通道的程序可修復(fù)條件(設(shè)置為OxAA),搬移工作由DMA2通道自動(dòng)完成,搬移完成后源地址區(qū)程序代碼全部拷貝到目的地址數(shù)據(jù)區(qū);
(2)程序代碼校驗(yàn)監(jiān)測(cè)
a.當(dāng)DMA2通道的搬移功能完成后,通過(guò)校驗(yàn)算法動(dòng)態(tài)生成搬移程序代碼的校驗(yàn)參數(shù),采用的校驗(yàn)算法為異或和校驗(yàn)算法(也可以采用累加和,或CRC校驗(yàn)法計(jì)算校驗(yàn)參數(shù)),保證本步驟校驗(yàn)算法與容錯(cuò)處理參數(shù)生成時(shí)的校驗(yàn)算法一致;
b.對(duì)動(dòng)態(tài)生成的容錯(cuò)處理B模塊的校驗(yàn)參數(shù)Xor_All_Sum進(jìn)行刷新處理,達(dá)到冗余存儲(chǔ)的校驗(yàn)參數(shù)相一致,得到冗余存儲(chǔ)的校驗(yàn)參數(shù);
c.將b步驟的校驗(yàn)參數(shù)和a步驟中的校驗(yàn)參數(shù)相比較,如果不一致,則認(rèn)定發(fā)生了單粒子翻轉(zhuǎn)錯(cuò)誤,達(dá)到監(jiān)測(cè)功能;
(3)程序代碼糾錯(cuò)
a.上述步驟c中比較結(jié)果不一致,則啟動(dòng)DMA2通道的源地址設(shè)置為R0M_B區(qū)起始地址,目的地址設(shè)置為RAM_B區(qū)起始地址;設(shè)置DMA 2通道的程序不可修復(fù)條件(設(shè)置為 0x0),通過(guò)DMA2通道的主控和副控寄存器設(shè)置啟動(dòng)DMA 2通道的程序代碼搬移,將R0M_B 區(qū)存儲(chǔ)的原始的程序代碼加載到RAM,覆蓋原有異常程序代碼,從而完成單粒子翻轉(zhuǎn)錯(cuò)誤的糾錯(cuò);
b.在糾錯(cuò)完成,設(shè)置DMA2通道為可搬移條件(設(shè)置為OxAA),設(shè)置DMA2通道修復(fù)條件為可修復(fù)(設(shè)置為OxAA),循環(huán)完成對(duì)RAM_B區(qū)程序代碼檢的糾錯(cuò)。
上述內(nèi)容以DSP內(nèi)部RAM代碼區(qū)介紹了對(duì)RAM區(qū)單粒子翻轉(zhuǎn)的檢錯(cuò)、糾錯(cuò)功能,實(shí)際上通過(guò)改變參數(shù)輸入,該方法適用于所有RAM區(qū)代碼、數(shù)據(jù)的檢錯(cuò)糾錯(cuò),對(duì)數(shù)據(jù)區(qū)常數(shù)的糾錯(cuò)。對(duì)應(yīng)用程序代碼較大的情況,可進(jìn)行分段糾檢錯(cuò),以保證應(yīng)用程序代碼運(yùn)行的實(shí)時(shí)性,同時(shí)達(dá)到對(duì)代碼的單粒子翻轉(zhuǎn)檢錯(cuò)、糾錯(cuò)的目的。
權(quán)利要求
1.可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特征在于包括存儲(chǔ)器地址鏈接配置、容錯(cuò)處理參數(shù)生成模塊、容錯(cuò)處理A模塊和容錯(cuò)處理B模塊的執(zhí)行,步驟如下(1)存儲(chǔ)器地址鏈接配置將存儲(chǔ)器地址分成R0M_A區(qū)、R0M_B,根據(jù)編譯鏈接分別對(duì)應(yīng)程序存儲(chǔ)器的RAM_A,RAM_ B ;所述R0M_A區(qū)只放置容錯(cuò)處理B模塊的程序代碼,所述R0M_B區(qū)放置所有應(yīng)用程序的程序代碼,及容錯(cuò)處理參數(shù)生成模塊和容錯(cuò)處理A模塊的程序代碼;(2)容錯(cuò)處理參數(shù)生成模塊通過(guò)DMA的兩個(gè)通道DMAl和DMA2分別將RAM_A,RAM_B的程序代碼搬移到程序代碼對(duì)應(yīng)的數(shù)據(jù)區(qū),通過(guò)校驗(yàn)算法動(dòng)態(tài)生成容錯(cuò)處理A模塊和容錯(cuò)處理B模塊所有的校驗(yàn)參數(shù),并分別對(duì)校驗(yàn)參數(shù)進(jìn)行冗余存儲(chǔ);(3)容錯(cuò)處理A模塊容錯(cuò)處理A用于自主實(shí)時(shí)監(jiān)測(cè)程序存儲(chǔ)器RAM_A區(qū)內(nèi)程序代碼的運(yùn)行,一旦該程序代碼發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤,則記錄所述錯(cuò)誤信息,并啟動(dòng)糾錯(cuò)功能,從R0M_A中讀取程序代碼覆蓋RAM_A區(qū)程序代碼,保證RAM_A區(qū)程序代碼安全健康運(yùn)行;(4)容錯(cuò)處理B模塊容錯(cuò)處理B用于自主實(shí)時(shí)監(jiān)測(cè)程序存儲(chǔ)器RAM_B區(qū)內(nèi)程序代碼的運(yùn)行,一旦該程序代碼發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤,則記錄所述錯(cuò)誤信息,并啟動(dòng)糾錯(cuò)功能,從R0M_B中讀取程序代碼覆蓋RAM_B區(qū)程序代碼,保證RAM_B區(qū)程序代碼安全健康運(yùn)行;(5)獲取上述步驟(1)存儲(chǔ)器R0M_A區(qū)、RAM_A區(qū)的起始地址、存儲(chǔ)器R0M_B區(qū)、RAM_B 區(qū)的起始地址,讀取通過(guò)編譯鏈接后的生成的MAP表中程序代碼信息,查看RAM_A區(qū)、RAM_ B區(qū)的程序代碼長(zhǎng)度,將這些信息作為容錯(cuò)處理參數(shù)生成模塊、容錯(cuò)處理A模塊和容錯(cuò)處理 B模塊中的實(shí)參予以調(diào)用,從而全面在線(xiàn)實(shí)現(xiàn)整個(gè)程序代碼單粒子翻轉(zhuǎn)錯(cuò)誤的檢錯(cuò)糾錯(cuò)。
2.根據(jù)權(quán)利要求1所述的可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特征在于所述步驟O)的具體實(shí)現(xiàn)過(guò)程如下(21)首先啟動(dòng)DMAl通道,從CPU不可直接讀寫(xiě)的程序存儲(chǔ)器RAM_B區(qū)中搬移程序代碼到數(shù)據(jù)區(qū);(22)搬移完成后通過(guò)校驗(yàn)算法動(dòng)態(tài)生成RAM_B區(qū)搬移程序代碼的校驗(yàn)參數(shù);(23)通過(guò)冗余存儲(chǔ)方法將校驗(yàn)參數(shù)存儲(chǔ)在數(shù)據(jù)RAM中;(24)啟動(dòng)DMA2通道,從CPU不可直接讀寫(xiě)的程序存儲(chǔ)器RAM_A區(qū)中搬移程序代碼到數(shù)據(jù)區(qū);(25)搬移完成后通過(guò)校驗(yàn)算法動(dòng)態(tài)生成RAM_A區(qū)搬移程序代碼的校驗(yàn)參數(shù);(26)通過(guò)余存儲(chǔ)方法將校驗(yàn)和存儲(chǔ)在數(shù)據(jù)RAM中。
3.根據(jù)權(quán)利要求1所述的可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特征在于所述步驟(3)容錯(cuò)處理A模塊具體實(shí)現(xiàn)過(guò)程如下(31)搬移功能查看DMAl通道的程序代碼是否滿(mǎn)足程序搬移條件,如果滿(mǎn)足,則設(shè)置DMAl通道的控制器參數(shù),所述控制器參數(shù)包括源地址、目的地址、DMAl通道的主控和副控寄存器設(shè)置,源地址設(shè)置為RAM_A區(qū)起始地址,目的地址設(shè)置為數(shù)據(jù)區(qū)已定義的地址,啟動(dòng)DMAl通道的主控和副控寄存器進(jìn)行程序搬移,將程序搬移條件設(shè)置為不可搬移,設(shè)置DMA 1通道的程序可修復(fù)條件,搬移工作由DMAl通道自動(dòng)完成,搬移完成后源地址區(qū)程序代碼全部拷貝到目的地址數(shù)據(jù)區(qū);(32)校驗(yàn)監(jiān)測(cè)功能a.當(dāng)DMAl通道的搬移功能完成后,進(jìn)行單粒子翻轉(zhuǎn)錯(cuò)誤的檢錯(cuò),通過(guò)校驗(yàn)算法動(dòng)態(tài)生成搬移程序代碼的校驗(yàn)參數(shù),所述校驗(yàn)算法與權(quán)利要求1步驟O)的相一致;b.對(duì)動(dòng)態(tài)生成的容錯(cuò)處理A模塊的校驗(yàn)參數(shù)進(jìn)行刷新處理,達(dá)到冗余存儲(chǔ)的校驗(yàn)參數(shù)相一致,得到冗余存儲(chǔ)的校驗(yàn)參數(shù);c.將b步驟的校驗(yàn)參數(shù)和a步驟中的校驗(yàn)參數(shù)相比較,如果不一致,則認(rèn)定發(fā)生了單粒子翻轉(zhuǎn)錯(cuò)誤,達(dá)到監(jiān)測(cè)功能;(33)糾錯(cuò)功能a.上述步驟c中比較結(jié)果不一致,則啟動(dòng)DMAl通道的源地址設(shè)置為R0M_A區(qū)起始地址,目的地址設(shè)置為RAM_A區(qū)起始地址;設(shè)置DMA 1通道的程序不可修復(fù)條件,通過(guò)DMAl通道的主控和副控寄存器設(shè)置啟動(dòng)DMA 1通道的程序代碼搬移,將R0M_A區(qū)存儲(chǔ)的原始的程序代碼加載到RAM,覆蓋原有異常程序代碼,從而完成單粒子翻轉(zhuǎn)錯(cuò)誤的糾錯(cuò);b.在糾錯(cuò)完成,設(shè)置DMAl通道為可搬移條件,設(shè)置DMAl通道修復(fù)條件為可修復(fù),循環(huán)完成對(duì)RAM_A區(qū)程序代碼檢的糾錯(cuò)。
4.根據(jù)權(quán)利要求1所述的可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特征在于所述步驟(4)容錯(cuò)處理B模塊具體實(shí)現(xiàn)過(guò)程如下(41)搬移功能查看DMA2通道的程序代碼是否滿(mǎn)足程序搬移條件,如果滿(mǎn)足,則設(shè)置DMA2通道的控制器參數(shù),所述控制器參數(shù)包括源地址、目的地址、DMA2通道的主控和副控寄存器設(shè)置,源地址設(shè)置為RAM_B區(qū)起始地址,目的地址設(shè)置為數(shù)據(jù)區(qū)已定義的地址,啟動(dòng)DMA2通道的主控和副控寄存器進(jìn)行程序搬移,將程序搬移條件設(shè)置為不可搬移,設(shè)置DMA 2通道的程序可修復(fù)條件,搬移工作由DMA2通道自動(dòng)完成,搬移完成后源地址區(qū)程序代碼全部拷貝到目的地址數(shù)據(jù)區(qū);(42)校驗(yàn)監(jiān)測(cè)功能a.當(dāng)DMA2通道的搬移功能完成后,進(jìn)行單粒子翻轉(zhuǎn)錯(cuò)誤的檢錯(cuò),通過(guò)校驗(yàn)算法動(dòng)態(tài)生成搬移程序代碼的校驗(yàn)參數(shù),所述校驗(yàn)算法與權(quán)利要求1步驟O)的相一致;b.對(duì)動(dòng)態(tài)生成的容錯(cuò)處理B模塊的校驗(yàn)參數(shù)進(jìn)行刷新處理,達(dá)到冗余存儲(chǔ)的校驗(yàn)參數(shù)相一致,得到冗余存儲(chǔ)的校驗(yàn)參數(shù);c.將b步驟的校驗(yàn)參數(shù)和a步驟中的校驗(yàn)參數(shù)相比較,如果不一致,則認(rèn)定發(fā)生了單粒子翻轉(zhuǎn)錯(cuò)誤,達(dá)到監(jiān)測(cè)功能;(43)糾錯(cuò)功能a.上述步驟c中比較結(jié)果不一致,則啟動(dòng)DMAl通道的源地址設(shè)置為R0M_B區(qū)起始地址,目的地址設(shè)置為RAM_B區(qū)起始地址;設(shè)置DMA 2通道的程序不可修復(fù)條件,通過(guò)DMA2通道的主控和副控寄存器設(shè)置啟動(dòng)DMA 2通道的程序代碼搬移,將R0M_B區(qū)存儲(chǔ)的原始的程序代碼加載到RAM,覆蓋原有異常程序代碼,從而完成單粒子翻轉(zhuǎn)錯(cuò)誤的糾錯(cuò);b.在糾錯(cuò)完成,設(shè)置DMAl通道為可搬移條件,設(shè)置DMAl通道修復(fù)條件為可修復(fù),循環(huán)完成對(duì)RAM_A區(qū)程序代碼檢的糾錯(cuò)。
5.根據(jù)權(quán)利要求1所述的可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特征在于所述步驟O)中的校驗(yàn)算法為異或和校驗(yàn)算法,累加和,或CRC校驗(yàn)法。
6.根據(jù)權(quán)利要求1所述的可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,其特征在于所述步驟O)中的冗余存儲(chǔ)為3取2冗余存儲(chǔ)。
全文摘要
可全面在線(xiàn)自檢測(cè)單粒子翻轉(zhuǎn)的軟件容錯(cuò)方法,包括存儲(chǔ)器地址鏈接配置、容錯(cuò)處理參數(shù)生成模塊、容錯(cuò)處理A模塊和容錯(cuò)處理B模塊的執(zhí)行,DMA分段讀取程序存儲(chǔ)器數(shù)據(jù)通過(guò)校驗(yàn)算法動(dòng)態(tài)生成容錯(cuò)處理參數(shù)并進(jìn)行冗余存儲(chǔ);容錯(cuò)處理B模塊用于自主實(shí)時(shí)監(jiān)測(cè)應(yīng)用程序和容錯(cuò)處理A模塊的運(yùn)行,容錯(cuò)處理A用于實(shí)時(shí)容錯(cuò)處理B的運(yùn)行,一旦程序發(fā)生單粒子翻轉(zhuǎn),從ROM加載相應(yīng)代碼段,達(dá)到對(duì)應(yīng)用程序代碼糾錯(cuò)的目的,整個(gè)實(shí)現(xiàn)過(guò)程通過(guò)DMA方式進(jìn)行,不占用CPU時(shí)間,在糾錯(cuò)的同時(shí)保證程序?qū)崟r(shí)運(yùn)行,提高了軟件在軌運(yùn)行的可靠性和安全性,同時(shí)節(jié)省了大量的硬件成本和時(shí)間成本,提高了效率。
文檔編號(hào)G06F13/28GK102521062SQ201110387908
公開(kāi)日2012年6月27日 申請(qǐng)日期2011年11月29日 優(yōu)先權(quán)日2011年11月29日
發(fā)明者吳化軍, 吳國(guó)春, 徐麗娜, 林夢(mèng)園, 王一唯, 鐘興旺, 陶曉霞 申請(qǐng)人:西安空間無(wú)線(xiàn)電技術(shù)研究所