是存在地址間隔的;所述的三個(gè)不同地址的單元,地址間的差值為固定值,且該固定值應(yīng)大于等于應(yīng)用程序表中所有已定義的完整一套數(shù)據(jù)的合計(jì)長(zhǎng)度,在這一定義中,可以理解為,進(jìn)行冗余存儲(chǔ)后,可以形成三套數(shù)據(jù),這里完整一套數(shù)據(jù),僅指其中的一套,這里的已定義可以理解為整個(gè)應(yīng)用程序中需要I存3的所有的數(shù)據(jù)。;
[0047]統(tǒng)一三取一模塊,用以讀取被存入同一數(shù)據(jù)的三個(gè)地址單元中的數(shù)據(jù),將三個(gè)地址單元中的數(shù)據(jù)進(jìn)行三取二的表決,將占多數(shù)的數(shù)據(jù)的數(shù)值覆蓋寫回占少數(shù)的數(shù)據(jù)的地址單元,這里的覆蓋寫回,指的是將該數(shù)值寫入占少數(shù)的數(shù)據(jù)的地址單元,以覆蓋該地址單元中原先被寫入的數(shù)據(jù);有關(guān)三取二的表決,指的可以是三個(gè)對(duì)應(yīng)地址單元中取出后進(jìn)行兩兩比對(duì),取至少有兩份一致的單元的數(shù)值,并將該數(shù)值覆蓋寫回另一份占少數(shù)的單元。
[0048]統(tǒng)一三存模塊和統(tǒng)一三取二模塊應(yīng)針對(duì)應(yīng)用程序表中定義的全部變量。
[0049]一位錯(cuò)處理模塊,用以響應(yīng)所述存儲(chǔ)單元的檢測(cè)結(jié)果,即被存儲(chǔ)單元調(diào)用啟動(dòng),針對(duì)地址單元中的數(shù)據(jù)存在一位錯(cuò)的情況,通過(guò)EDAC糾正,再將糾正后的數(shù)據(jù)寫回原地址單元;請(qǐng)參考圖2,具體來(lái)說(shuō),判斷錯(cuò)誤數(shù)據(jù)對(duì)應(yīng)的地址寄存器數(shù)值是否位于RAM區(qū)域,如果地址位于RAM區(qū)域,從該地址寄存器指示的地址單元中取出數(shù)據(jù),糾正后再寫回該單元,單比特錯(cuò)誤計(jì)數(shù),清中斷,系統(tǒng)故障狀態(tài)寄存器復(fù)位;一位錯(cuò)處理執(zhí)行結(jié)束后程序指針?lè)祷刂袛喟l(fā)生前的地址繼續(xù)執(zhí)行,不對(duì)處理器進(jìn)行復(fù)位。可見(jiàn),其通過(guò)讀操作,糾正單個(gè)32位單元中的一位錯(cuò),再寫回原地址單元,從而恢復(fù)存儲(chǔ)單元中的數(shù)據(jù)
[0050]多位錯(cuò)處理模塊,用以響應(yīng)所述存儲(chǔ)單元的檢測(cè)結(jié)果,針對(duì)地址單元中的數(shù)據(jù)存在多位錯(cuò)的情況,將該地址單元中的數(shù)據(jù)清零,復(fù)位處理器;具體來(lái)說(shuō),請(qǐng)參考圖3,判斷錯(cuò)誤數(shù)據(jù)對(duì)應(yīng)的地址寄存器數(shù)值是否位于RAM區(qū)域以及陷阱寄存器中陷阱類型值是否為一特定值,在圖3示意的實(shí)施例中,陷阱類型值為9,若位于RAM區(qū)域且陷阱類型值為該特定值,則將該地址單元中的數(shù)據(jù)清零,多比特錯(cuò)誤計(jì)數(shù),系統(tǒng)故障狀態(tài)寄存器復(fù)位。多位錯(cuò)處理執(zhí)行結(jié)束后必須對(duì)處理器進(jìn)行復(fù)位,復(fù)位后統(tǒng)一三取一模塊即可對(duì)應(yīng)用程序變量表進(jìn)行統(tǒng)一三取二 ;可見(jiàn),其將出現(xiàn)多位錯(cuò)的地址單元中的數(shù)據(jù)清零后復(fù)位,再使用三模冗余備份數(shù)據(jù),按三取二恢復(fù)數(shù)據(jù);
[0051]存儲(chǔ)單元,用以對(duì)RAM中存入的數(shù)據(jù)進(jìn)行刷新,讀出并檢測(cè)數(shù)據(jù)是否存在錯(cuò)誤,從而調(diào)用啟動(dòng)所述一位錯(cuò)處理模塊或多位錯(cuò)處理模塊;進(jìn)一步來(lái)說(shuō),一個(gè)存儲(chǔ)單元定期刷新,遍歷讀寫內(nèi)存中全部地址單元,存儲(chǔ)單元通過(guò)中斷調(diào)用啟動(dòng)一位錯(cuò)處理模塊和多位錯(cuò)處理模塊;所述存儲(chǔ)單元定期刷新時(shí)執(zhí)行以下過(guò)程:關(guān)中斷;讀指定地址單元的數(shù)據(jù)到寄存器;然后將寄存器中數(shù)據(jù)再寫回該地址單元;再開中斷;指定地址加I ;
[0052]內(nèi)存初始化模塊,用以對(duì)RAM進(jìn)行內(nèi)存初始化;內(nèi)存初始化必須將RAM中全部單元清零;
[0053]中斷初始化模塊,用以為所述一位錯(cuò)處理模塊和多位錯(cuò)處理模塊配置相應(yīng)的中斷,從而使得所述存儲(chǔ)單元能夠通過(guò)中斷調(diào)用所述一位錯(cuò)處理模塊和多位錯(cuò)處理模塊;由于存儲(chǔ)單元通過(guò)中斷來(lái)調(diào)用一位錯(cuò)處理模塊和多位錯(cuò)處理模塊,所以才需要進(jìn)行中斷的初始化來(lái)為一位錯(cuò)處理模塊和多位錯(cuò)處理模塊配置相應(yīng)的中斷;在一可選的實(shí)施例中,所述的中斷初始化必須至少配置6號(hào)可糾正存儲(chǔ)器錯(cuò)誤中斷和29號(hào)存儲(chǔ)保護(hù)中斷的中斷服務(wù)程序;
[0054]主程序模塊,至少用以依據(jù)時(shí)間以及處理器是否被復(fù)位調(diào)用啟動(dòng)所述統(tǒng)一三存模塊、存儲(chǔ)單元、統(tǒng)一三取一模塊,具體來(lái)說(shuō),就是每隔第一時(shí)間調(diào)用同一三存模塊,每隔第二時(shí)間調(diào)用存儲(chǔ)單元,每隔第三時(shí)間或處理器被復(fù)位后,調(diào)用同一三取一模塊;在本發(fā)明可選的實(shí)施例中,所述的主程序必須至少開放6號(hào)可糾正存儲(chǔ)器錯(cuò)誤中斷和29號(hào)存儲(chǔ)保護(hù)中斷,并處于循環(huán)等待中斷的狀態(tài);
[0055]以及所述應(yīng)用程序變量表,用于按三模冗余存儲(chǔ)應(yīng)用程序所需全局?jǐn)?shù)據(jù),即變量。
[0056]本發(fā)明大部分可選實(shí)施例中,在上電啟動(dòng)后,順序執(zhí)行內(nèi)存初始化和中斷初始化,進(jìn)入主程序,在主程序中分時(shí)調(diào)用統(tǒng)一三存、存儲(chǔ)單元定期刷新和統(tǒng)一三取二模塊,存儲(chǔ)單元定期刷新時(shí)如果處理器檢測(cè)出數(shù)據(jù)錯(cuò)誤,通過(guò)不同異常陷阱入口中斷調(diào)用一位錯(cuò)處理和多位錯(cuò)處理。
[0057]綜上所述,本發(fā)明利用ERC32處理器的異常陷阱機(jī)制,將EDAC和三模冗余兩個(gè)方法結(jié)合起來(lái)使用,軟件定期刷新內(nèi)存,如果出現(xiàn)一位翻轉(zhuǎn),則采用EDAC方式之間糾正錯(cuò)誤,如果出現(xiàn)多位錯(cuò)誤,則首先清除單元中的錯(cuò)誤數(shù)據(jù),并觸發(fā)特定的異常復(fù)位,再通過(guò)三取二恢復(fù)數(shù)據(jù),在底層程序?qū)崿F(xiàn)上對(duì)每個(gè)數(shù)據(jù)統(tǒng)一三存三取,上層應(yīng)用程序不必在使用每個(gè)數(shù)據(jù)前單獨(dú)進(jìn)行三取二,從而降低軟件復(fù)雜程序,提高軟件可靠性。
[0058]為此,一種基于ERC32處理器的內(nèi)存數(shù)據(jù)抗干擾方法可以改變這種不足,這種方法結(jié)合了 EDAC刷新和三取二兩種方法的優(yōu)點(diǎn),同時(shí)也避免了各自存在的缺點(diǎn),既能夠簡(jiǎn)單快速糾正一位錯(cuò)誤,又可以通過(guò)三取二恢復(fù)多位錯(cuò)誤,提高了內(nèi)存數(shù)據(jù)抗干擾的能力。
【主權(quán)項(xiàng)】
1.一種基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)方法,包括: 開始存儲(chǔ)數(shù)據(jù)后: 每隔一第一時(shí)間,將數(shù)據(jù)存儲(chǔ)到RAM中應(yīng)用程序變量表的三個(gè)不同的地址單元;直至所有數(shù)據(jù)均被存儲(chǔ)到三個(gè)保持一定地址間隔的區(qū)域中; 每隔一第二時(shí)間,對(duì)RAM中存入的數(shù)據(jù)進(jìn)行刷新,并檢測(cè)數(shù)據(jù)是否存在錯(cuò)誤;若地址單元中的數(shù)據(jù)存在一位錯(cuò),則通過(guò)EDAC糾正,再將糾正后的數(shù)據(jù)寫回原地址單元;若地址單元中的數(shù)據(jù)存在多位錯(cuò),則將該地址單元中的數(shù)據(jù)清零,復(fù)位處理器; 每隔一第三時(shí)間或處理器被復(fù)位后,讀取被存入同一數(shù)據(jù)的三個(gè)地址單元中的數(shù)據(jù),將三個(gè)地址單元中的數(shù)據(jù)進(jìn)行三取二的表決,將占多數(shù)的數(shù)據(jù)的數(shù)值覆蓋寫回占少數(shù)的數(shù)據(jù)的地址單元。
2.如權(quán)利要求1所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)方法,其特征在于:在開始存儲(chǔ)數(shù)據(jù)之前,還包括對(duì)RAM進(jìn)行內(nèi)存初始化的過(guò)程。
3.如權(quán)利要求1所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)方法,其特征在于:存入同一數(shù)據(jù)的三個(gè)不同的地址單元的地址間差值為固定值。
4.如權(quán)利要求1所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)方法,其特征在于:通過(guò)EDAC糾正,再將糾正后的數(shù)據(jù)寫回原地址單元的過(guò)程至少包括: 判斷錯(cuò)誤數(shù)據(jù)對(duì)應(yīng)的地址寄存器數(shù)值是否位于RAM區(qū)域,若位于RAM區(qū)域中,則從該地址寄存器指示的地址單元中取出數(shù)據(jù),糾正后再寫回。
5.如權(quán)利要求1所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)方法,其特征在于:將該地址單元中的數(shù)據(jù)清零的過(guò)程至少包括: 判斷錯(cuò)誤數(shù)據(jù)對(duì)應(yīng)的地址寄存器數(shù)值是否位于RAM區(qū)域以及陷阱寄存器中陷阱類型值是否為一特定值,若位于RAM區(qū)域且陷阱類型值為該特定值,則將該地址單元中的數(shù)據(jù)清零。
6.如權(quán)利要求1所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)方法,其特征在于:將糾正后的數(shù)據(jù)寫回原地址單元以及將地址單元中的數(shù)據(jù)清零之后,還包括錯(cuò)誤計(jì)數(shù)和系統(tǒng)故障狀態(tài)寄存器復(fù)位的過(guò)程。
7.一種基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)系統(tǒng),其特征在于:包括: 統(tǒng)一三存模塊,用以將數(shù)據(jù)存儲(chǔ)到RAM中應(yīng)用程序變量表的三個(gè)不同的地址單元;直至所有數(shù)據(jù)均被存儲(chǔ)到三個(gè)保持一定地址間隔的區(qū)域中; 統(tǒng)一三取一模塊,用以讀取被存入同一數(shù)據(jù)的三個(gè)地址單元中的數(shù)據(jù),將三個(gè)地址單元中的數(shù)據(jù)進(jìn)行三取二的表決,將占多數(shù)的數(shù)據(jù)的數(shù)值覆蓋寫回占少數(shù)的數(shù)據(jù)的地址單元; 一位錯(cuò)處理模塊,用以針對(duì)地址單元中的數(shù)據(jù)存在一位錯(cuò)的情況,通過(guò)EDAC糾正,再將糾正后的數(shù)據(jù)寫回原地址單元; 多位錯(cuò)處理模塊,用以針對(duì)地址單元中的數(shù)據(jù)存在多位錯(cuò)的情況,將該地址單元中的數(shù)據(jù)清零,復(fù)位處理器; 存儲(chǔ)單元,用以對(duì)RAM中存入的數(shù)據(jù)進(jìn)行刷新,讀出并檢測(cè)數(shù)據(jù)是否存在錯(cuò)誤,從而調(diào)用啟動(dòng)所述一位錯(cuò)處理模塊或多位錯(cuò)處理模塊; 主程序模塊,至少用以依據(jù)時(shí)間以及處理器是否被復(fù)位調(diào)用啟動(dòng)所述統(tǒng)一三存模塊、存儲(chǔ)單元、統(tǒng)一三取一模塊; 以及所述應(yīng)用程序變量表。
8.如權(quán)利要求7所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)系統(tǒng),其特征在于:還包括內(nèi)存初始化模塊,用以對(duì)RAM進(jìn)行內(nèi)存初始化。
9.如權(quán)利要求7所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)系統(tǒng),其特征在于:還包括中斷初始化模塊,用以為所述一位錯(cuò)處理模塊和多位錯(cuò)處理模塊配置相應(yīng)的中斷,從而使得所述存儲(chǔ)單元能夠通過(guò)中斷調(diào)用所述一位錯(cuò)處理模塊和多位錯(cuò)處理模塊。
10.如權(quán)利要求7所述的基于ERC32處理器內(nèi)存數(shù)據(jù)抗干擾的存儲(chǔ)系統(tǒng),其特征在于:所述存儲(chǔ)單元進(jìn)一步用以通過(guò)中斷調(diào)用所述一位錯(cuò)處理模塊和多位錯(cuò)處理模塊;所述存儲(chǔ)單元在對(duì)數(shù)據(jù)進(jìn)行刷新時(shí),進(jìn)一步用以: 關(guān)中斷,讀取指定的地址單元的數(shù)據(jù)到寄存器,然后寫回到地址單元中,再開中斷。
【專利摘要】本發(fā)明利用ERC32處理器的異常陷阱機(jī)制,將EDAC和三模冗余兩個(gè)方法結(jié)合起來(lái)使用,軟件定期刷新內(nèi)存,如果出現(xiàn)一位翻轉(zhuǎn),則采用EDAC方式之間糾正錯(cuò)誤,如果出現(xiàn)多位錯(cuò)誤,則首先清除單元中的錯(cuò)誤數(shù)據(jù),并觸發(fā)特定的異常復(fù)位,再通過(guò)三取二恢復(fù)數(shù)據(jù),在底層程序?qū)崿F(xiàn)上對(duì)每個(gè)數(shù)據(jù)統(tǒng)一三存三取,上層應(yīng)用程序不必在使用每個(gè)數(shù)據(jù)前單獨(dú)進(jìn)行三取二,從而降低軟件復(fù)雜程序,提高軟件可靠性。
【IPC分類】G06F11-10
【公開號(hào)】CN104866387
【申請(qǐng)?zhí)枴緾N201510354852
【發(fā)明人】朱琦, 芮曄, 林挺, 王磊
【申請(qǐng)人】上海航天測(cè)控通信研究所
【公開日】2015年8月26日
【申請(qǐng)日】2015年6月23日