兩種“軟件陷阱技術(shù)”的比較
發(fā)布時(shí)間:2008/8/20 0:00:00 訪問次數(shù):410
單片機(jī)應(yīng)用系統(tǒng)的抗干擾具體可分為軟件和硬件兩方面,其中,軟件抗干擾以其設(shè)計(jì)靈活、節(jié)省硬件資源、降低成本等優(yōu)勢越來越得到廣泛采用。軟件抗干擾技術(shù)主要有“指令冗余技術(shù)”、“軟件陷阱技術(shù)”、“軟件看門狗技術(shù)”、“數(shù)字濾波技術(shù)”等。本文就軟件陷阱技術(shù)對單片機(jī)應(yīng)用系統(tǒng)抗干擾的原理與具體實(shí)現(xiàn)方法進(jìn)行探討和研究,給出實(shí)現(xiàn)軟件陷阱技術(shù)的兩種形式,并將該技術(shù)成功地使用在多個實(shí)際的單片機(jī)應(yīng)用系統(tǒng)中,保證系統(tǒng)的可靠運(yùn)行。
1 程序跑飛和軟件陷阱技術(shù)概述
程序正常運(yùn)行時(shí),程序計(jì)數(shù)器pc始終指向正在執(zhí)行的這條指令的下一條指令的第一個字節(jié)的程序存儲器單元地址,這樣就保證了單片機(jī)能夠正確地讀取每一條指令的各個字節(jié),即cpu先讀取操作碼,再讀取操作數(shù)(如果有操作數(shù)字節(jié)的話)。在mcs-51系列單片機(jī)中,程序計(jì)數(shù)器pc的尋址范圍是0000h~ffffh,共64 kb。用戶應(yīng)用程序中,根據(jù)系統(tǒng)要求,規(guī)定了程序運(yùn)行的惟一路徑。這體現(xiàn)在系統(tǒng)上電后,程序計(jì)數(shù)器pc有唯一的變化歷程,保證了程序正常、有序地運(yùn)行。程序跑飛是指系統(tǒng)受到某種干擾后,程序計(jì)數(shù)器pc的值偏離了給定的唯一變化歷程,導(dǎo)致程序運(yùn)行偏離正常的運(yùn)行路徑。程序跑飛因素及后果往往是不可預(yù)計(jì)的。
在很多情況下,程序跑飛后系統(tǒng)會進(jìn)入死循環(huán)而導(dǎo)致死機(jī)。這時(shí),應(yīng)采取有效措施引導(dǎo)跑飛的程序盡快退出死循環(huán)并迅速復(fù)位。實(shí)踐證明,軟件陷阱技術(shù)能有效引導(dǎo)跑飛的程序盡快退出死循環(huán)并迅速復(fù)位。
2 兩種軟件陷阱技術(shù)的比較分析
當(dāng)單片機(jī)應(yīng)用系統(tǒng)的cpu受到干擾時(shí),不良影響的主要形式有:①非正常修改程序計(jì)數(shù)器pc指針;②改寫可編程輸出端口的狀態(tài);③非正常修改重要數(shù)據(jù)區(qū)的數(shù)據(jù)。以上三個方面的不良影響會使單片機(jī)應(yīng)用系統(tǒng)程序失控,控制狀態(tài)失靈,其后果是非常嚴(yán)重的,它甚至?xí)瓜到y(tǒng)崩潰,造成嚴(yán)重的工業(yè)事故。以上幾個方面的不良影響可以使用軟件陷阱技術(shù)加以解決,F(xiàn)將這一技術(shù)的實(shí)現(xiàn)方法歸納總結(jié)為兩種。
2.1 軟件陷阱技術(shù)實(shí)現(xiàn)形式之一
單片機(jī)應(yīng)用系統(tǒng)的用戶應(yīng)用程序一般由循環(huán)結(jié)構(gòu)的主程序和中斷服務(wù)子程序組成.將下面的軟件陷阱程序段插入到用戶應(yīng)用程序中(如何插入的問題將在下面的第3點(diǎn)中詳細(xì)討論),即在用戶應(yīng)用程序存儲器不用區(qū)域?qū)懭氪a.
當(dāng)單片機(jī)應(yīng)用系統(tǒng)工作正常時(shí),單片機(jī)的cpu不會執(zhí)行軟件陷阱程序段;但是,當(dāng)單片機(jī)應(yīng)用系統(tǒng)受到干擾而程序跑飛后,由于程序計(jì)數(shù)器pc值錯誤,破壞了正常的指令格式,導(dǎo)致執(zhí)行非正常指令,從而執(zhí)行軟件陷阱程序段,落入軟件陷阱,將跑飛的程序引導(dǎo)到復(fù)位入口地址0000h。軟件陷阱程序段中的連續(xù)2條nop指令是為了增強(qiáng)“l(fā)jmp 0000h”被捕獲的能力,即“ijmp0000h”不會被沖散,當(dāng)程序跑飛后會得到完整地執(zhí)行,從而使跑飛的程序納入正常軌道。
2.2 軟件陷阱技術(shù)實(shí)現(xiàn)形式之二
雖然上述的軟件陷阱技術(shù)能實(shí)現(xiàn)可靠回復(fù)功能,但是有兩個方面的嚴(yán)重隱患。第一,隱患主要是在對中斷的處理上:首先,程序跑飛很可能是發(fā)生在中斷服務(wù)子程序中,其次,一些未使用的中斷很可能因?yàn)槌绦蚺茱w而被錯誤地激活,而這時(shí)只是簡單地讓跑飛的程序從頭開始運(yùn)行,就不能關(guān)閉已激活的中斷,這樣,單片機(jī)的中斷系統(tǒng)會認(rèn)為程序仍在處理中斷,就不會再響應(yīng)同級中斷。第二,大部分單片機(jī)應(yīng)用系統(tǒng)在上電復(fù)位初始化后,不希望在程序跑飛而用軟件陷阱回復(fù)后又重新初始化。
為了解決第一個隱患,當(dāng)程序跑飛時(shí),一定要想辦法關(guān)閉可能發(fā)生的中斷,然后再執(zhí)行用戶應(yīng)用程序。大家知道,當(dāng)cpu進(jìn)入中斷后,就只能用reti指令關(guān)閉中斷.解決第一個隱患的具體方法是,改變軟件陷阱程序段:當(dāng)程序跑飛后,將跑飛的程序引到0202h處,然后在0202h處完成關(guān)閉中斷的工作,即在用戶應(yīng)用程序存儲器不用區(qū)域?qū)懭氪a“0000020202h”。需要注意的是,程序存儲器不用區(qū)域的最后兩個存儲單元,一定要分別寫入代碼“00h”。
nop
nop
ljmp 0202h ;前面的連續(xù)2條nop指令是為了;增強(qiáng)“l(fā)jmp 0202h”被捕獲的能力
而在0202h開始的程序存儲器單元進(jìn)行如下的編程:
org 0202h
movdptr,#errl
push dpl
push dph
reti ;關(guān)閉第1級中斷,并跳轉(zhuǎn)到errl處
errl: clr a
push acc
push acc
reti ;關(guān)閉第2級中斷,軟件回復(fù)到0000h處
這樣,就保證了無論在什么情況下,都可以關(guān)閉2級中斷。當(dāng)然,如果沒有中斷被激活時(shí)運(yùn)行了這段程序,也不會有什么不良影響。
為了解決第二個隱患,可以在系統(tǒng)主程序入口處加一個軟件開關(guān)來判別是上電復(fù)位直接進(jìn)入0000h的,還是經(jīng)過軟件陷阱回復(fù)而進(jìn)入0000h的,根據(jù)不同的判別結(jié)果執(zhí)行不同的程序。
單片機(jī)應(yīng)用系統(tǒng)上電時(shí),上電復(fù)位電路會
單片機(jī)應(yīng)用系統(tǒng)的抗干擾具體可分為軟件和硬件兩方面,其中,軟件抗干擾以其設(shè)計(jì)靈活、節(jié)省硬件資源、降低成本等優(yōu)勢越來越得到廣泛采用。軟件抗干擾技術(shù)主要有“指令冗余技術(shù)”、“軟件陷阱技術(shù)”、“軟件看門狗技術(shù)”、“數(shù)字濾波技術(shù)”等。本文就軟件陷阱技術(shù)對單片機(jī)應(yīng)用系統(tǒng)抗干擾的原理與具體實(shí)現(xiàn)方法進(jìn)行探討和研究,給出實(shí)現(xiàn)軟件陷阱技術(shù)的兩種形式,并將該技術(shù)成功地使用在多個實(shí)際的單片機(jī)應(yīng)用系統(tǒng)中,保證系統(tǒng)的可靠運(yùn)行。
1 程序跑飛和軟件陷阱技術(shù)概述
程序正常運(yùn)行時(shí),程序計(jì)數(shù)器pc始終指向正在執(zhí)行的這條指令的下一條指令的第一個字節(jié)的程序存儲器單元地址,這樣就保證了單片機(jī)能夠正確地讀取每一條指令的各個字節(jié),即cpu先讀取操作碼,再讀取操作數(shù)(如果有操作數(shù)字節(jié)的話)。在mcs-51系列單片機(jī)中,程序計(jì)數(shù)器pc的尋址范圍是0000h~ffffh,共64 kb。用戶應(yīng)用程序中,根據(jù)系統(tǒng)要求,規(guī)定了程序運(yùn)行的惟一路徑。這體現(xiàn)在系統(tǒng)上電后,程序計(jì)數(shù)器pc有唯一的變化歷程,保證了程序正常、有序地運(yùn)行。程序跑飛是指系統(tǒng)受到某種干擾后,程序計(jì)數(shù)器pc的值偏離了給定的唯一變化歷程,導(dǎo)致程序運(yùn)行偏離正常的運(yùn)行路徑。程序跑飛因素及后果往往是不可預(yù)計(jì)的。
在很多情況下,程序跑飛后系統(tǒng)會進(jìn)入死循環(huán)而導(dǎo)致死機(jī)。這時(shí),應(yīng)采取有效措施引導(dǎo)跑飛的程序盡快退出死循環(huán)并迅速復(fù)位。實(shí)踐證明,軟件陷阱技術(shù)能有效引導(dǎo)跑飛的程序盡快退出死循環(huán)并迅速復(fù)位。
2 兩種軟件陷阱技術(shù)的比較分析
當(dāng)單片機(jī)應(yīng)用系統(tǒng)的cpu受到干擾時(shí),不良影響的主要形式有:①非正常修改程序計(jì)數(shù)器pc指針;②改寫可編程輸出端口的狀態(tài);③非正常修改重要數(shù)據(jù)區(qū)的數(shù)據(jù)。以上三個方面的不良影響會使單片機(jī)應(yīng)用系統(tǒng)程序失控,控制狀態(tài)失靈,其后果是非常嚴(yán)重的,它甚至?xí)瓜到y(tǒng)崩潰,造成嚴(yán)重的工業(yè)事故。以上幾個方面的不良影響可以使用軟件陷阱技術(shù)加以解決,F(xiàn)將這一技術(shù)的實(shí)現(xiàn)方法歸納總結(jié)為兩種。
2.1 軟件陷阱技術(shù)實(shí)現(xiàn)形式之一
單片機(jī)應(yīng)用系統(tǒng)的用戶應(yīng)用程序一般由循環(huán)結(jié)構(gòu)的主程序和中斷服務(wù)子程序組成.將下面的軟件陷阱程序段插入到用戶應(yīng)用程序中(如何插入的問題將在下面的第3點(diǎn)中詳細(xì)討論),即在用戶應(yīng)用程序存儲器不用區(qū)域?qū)懭氪a.
當(dāng)單片機(jī)應(yīng)用系統(tǒng)工作正常時(shí),單片機(jī)的cpu不會執(zhí)行軟件陷阱程序段;但是,當(dāng)單片機(jī)應(yīng)用系統(tǒng)受到干擾而程序跑飛后,由于程序計(jì)數(shù)器pc值錯誤,破壞了正常的指令格式,導(dǎo)致執(zhí)行非正常指令,從而執(zhí)行軟件陷阱程序段,落入軟件陷阱,將跑飛的程序引導(dǎo)到復(fù)位入口地址0000h。軟件陷阱程序段中的連續(xù)2條nop指令是為了增強(qiáng)“l(fā)jmp 0000h”被捕獲的能力,即“ijmp0000h”不會被沖散,當(dāng)程序跑飛后會得到完整地執(zhí)行,從而使跑飛的程序納入正常軌道。
2.2 軟件陷阱技術(shù)實(shí)現(xiàn)形式之二
雖然上述的軟件陷阱技術(shù)能實(shí)現(xiàn)可靠回復(fù)功能,但是有兩個方面的嚴(yán)重隱患。第一,隱患主要是在對中斷的處理上:首先,程序跑飛很可能是發(fā)生在中斷服務(wù)子程序中,其次,一些未使用的中斷很可能因?yàn)槌绦蚺茱w而被錯誤地激活,而這時(shí)只是簡單地讓跑飛的程序從頭開始運(yùn)行,就不能關(guān)閉已激活的中斷,這樣,單片機(jī)的中斷系統(tǒng)會認(rèn)為程序仍在處理中斷,就不會再響應(yīng)同級中斷。第二,大部分單片機(jī)應(yīng)用系統(tǒng)在上電復(fù)位初始化后,不希望在程序跑飛而用軟件陷阱回復(fù)后又重新初始化。
為了解決第一個隱患,當(dāng)程序跑飛時(shí),一定要想辦法關(guān)閉可能發(fā)生的中斷,然后再執(zhí)行用戶應(yīng)用程序。大家知道,當(dāng)cpu進(jìn)入中斷后,就只能用reti指令關(guān)閉中斷.解決第一個隱患的具體方法是,改變軟件陷阱程序段:當(dāng)程序跑飛后,將跑飛的程序引到0202h處,然后在0202h處完成關(guān)閉中斷的工作,即在用戶應(yīng)用程序存儲器不用區(qū)域?qū)懭氪a“0000020202h”。需要注意的是,程序存儲器不用區(qū)域的最后兩個存儲單元,一定要分別寫入代碼“00h”。
nop
nop
ljmp 0202h ;前面的連續(xù)2條nop指令是為了;增強(qiáng)“l(fā)jmp 0202h”被捕獲的能力
而在0202h開始的程序存儲器單元進(jìn)行如下的編程:
org 0202h
movdptr,#errl
push dpl
push dph
reti ;關(guān)閉第1級中斷,并跳轉(zhuǎn)到errl處
errl: clr a
push acc
push acc
reti ;關(guān)閉第2級中斷,軟件回復(fù)到0000h處
這樣,就保證了無論在什么情況下,都可以關(guān)閉2級中斷。當(dāng)然,如果沒有中斷被激活時(shí)運(yùn)行了這段程序,也不會有什么不良影響。
為了解決第二個隱患,可以在系統(tǒng)主程序入口處加一個軟件開關(guān)來判別是上電復(fù)位直接進(jìn)入0000h的,還是經(jīng)過軟件陷阱回復(fù)而進(jìn)入0000h的,根據(jù)不同的判別結(jié)果執(zhí)行不同的程序。
單片機(jī)應(yīng)用系統(tǒng)上電時(shí),上電復(fù)位電路會
熱門點(diǎn)擊
- 用于ATmega128的軟件UART范例程序
- 單片機(jī)驅(qū)動蜂鳴器原理與設(shè)計(jì)
- 51單片機(jī)8*8點(diǎn)陣LED顯示原理及程序
- PIC單片機(jī)CRC校驗(yàn)程序
- PIC單片機(jī)紅外遙控編碼與解碼的問題
- 80C51原始IP核內(nèi)部RAM的擴(kuò)展方案
- 單片機(jī)的圖形化編程方法探討
- 用AT89S51單片機(jī)來制作的手動計(jì)數(shù)器
- Proteus在單片機(jī)系統(tǒng)設(shè)計(jì)中的應(yīng)用
- TEA5767收音機(jī)模塊的C51控制程序
推薦技術(shù)資料
- 硬盤式MP3播放器終級改
- 一次偶然的機(jī)會我結(jié)識了NE0 2511,那是一個遠(yuǎn)方的... [詳細(xì)]
- 100V高頻半橋N-溝道功率MOSFET驅(qū)動
- 集成高端和低端 FET 和驅(qū)動
- 柵極驅(qū)動單片半橋芯片MP869
- 數(shù)字恒定導(dǎo)通時(shí)間控制模式(COT)應(yīng)用探究
- 高效率 (CSP/QFN/BG
- IC 工藝、封裝技術(shù)、單片設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究