一種數(shù)據(jù)抗干擾保護(hù)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)保護(hù)方法,更具體地涉及一種用于防止電子設(shè)備的存儲(chǔ)單元的數(shù) 據(jù)被誤擦寫的抗干擾保護(hù)方法。
【背景技術(shù)】
[0002] 電子設(shè)備已經(jīng)廣泛應(yīng)用于生產(chǎn)生活的各個(gè)領(lǐng)域,不但提高了生產(chǎn)效率,也讓人們 的生活更加便捷。但是電子設(shè)備在惡劣的電磁環(huán)境下受到干擾,內(nèi)部程序運(yùn)行會(huì)出現(xiàn)失控。 如果電子設(shè)備內(nèi)部的存儲(chǔ)單元處于全開(kāi)放狀態(tài),程序可能對(duì)存儲(chǔ)單元中的數(shù)據(jù)執(zhí)行錯(cuò)誤的 擦除、寫入操作。直接導(dǎo)致電子設(shè)備重新上電后,由于數(shù)據(jù)已被修改,程序無(wú)法正常運(yùn)行。強(qiáng) 干擾可能導(dǎo)致程序跑到有擦寫數(shù)據(jù)的位置,錯(cuò)誤的執(zhí)行了數(shù)據(jù)擦寫操作,導(dǎo)致數(shù)據(jù)被錯(cuò)誤 修改。
[0003] 如圖1所示,有以下幾 種情況可能會(huì)出現(xiàn)存儲(chǔ)單元數(shù)據(jù)被破壞:
[0004] 程序直接飛到第2行代碼的起始地址,當(dāng)p、addr、buf和Ien存儲(chǔ)在內(nèi)存中時(shí),可 能會(huì)修改或擦除任何存儲(chǔ)單元地址空間內(nèi)的數(shù)據(jù);當(dāng)P、addr和Ien為常量時(shí)最有可能會(huì)擦 除P頁(yè),并修改addr地址開(kāi)始的Ien個(gè)字節(jié)的數(shù)據(jù)。
[0005] 程序跑飛后取消了存儲(chǔ)單元寫保護(hù),之后再直接跑飛到第3行、第4行或數(shù)據(jù)擦寫 函數(shù)的內(nèi)部時(shí),存儲(chǔ)單元內(nèi)的數(shù)據(jù)可能會(huì)被破壞。
[0006] 總的來(lái)說(shuō),上面的代碼出現(xiàn)的次數(shù)越多,數(shù)據(jù)被誤擦寫的概率越大。這個(gè)程序最大 的問(wèn)題是存儲(chǔ)單元解鎖和擦寫可以直接順序執(zhí)行。 Ic py
[0007] 程序失控后可能誤擦除的概率為f X f ? Ep,其中Pa為MCU的指令尋址空間 的大?。▎挝粸樽止?jié)),Ic為可能引起誤擦除的指令條數(shù)。Pc為可能出現(xiàn)的參數(shù)情況, 如程序中每個(gè)參數(shù)的長(zhǎng)度為8bit,則所有參數(shù)的取值范圍在0?255之間,有256個(gè)值, 則Pc為256。Pv為可以被擦寫的扇區(qū)數(shù)。Ep為誤擦除的概率。假設(shè)某電子設(shè)備中有一 條擦除指令,且Pa為65536, Pv為94, Pc為256,則程序失控后可能被誤擦除的概率為 --X - ? ---。 6SS36 256 17848.1.
[0008] 程序失控后誤寫數(shù)據(jù)的概率為? Ep,其中Pa、Pc、Pv的定義與上面相同, Ic為可能引起誤寫的指令條數(shù),Ep為誤寫的概率。若程序中有一條寫入指令,且Pa為 1 48640 1 65536, Pv為48640, Pc為65536時(shí),則程序失控后誤寫概率為X
[0009] 以上僅是極限情況下存儲(chǔ)單元誤操作的概率,實(shí)際概率應(yīng)與結(jié)合程序的執(zhí) 行邏輯進(jìn)行判斷,如在實(shí)際情況下調(diào)用了 4次(包含被封裝后的調(diào)用次數(shù))上述代 碼,有1個(gè)封裝接口,且在封裝的內(nèi)部有2次調(diào)用擦寫接口,封裝后的接口被調(diào)用 了 10次。最終跑飛后存儲(chǔ)單元被誤擦的概率為^$Χ(4 +10 X 2)= I 94 被誤寫的概率(4 +10 X 2) = ^,存儲(chǔ)單元數(shù)據(jù)被破壞的概率為 "誤?概率+誤寫概率" =I^iT +i^T。
[0010] 即程序可能直接跑飛到解鎖處執(zhí)行擦寫,也可能跑飛到封裝后的調(diào)用處,最終也 可能導(dǎo)致存儲(chǔ)單元被誤擦除。
【發(fā)明內(nèi)容】
[0011] 針對(duì)上述問(wèn)題,本發(fā)明的目的是提供一種數(shù)據(jù)抗干擾保護(hù)方法,使電子設(shè)備受干 擾程序失控后,檢測(cè)到程序跑飛,并保護(hù)程序參數(shù)和程序代碼本身不被破壞。
[0012] 本發(fā)明所述數(shù)據(jù)抗干擾保護(hù)方法包括:
[0013] 步驟一、分區(qū)保護(hù),將儲(chǔ)存數(shù)據(jù)的存儲(chǔ)單元分成若干個(gè)單獨(dú)控制其擦寫權(quán)限的分 區(qū);
[0014] 步驟二、設(shè)置擦寫程序的狀態(tài)機(jī),在針對(duì)所述分區(qū)執(zhí)行擦寫程序的每個(gè)命令前檢 查其狀態(tài)值是否為預(yù)設(shè)狀態(tài)值,是則,執(zhí)行命令并更新?tīng)顟B(tài)值;否則,程序運(yùn)行出現(xiàn)錯(cuò)誤,程 序進(jìn)入死循環(huán)直至設(shè)備復(fù)位。
[0015] 優(yōu)選地,所述分區(qū)設(shè)置有三種狀態(tài),即保護(hù)狀態(tài)、未保護(hù)狀態(tài)以及鎖定狀態(tài)。
[0016] 優(yōu)選地,所述保護(hù)狀態(tài)指:處于該狀態(tài)下的存儲(chǔ)單元區(qū)域不能直接進(jìn)行擦、寫操 作,若要進(jìn)行擦、寫操作必須先取消寫保護(hù);
[0017] 所述未保護(hù)狀態(tài)指:處于該狀態(tài)下的存儲(chǔ)單元區(qū)域可進(jìn)行任意擦、寫操作:
[0018] 所述鎖定狀態(tài)指:處于該狀態(tài)下的存儲(chǔ)單元區(qū)域在設(shè)備復(fù)位之前不能再進(jìn)行任何 擦、寫操作。
[0019] 優(yōu)選地,所述數(shù)據(jù)抗干擾保護(hù)方法還包括首先對(duì)儲(chǔ)存單元中的數(shù)據(jù)進(jìn)行分區(qū)保護(hù) 初始化,具體包括:
[0020] A、將程序數(shù)據(jù)和參數(shù)數(shù)據(jù)存儲(chǔ)至不同分區(qū);
[0021] B、將所述程序數(shù)據(jù)所在分區(qū)設(shè)置為鎖定狀態(tài);
[0022] C、將參數(shù)數(shù)據(jù)所在分區(qū)設(shè)置為保護(hù)狀態(tài)。
[0023] 優(yōu)選地,設(shè)置擦寫程序的狀態(tài)機(jī)包括對(duì)狀態(tài)機(jī)進(jìn)行初始化,具體包括:
[0024] A、將狀態(tài)機(jī)的初始狀態(tài)值p設(shè)置為0 ;
[0025] B、檢查初始狀態(tài)值p是否為0,是則,程序正常運(yùn)行,更新?tīng)顟B(tài)值為1,執(zhí)行下一命 令;否則,程序運(yùn)行錯(cuò)誤,程序進(jìn)入死循環(huán)直至設(shè)備復(fù)位。
[0026] 優(yōu)選地,所述數(shù)據(jù)抗干擾保護(hù)方法,包括首先對(duì)儲(chǔ)存數(shù)據(jù)的儲(chǔ)存單元進(jìn)行初始化 保護(hù),具體包括:
[0027] 步驟一、將狀態(tài)機(jī)初始狀態(tài)值p設(shè)置為0 ;
[0028] 步驟二、將程序數(shù)據(jù)所在分區(qū)設(shè)置為鎖定狀態(tài),則在設(shè)備復(fù)位前,該扇區(qū)數(shù)據(jù)不能 進(jìn)行任何擦、寫操作;
[0029] 步驟三、將儲(chǔ)存參數(shù)數(shù)據(jù)所在分區(qū)設(shè)置為保護(hù)狀態(tài),解除保護(hù)前,無(wú)法對(duì)相應(yīng)數(shù)據(jù) 進(jìn)行擦、寫操作;
[0030] 步驟四、檢查初始狀態(tài)值P是否為0 ;是則,程序正常運(yùn)行,更新?tīng)顟B(tài)值為1,執(zhí)行下 一命令;否則,程序運(yùn)行錯(cuò)誤,此后程序進(jìn)入死循環(huán)直至設(shè)備復(fù)位。
[0031] 優(yōu)選地,所述數(shù)據(jù)抗干擾保護(hù)方法還包括在初始化后,進(jìn)行擦寫程序時(shí)對(duì)儲(chǔ)存單 元的數(shù)據(jù)進(jìn)行保護(hù),具體包括:
[0032] 步驟一、檢查當(dāng)前狀態(tài)機(jī)的狀態(tài)值p
[0033] 步驟二、檢查狀態(tài)值p是否為預(yù)設(shè)狀態(tài)值;是,則進(jìn)行步驟三,否則跳到步驟九;
[0034] 步驟三、取消所述指定分區(qū)參數(shù)保護(hù);
[0035] 步驟四、更新?tīng)顟B(tài)值為p+1 ;
[0036] 步驟五、關(guān)閉軟件鎖;
[0037] 步驟六、檢查狀態(tài)值p+1是否為預(yù)設(shè)狀態(tài)值;是,則進(jìn)行步驟七,否則跳到步驟九;
[0038] 步驟七、修改指定參數(shù);
[0039] 步驟八、打開(kāi)軟件鎖;
[0040] 步驟九、打開(kāi)軟件鎖;
[0041] 步驟十、開(kāi)啟指定分區(qū)保護(hù)。
[0042] 本發(fā)明所述數(shù)據(jù)抗干擾保護(hù)方法采用"狀態(tài)機(jī)+分區(qū)保護(hù)"兩級(jí)保護(hù)的方式對(duì)于 程序進(jìn)行保護(hù),
[0043] 其中,分區(qū)保護(hù)是將存儲(chǔ)單元分為若干個(gè)可以單獨(dú)控制其擦寫權(quán)限的區(qū)域,每個(gè) 區(qū)域有三種狀態(tài),即保護(hù)狀態(tài)、未保護(hù)狀態(tài)和鎖定狀態(tài)。
[0044] 保護(hù)狀態(tài):處于該狀態(tài)下的存儲(chǔ)單元區(qū)域不能直接進(jìn)行擦、寫操作,若要進(jìn)行擦、 寫操作必須先取消寫保護(hù);
[0045] 未保護(hù)狀態(tài):處于該狀態(tài)下的存儲(chǔ)單元區(qū)域可進(jìn)行任意擦、寫操作;
[0046] 鎖定狀態(tài):處于該狀態(tài)下的存儲(chǔ)單元區(qū)域在設(shè)備復(fù)位之前不能再進(jìn)行任何擦、寫 操作。
[0047] 所述狀態(tài)機(jī)主要記錄程序的執(zhí)行流程,即狀態(tài)機(jī)每前進(jìn)一個(gè)狀態(tài)必須進(jìn)行嚴(yán)格的 狀態(tài)檢查,只要發(fā)現(xiàn)狀態(tài)機(jī)異常就死循環(huán)。最后在取消寫保護(hù)和進(jìn)行擦寫時(shí)必須進(jìn)行狀態(tài) 機(jī)的合法性檢查,僅當(dāng)狀態(tài)機(jī)合法時(shí)才允許執(zhí)行取消寫保護(hù)和擦寫操作。
[0048] 在其中一個(gè)實(shí)施例中,程序開(kāi)始運(yùn)行后,首先根據(jù)狀態(tài)機(jī)+分區(qū)保護(hù)法對(duì)存儲(chǔ)單 元進(jìn)行初始化保護(hù),步驟如下所示:
[0049] 將狀態(tài)機(jī)參數(shù)p設(shè)置為0。
[0050] 將程序數(shù)據(jù)所在扇區(qū)設(shè)置為鎖定狀態(tài),則在設(shè)備復(fù)位前,該扇區(qū)數(shù)據(jù)不能進(jìn)行任 何擦、寫操作。
[0051] 將存儲(chǔ)參數(shù)數(shù)據(jù)的扇區(qū)設(shè)置為保護(hù)狀態(tài),解除保護(hù)前,無(wú)法對(duì)相應(yīng)數(shù)據(jù)進(jìn)行擦、寫 操作。
[0052] 來(lái)檢查狀態(tài)機(jī)p是否為0。如果符合,證明程序正常運(yùn)行,將狀態(tài)機(jī)設(shè)置為1,執(zhí)行 下一命令。反之,說(shuō)明程序運(yùn)行錯(cuò)誤,此后程序進(jìn)入死循環(huán)直至設(shè)備復(fù)位。
[0053] 在其中一個(gè)實(shí)施例中,當(dāng)對(duì)存儲(chǔ)單元中的參量進(jìn)行修改時(shí),步驟如下所示:
[0054] 1、檢查設(shè)置狀態(tài)機(jī)p
[0055] 2、檢查狀態(tài)機(jī)p是否在合理范圍內(nèi)。如果正確,執(zhí)行步驟3-5,否則跳到步驟9。
[0056] 3、取消指定扇區(qū)參數(shù)保護(hù);
[0057] 4、檢查設(shè)置狀態(tài)機(jī)p ;
[0058] 5、關(guān)閉軟件鎖;
[0059] 6、檢查狀態(tài)機(jī)p是否在合理范圍內(nèi)。如果正確,執(zhí)行步驟7-8,否則跳到步驟9。
[0060] 7、修改指定參數(shù);
[0061] 8、打開(kāi)軟件鎖;
[0062] 9、打開(kāi)軟件鎖;
[0063] 10、開(kāi)啟指定扇區(qū)保護(hù)。
[0064] 其中,檢查設(shè)置狀態(tài)機(jī)p的步驟中,首先檢查狀態(tài)機(jī)是否為函數(shù)輸入值P。如果正 確,說(shuō)明程序正常運(yùn)行,將P設(shè)置為P+1后執(zhí)行下一命令。否則,說(shuō)明程序失控,此后程序進(jìn) 入死循環(huán),直到程序復(fù)位。
【附圖說(shuō)明】
[0065] 圖1示出了本發(fā)明現(xiàn)有技術(shù)中所述未加保護(hù)的擦寫程序代碼;
[0066] 圖2示出了本發(fā)明其中一個(gè)實(shí)施例中所述數(shù)據(jù)抗干擾保護(hù)方法的分區(qū)保護(hù)的示 意圖;
[0067] 圖3示出了本發(fā)明其中一個(gè)實(shí)施例中所述數(shù)據(jù)抗干擾保護(hù)方法的初始化流程示 意圖;
[0068] 圖4示出了本發(fā)明其中一個(gè)實(shí)施例中所述數(shù)據(jù)抗干擾保護(hù)方法的擦寫操作保護(hù) 的流程示意圖;
[0069] 圖5示出了本發(fā)明其中一個(gè)實(shí)施例中所述數(shù)據(jù)抗干擾保護(hù)方法的部分擦寫操作 代碼。
【具體實(shí)施方式】
[0070] 下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明,以令本領(lǐng)域技術(shù)人員參照說(shuō)明書文 字能夠據(jù)以實(shí)施。
[0071] 本發(fā)明所述數(shù)據(jù)抗干擾保護(hù)方法采用"狀態(tài)機(jī)+分區(qū)保護(hù)"兩級(jí)保護(hù)的方式對(duì)程 序進(jìn)行保護(hù),
[0072] 其中,分區(qū)保護(hù)是將存儲(chǔ)單元分為若干個(gè)可以單獨(dú)控制其擦寫權(quán)限的區(qū)域,每個(gè) 區(qū)域有三種狀態(tài),即保護(hù)狀態(tài)、未保護(hù)狀態(tài)和鎖定狀態(tài)。