一種星載軟件內(nèi)存單粒子實時防護方法
【專利摘要】一種星載軟件內(nèi)存單粒子實時防護方法,在星載軟件運行的空閑時間通過對內(nèi)存中的內(nèi)容與程序存儲器中的相應(yīng)內(nèi)容進(jìn)行比對,判斷其是否被改寫,當(dāng)發(fā)現(xiàn)內(nèi)容被改寫則從程序存儲器中將正確代碼重新寫入內(nèi)存。本發(fā)明方法大大提高了星載軟件產(chǎn)品在軌運行的可靠性和穩(wěn)定性,消除了在軌運行期間單粒子事件的影響,能夠滿足基于內(nèi)存運行的星載電子產(chǎn)品的在軌運行需求,在星載實時嵌入式系統(tǒng)領(lǐng)域具有廣闊的工程應(yīng)用前景和重要的工程應(yīng)用價值。
【專利說明】一種星載軟件內(nèi)存單粒子實時防護方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于衛(wèi)星應(yīng)用領(lǐng)域,涉及一種星載軟件的單粒子防護方法。
【背景技術(shù)】
[0002]“十五”后,各類星載導(dǎo)航設(shè)備的需求急速增長,導(dǎo)航設(shè)備的應(yīng)用范圍也從單純的導(dǎo)航定位,向定軌、相位測量、相對定位和星間時間同步等多方向發(fā)展,同時導(dǎo)航設(shè)備的在軌壽命要求也相應(yīng)提高。因此,星載軟件在軌運行期間的可靠性和穩(wěn)定性對導(dǎo)航設(shè)備能否順利完成任務(wù)起著重要的作用。
[0003]在星載接收機軟件的現(xiàn)有設(shè)計中,已考慮到了對有累計效應(yīng)的全局變量的三備份處理,使用時進(jìn)行三取二判決,但對程序代碼中使用到的常數(shù)缺乏有效的保護。進(jìn)一步考慮至IJ,除了常數(shù)以外,程序代碼也有因單粒子效應(yīng)而被改寫的可能。因此,需要對加載后即不再變更的代碼段、常量和變量初始值等內(nèi)容進(jìn)行實時監(jiān)控,避免其受單粒子事件造成星載軟件長期工作異常的情況。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的技術(shù)解決問題是:克服現(xiàn)有技術(shù)的不足,提供了一種星載軟件內(nèi)存單粒子實時防護設(shè)計方法,提高了軟件的健壯性和可靠性,實用性強,可廣泛應(yīng)用于星載實時嵌入式系統(tǒng)領(lǐng)域。
[0005]本發(fā)明的技術(shù)解決方案是:一種星載軟件內(nèi)存單粒子實時防護方法,步驟如下:
[0006](I)依次讀取程序存儲器FLASH里每個段的信息,如果該段屬于代碼段、常數(shù)段或變量初始值段,則將該段的段長度和段地址信息記錄在監(jiān)控范圍表里;
[0007](2)計算程序存儲器FLASH中記錄在監(jiān)控范圍表內(nèi)的所有數(shù)據(jù)信息的校驗和得到理論校驗和,將理論校驗和在SRAM中進(jìn)行三備份存儲;
[0008](3)星載軟件加載至SRAM運行后,在星載軟件運行空閑時段,依次讀取SRAM中屬于監(jiān)控范圍表監(jiān)控范圍內(nèi)的數(shù)據(jù)段的內(nèi)容并計算校驗和得到實際校驗和;
[0009](4)讀取三份理論校驗和并進(jìn)行三取二表決,將表決結(jié)果與實際校驗和進(jìn)行比較,如果二者一致則判斷未發(fā)生單粒子翻轉(zhuǎn)并結(jié)束本輪監(jiān)控,如果二者不一致則判斷發(fā)生了單粒子翻轉(zhuǎn)并進(jìn)入下一步進(jìn)行修復(fù);
[0010](5)按照監(jiān)控范圍表中的存儲順序,逐字比對SRAM中和程序存儲器FLASH中各數(shù)據(jù)段的數(shù)據(jù)信息,當(dāng)比對不一致時采用FLASH中的內(nèi)容覆蓋SRAM中的相應(yīng)內(nèi)容,直至所有數(shù)據(jù)段比對完成后結(jié)束本輪修復(fù)。
[0011]本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于:
[0012]( I)本發(fā)明方法通過將內(nèi)存中的固定代碼段、常量和變量初始值等內(nèi)容與程序存儲器中相應(yīng)內(nèi)容進(jìn)行逐字對比,實現(xiàn)了星載軟件的SRAM防護;該方法由于每次運行時僅對一個字的內(nèi)容進(jìn)行驗證,運行周期短(為微秒級),對時序要求較低,可在軟件運行的任何需要時段進(jìn)行,具有使用靈活、成本低的等特點;[0013](2)本發(fā)明方法不影響星載設(shè)備原有的功能性能,該方法在運行過程中可以實時監(jiān)控程序代碼是否有受單粒子影響的情況,一經(jīng)發(fā)現(xiàn)則可在運行過程中將受影響的代碼恢復(fù),無需復(fù)位重新加載程序軟件,增加了程序的健壯性;
[0014](3)本發(fā)明方法相對于EDAC糾一檢二,可以適應(yīng)多bit翻轉(zhuǎn),適用性廣泛,實現(xiàn)成本低廉,且不需要具有EDAC功能的SRAM支持;
[0015](4)本發(fā)明方法不需要增加SRAM訪問指令周期,不會改變星載設(shè)備原有功能模塊的運行時序,可靠性高;
[0016](5)本發(fā)明方法通用性好,可以適用于使用同類芯片的任何星載軟件,不受芯片型號、容量等的限制。
【專利附圖】
【附圖說明】
[0017]圖1為本發(fā)明方法的流程圖;
[0018]圖2為本發(fā)明方法中星載軟件加載示意圖;
[0019]圖3為本發(fā)明方法中內(nèi)存監(jiān)控初始化流程圖;
[0020]圖4為本發(fā)明方法中內(nèi)存監(jiān)控流程圖;
[0021]圖5為本發(fā)明方法中內(nèi)存修復(fù)流程圖。
【具體實施方式】
[0022]本發(fā)明方法的核心是在后臺主循環(huán)空閑時刻逐字累加計算內(nèi)存中固定代碼段、常量和變量初始值等內(nèi)容的校驗和,計算完成后與程序初始化時計算的程序存儲器FLASH中的校驗和進(jìn)行對比,判斷其是否一致;若發(fā)現(xiàn)校驗和不一致,說明SRAM中受監(jiān)控的內(nèi)容被改寫了,則進(jìn)入回寫模式,逐字比對FLASH與SRAM的內(nèi)容,二者不一致時將FLASH中的內(nèi)容回寫到SRAM中;若校驗和相同,則繼續(xù)開始下一輪的SRAM內(nèi)存校驗和計算過程。在后臺空閑時刻如此不斷反復(fù),完成對SRAM的監(jiān)控回寫,具體如圖1所示。
[0023]由此可以看出,本發(fā)明方法涉及三個主要環(huán)節(jié),即內(nèi)存監(jiān)控初始化、內(nèi)存監(jiān)控、內(nèi)存修復(fù),其具體方案如下:
[0024]( I)內(nèi)存監(jiān)控初始化
[0025]首先需要建立一張監(jiān)控范圍表,記錄需要監(jiān)控的段信息,包括有多少段需要監(jiān)控,每個段的地址和長度。
[0026]程序存儲器FLASH中的內(nèi)容是按照緊排列的方式分段存放的。每一個段包括段長度、段地址和有效數(shù)據(jù)。軟件在加載時,根據(jù)段長度和段地址將有效數(shù)據(jù)加載到內(nèi)存相應(yīng)的位置,如圖2所示。
[0027]在軟件運行初期,首先依次讀取程序存儲器里每個段的信息,如果該段屬于固定代碼段、常數(shù)段或變量初始值段,則將該段的段長度和段地址信息記錄在監(jiān)控范圍表里,并采用三備份的方式存儲。同時,為了避免頻繁讀取FLASH造成FLASH長期處于加電狀態(tài),計算程序存儲器中受監(jiān)控區(qū)域的所有內(nèi)存數(shù)據(jù)的和校驗,將該和校驗進(jìn)行三備份存儲。具體流程如圖3所示。
[0028](2)內(nèi)存監(jiān)控
[0029]根據(jù)監(jiān)控范圍表里的段信息,依次讀取監(jiān)控范圍內(nèi)內(nèi)存里的內(nèi)容,并進(jìn)行和校驗計算,在所有監(jiān)控區(qū)完成后,當(dāng)和校驗與程序上電時刻計算的和校驗不一致時,進(jìn)入內(nèi)存修復(fù)模式,否則繼續(xù)下一輪內(nèi)存監(jiān)控。具體流程如圖4所示。
[0030](3)內(nèi)存修復(fù)
[0031]根據(jù)監(jiān)控范圍表里的段信息,依次讀取程序存儲器和內(nèi)存里的內(nèi)容進(jìn)行比較,當(dāng)發(fā)現(xiàn)不一致時,將程序存儲器的內(nèi)容寫入內(nèi)存,以達(dá)到內(nèi)存修復(fù)的目的。具體流程如圖5所示,實現(xiàn)步驟如下:
[0032]1.從監(jiān)控范圍表里讀取第一個段的長度,并進(jìn)入下一步;
[0033]2.判斷段長度是否為0,是則回到步驟1,否則進(jìn)入下一步;
[0034]3.從監(jiān)控范圍表里讀取當(dāng)前段地址,讀取指針指向當(dāng)前段有效數(shù)據(jù)的第一個字,并進(jìn)入下一步;
[0035]4.讀取程序存儲器的一個字,與內(nèi)存相應(yīng)地址的一個字進(jìn)行比對,如果不一致,則將程序存儲器里讀取的字寫入內(nèi)存相應(yīng)地址,然后將讀取指針指向當(dāng)前段有效數(shù)據(jù)的下一個字,并進(jìn)入下一步,否則直接將讀取指針指向當(dāng)前段有效數(shù)據(jù)的下一個字,并進(jìn)入下一
I K
少;
[0036]5.判斷當(dāng)前段有效數(shù)據(jù)是否讀完,是則將讀取指針指向下一段起始地址,然后讀取下一個段的長度,并回到步驟2,否則回到步驟4。
[0037]本發(fā)明說明書中未作詳細(xì)描述的內(nèi)容屬本領(lǐng)域技術(shù)人員的公知技術(shù)。
【權(quán)利要求】
1.一種星載軟件內(nèi)存單粒子實時防護方法,其特征在于步驟如下: (1)依次讀取程序存儲器FLASH里每個段的信息,如果該段屬于代碼段、常數(shù)段或變量初始值段,則將該段的段長度和段地址信息記錄在監(jiān)控范圍表里; (2)計算程序存儲器FLASH中記錄在監(jiān)控范圍表內(nèi)的所有數(shù)據(jù)信息的校驗和得到理論校驗和,將理論校驗和在SRAM中進(jìn)行三備份存儲; (3)星載軟件加載至SRAM運行后,在星載軟件運行空閑時段,依次讀取SRAM中屬于監(jiān)控范圍表監(jiān)控范圍內(nèi)的數(shù)據(jù)段的內(nèi)容并計算校驗和得到實際校驗和; (4)讀取三份理論校驗和并進(jìn)行三取二表決,將表決結(jié)果與實際校驗和進(jìn)行比較,如果二者一致則判斷未發(fā)生單粒子翻轉(zhuǎn)并結(jié)束本輪監(jiān)控,如果二者不一致則判斷發(fā)生了單粒子翻轉(zhuǎn)并進(jìn)入下一步進(jìn)行修復(fù); (5)按照監(jiān)控范圍表中的存儲順序,逐字比對SRAM中和程序存儲器FLASH中各數(shù)據(jù)段的數(shù)據(jù)信息,當(dāng)比對不一致時采用FLASH中的內(nèi)容覆蓋SRAM中的相應(yīng)內(nèi)容,直至所有數(shù)據(jù)段比對完成后結(jié)束本輪修復(fù)。
【文檔編號】H04L1/00GK103684688SQ201310612094
【公開日】2014年3月26日 申請日期:2013年11月26日 優(yōu)先權(quán)日:2013年11月26日
【發(fā)明者】李常亮, 陳霄, 郭錦, 郭慧敏, 柳濤, 郝曉鵬 申請人:航天恒星科技有限公司