當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]系統(tǒng)地介紹軟件陷阱技術(shù)實現(xiàn)的原理、方法和具體措施。首先,給出程序跑飛的概念和軟件陷阱技術(shù)的基本含義,然后,從不同方面比較分析軟件陷阱技術(shù)實現(xiàn)的兩種形式,指出第一種形式的兩個嚴(yán)重隱患,給出克服這兩個隱患的第二種形式.詳細(xì)討論系統(tǒng)上電復(fù)位與軟件回復(fù)不同初始化過程的問題,以及軟件陷阱在用戶應(yīng)用程序中安排位置的問題。

引 言
    單片機(jī)應(yīng)用系統(tǒng)的抗干擾具體可分為軟件和硬件兩方面,其中,軟件抗干擾以其設(shè)計靈活、節(jié)省硬件資源、降低成本等優(yōu)勢越來越得到廣泛采用。軟件抗干擾技術(shù)主要有“指令冗余技術(shù)”、“軟件陷阱技術(shù)”、“軟件看門狗技術(shù)”、“數(shù)字濾波技術(shù)”等。本文就軟件陷阱技術(shù)對單片機(jī)應(yīng)用系統(tǒng)抗干擾的原理與具體實現(xiàn)方法進(jìn)行探討和研究,給出實現(xiàn)軟件陷阱技術(shù)的兩種形式,并將該技術(shù)成功地使用在多個實際的單片機(jī)應(yīng)用系統(tǒng)中,保證系統(tǒng)的可靠運行。

1 程序跑飛和軟件陷阱技術(shù)概述
    程序正常運行時,程序計數(shù)器PC始終指向正在執(zhí)行的這條指令的下一條指令的第一個字節(jié)的程序存儲器單元地址,這樣就保證了單片機(jī)能夠正確地讀取每一條指令的各個字節(jié),即CPU先讀取操作碼,再讀取操作數(shù)(如果有操作數(shù)字節(jié)的話)。在MCS-51系列單片機(jī)中,程序計數(shù)器PC的尋址范圍是0000H~FFFFH,共64 KB。用戶應(yīng)用程序中,根據(jù)系統(tǒng)要求,規(guī)定了程序運行的惟一路徑。這體現(xiàn)在系統(tǒng)上電后,程序計數(shù)器PC有唯一的變化歷程,保證了程序正常、有序地運行。程序跑飛是指系統(tǒng)受到某種干擾后,程序計數(shù)器PC的值偏離了給定的唯一變化歷程,導(dǎo)致程序運行偏離正常的運行路徑。程序跑飛因素及后果往往是不可預(yù)計的。
    在很多情況下,程序跑飛后系統(tǒng)會進(jìn)入死循環(huán)而導(dǎo)致死機(jī)。這時,應(yīng)采取有效措施引導(dǎo)跑飛的程序盡快退出死循環(huán)并迅速復(fù)位。實踐證明,軟件陷阱技術(shù)能有效引導(dǎo)跑飛的程序盡快退出死循環(huán)并迅速復(fù)位。

2 兩種軟件陷阱技術(shù)的比較分析
    當(dāng)單片機(jī)應(yīng)用系統(tǒng)的CPU受到干擾時,不良影響的主要形式有:①非正常修改程序計數(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ù)的實現(xiàn)方法歸納總結(jié)為兩種。
2.1 軟件陷阱技術(shù)實現(xiàn)形式之一
    單片機(jī)應(yīng)用系統(tǒng)的用戶應(yīng)用程序一般由循環(huán)結(jié)構(gòu)的主程序和中斷服務(wù)子程序組成,主程序的結(jié)構(gòu)如圖1所示。將下面的軟件陷阱程序段插入到用戶應(yīng)用程序中(如何插入的問題將在下面的第3點中詳細(xì)討論),即在用戶應(yīng)用程序存儲器不用區(qū)域?qū)懭氪a“OO00020000H”。

    NOP
    NOP
    LJMP O000H
    當(dāng)單片機(jī)應(yīng)用系統(tǒng)工作正常時,單片機(jī)的CPU不會執(zhí)行軟件陷阱程序段;但是,當(dāng)單片機(jī)應(yīng)用系統(tǒng)受到干擾而程序跑飛后,由于程序計數(shù)器PC值錯誤,破壞了正常的指令格式,導(dǎo)致執(zhí)行非正常指令,從而執(zhí)行軟件陷阱程序段,落入軟件陷阱,將跑飛的程序引導(dǎo)到復(fù)位入口地址0000H。軟件陷阱程序段中的連續(xù)2條NOP指令是為了增強(qiáng)“LJMP 0000H”被捕獲的能力,即“IJMP0000H”不會被沖散,當(dāng)程序跑飛后會得到完整地執(zhí)行,從而使跑飛的程序納入正常軌道。
2.2 軟件陷阱技術(shù)實現(xiàn)形式之二
    雖然上述的軟件陷阱技術(shù)能實現(xiàn)可靠回復(fù)功能,但是有兩個方面的嚴(yán)重隱患。第一,隱患主要是在對中斷的處理上:首先,程序跑飛很可能是發(fā)生在中斷服務(wù)子程序中,其次,一些未使用的中斷很可能因為程序跑飛而被錯誤地激活,而這時只是簡單地讓跑飛的程序從頭開始運行,就不能關(guān)閉已激活的中斷,這樣,單片機(jī)的中斷系統(tǒng)會認(rèn)為程序仍在處理中斷,就不會再響應(yīng)同級中斷。第二,大部分單片機(jī)應(yīng)用系統(tǒng)在上電復(fù)位初始化后,不希望在程序跑飛而用軟件陷阱回復(fù)后又重新初始化。
    為了解決第一個隱患,當(dāng)程序跑飛時,一定要想辦法關(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)“LJMP 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)然,如果沒有中斷被激活時運行了這段程序,也不會有什么不良影響。
    為了解決第二個隱患,可以在系統(tǒng)主程序入口處加一個軟件開關(guān)來判別是上電復(fù)位直接進(jìn)入0000H的,還是經(jīng)過軟件陷阱回復(fù)而進(jìn)入0000H的,根據(jù)不同的判別結(jié)果執(zhí)行不同的程序。
    單片機(jī)應(yīng)用系統(tǒng)上電時,上電復(fù)位電路會使單片機(jī)處于復(fù)位狀態(tài)。這一般稱為冷啟動。
    但是,軟件陷阱技術(shù)使跑飛的程序回復(fù)到主程序入口地址0000H時,不影響特殊功能寄存器SFR的有效位。解決第二個隱患的具體方法是,設(shè)置上電復(fù)位標(biāo)志。例如,以PSW.5作為上電標(biāo)志位,當(dāng)PSW.5=0時,表示是上電復(fù)位;當(dāng)PSW.5=l時,表示是軟件陷阱回復(fù)。圖2是上電復(fù)位與程序跑飛后軟件陷阱回復(fù)初始化處理框圖。0000H是MCU的復(fù)位入口,程序啟動后,首先判斷是上電復(fù)位,還是程序跑飛后軟件陷阱回復(fù)。上電復(fù)位是開機(jī)操作,要建立上電標(biāo)志,并進(jìn)行系統(tǒng)的完全初始化。程序跑飛后軟件陷阱回復(fù)應(yīng)該進(jìn)行相關(guān)資源的檢查與修復(fù),以防止系統(tǒng)運行出錯。另外,根據(jù)系統(tǒng)特點,需要保留一些過程數(shù)據(jù),不得進(jìn)行完全初始化。

    為了解決上述兩個隱患,有如下具體編程。其中,START0為系統(tǒng)上電復(fù)位完全初始化于程序入口,ER-ROR為程序跑飛后軟件陷阱回復(fù)應(yīng)進(jìn)行的系統(tǒng)部分初始化和相關(guān)資源的檢查與修復(fù)程序入口,LOOP是用戶應(yīng)用程序功能模塊入口。
    ORG0000H
    LJMP START
    ORG 0100H
    START: MOV C,PSW.5
    JC ERROR
    SETB C
    MOV PSW.5,C
    LCALL STARTO
    LJMP LOOP
    ERROR: ……
    L00P: …… ;應(yīng)用程序功能模塊
    LJMP LOOP
    ORG 0200H
    NOP
    NOP
    MOV DPTR,#ERRl
    PUSH DPL
    PUSH DPH
    RETl ;關(guān)閉第1級中斷,并跳轉(zhuǎn)到ERRl處
    CRRl: CLR A
    PUSH ACC
    PUSH ACC
    RETI ;關(guān)閉第2級中斷,軟件回復(fù)到0000H處


3 軟件陷阱在用戶應(yīng)用程序中的安排位置
    軟件陷阱程序段可以插入到主程序中或者中斷服務(wù)子程序中。根據(jù)實際應(yīng)用情況,對軟件陷阱程序段的位置安排可以有5種方式。
(1)在主程序的應(yīng)用功能模塊之間
    在單片機(jī)應(yīng)用系統(tǒng)程序設(shè)計時,將軟件陷阱程序段分散地放在各應(yīng)用功能模塊之間空余的程序存儲器單元里。當(dāng)用戶應(yīng)用程序正常運行時,這些軟件陷阱程序段并不會執(zhí)行,但是,當(dāng)單片機(jī)應(yīng)用系統(tǒng)的CPU受干擾而使程序失控時,程序計數(shù)器PC指針一旦落入這些陷阱區(qū),就可以馬上將跑飛的程序拉回到正確的軌道。這種方法的確很有效。軟件陷阱的多少一般依據(jù)用戶應(yīng)用程序大小而定,一般1KB的用戶應(yīng)用程序有2~3個軟件陷阱就可以了,具體方法如下:
    應(yīng)用功能模塊1
    軟件陷阱程序段
    應(yīng)用功能模塊2
    軟件陷阱程序段
(2)在閑置未使用的EPROM/Flash ROM空間
   
在閑置未使用的EPROM/Flash ROM空間設(shè)置軟件陷阱,即在這些閑置未使用的EPROM/Flash ROM空間寫滿代碼“0000020202H”。值得注意的是,最后兩個存儲單元一定要分別寫入代碼“OOH”。當(dāng)程序跑飛而進(jìn)入此區(qū)后,便會被軟件陷阱迅速拉回正常軌道。
(3)在中斷服務(wù)子程序中
    軟件看門狗(soltware watchdog)實際上是軟件陷阱的一個應(yīng)用實例。以MCS-5l系列單片機(jī)為例,在系統(tǒng)初始化時將MCU內(nèi)部的定時器/計數(shù)器T0設(shè)置為定時器,并將TO定時溢出中斷設(shè)置為高級中斷.如果系統(tǒng)采用6 MHz時鐘,可以用如下的初始化程序段使TO定時約130 ms來形成軟件看門狗:
    MOV TMOD, #01H ;將T0設(shè)置為16位定時器
    SETB ETO ;允許TO中斷
    SETB PTO ;將TO定時溢出中斷設(shè)置為高級中斷
    MOV TH0,#0;給TO賦初值,定時約130/ms
    MOV TLO,#0
    SETB TR0 ;啟動T0開始定時
    SETB EA ;允許CPU中斷
    另外,TO定時溢出中斷服務(wù)子程序編程如下:
    INTO-PRo; MOV A,#02H
    PUSH ACC
    PUSH ACC
    RET1 ;中斷返回到0202H單元
    當(dāng)用戶應(yīng)用程序運行正常時,在小于130 ms的時間內(nèi),CPU應(yīng)該及時“喂狗”一一執(zhí)行清狗指令“MOV THO,#0”和“MOV TLO,#0”。這樣,TO就不會產(chǎn)生定時溢出,從而T0定時溢出中斷服務(wù)子程序不會被執(zhí)行。但是,當(dāng)單片機(jī)應(yīng)用系統(tǒng)的CPU受干擾而使程序失控時,CPU就不會及時執(zhí)行清狗指令,以致于產(chǎn)生TO定時溢出中斷,就可以馬上將跑飛的程序拉回到正確的軌道。實現(xiàn)及時“喂狗”的具體方法是在用戶應(yīng)用程序中的適當(dāng)位置插入指令“MOV TH0,#0”和“MOV TLO,#O”。實際上,TO定時溢出中斷服務(wù)子程序就是一個軟件陷阱,一旦執(zhí)行T0定時溢出中斷服務(wù)子程序,就是把跑飛的程序強(qiáng)行拉回到0202H程序存儲器單元。由前面的分析可知,已經(jīng)跑飛的程序可以迅速地被納入正確的軌道。
(4)在未使用的程序存儲器地址空間
    對MCS-51系列單片機(jī)而言,程序計數(shù)器PC的尋址范圍是0000H~FFFFH,共64 KB;然而,在實際的單片機(jī)應(yīng)用系統(tǒng)中,一般沒有使用到64 KB的程序存儲器,這樣就會余下大量的程序存儲器地址空間。例如,系統(tǒng)中僅選用了1片2764作為程序存儲器,其地址空間為8 KB。那么將有56 KB程序存儲器地址空間被閑置。當(dāng)CPU受到干擾而使程序計數(shù)器PC指向這些被閑置的程序存儲器地址空間時,CPU取指令得到的指令代碼為“0FFH”(這個結(jié)論可以根據(jù)圖3所示電路分析后得出)。該代碼是“MOV R7,A”指令的機(jī)器碼。顯而易見,當(dāng)單片機(jī)應(yīng)用系統(tǒng)的CPU受干擾而使程序失控時,程序計數(shù)器PC指針一旦落入這些被閑置的程序存儲器地址空間時,CPU執(zhí)行該指令不僅將錯誤地修改寄存器R7的內(nèi)容,而且無法將跑飛的程序納入正確的軌道。可以使用下面的軟件陷阱技術(shù)解決這個問題。
    如圖3所示,EPROM芯片2764的地址空間為0000H~lFFFH,譯碼器74LSl38的輸出Y0為其片選信號,2000H~FFFFH為未使用的程序存儲器空間。當(dāng)程序計數(shù)器PC的值落入2000H~FFFFH空間時,一定有Y0為高電乎;當(dāng)取指令操作時,PSEN為低電平,則74LS244的選通信號有效,所以74LS244被選中。進(jìn)一步分析圖3所示電路可知,當(dāng)用戶應(yīng)用程序失控而程序計數(shù)器PC指向被閑置的程序存儲器地址空間2000H~FFFFH時,總線驅(qū)動器74LS244被選通,這時CPU通過總線讀入的指令機(jī)器碼為020202H,正好是一條轉(zhuǎn)移指令“LJMP0202H”,這樣,使程序計數(shù)器PC指向0202H程序存儲器單元。由前面的分析可知,已經(jīng)跑飛的程序可以迅速地被納入正確的軌道。

(5) 對外部RAM寫操作實旆監(jiān)控保護(hù)而設(shè)置軟件陷阱
    在單片機(jī)應(yīng)用系統(tǒng)的外部數(shù)據(jù)存儲器RAM中,一般保存了大量的預(yù)置數(shù)據(jù)和程序運行時產(chǎn)生的中間數(shù)據(jù)。外部數(shù)據(jù)存儲器RAM的寫入是由“MOVX@DPTR,A”指令來完成的。當(dāng)CPU受干擾程序跑飛而誤執(zhí)行了該指令時,就會改寫RAM中內(nèi)容,導(dǎo)致RAM中的重要數(shù)據(jù)丟失。為了減小這種RAM中數(shù)據(jù)丟失的可能性,應(yīng)在外部RAM寫操作之前,對寫操作進(jìn)行條件判斷。如果條件滿足才執(zhí)行寫入操作;如果條件不滿足,則將寫入操作屏蔽,并使程序落入陷阱,進(jìn)入死循環(huán)。在程序落人死循環(huán)陷阱后,便只能由其他軟、硬件抗干擾技術(shù)(如看門狗技術(shù))使系統(tǒng)退出死循環(huán)陷阱,從而使系統(tǒng)恢復(fù)正常。具體源程序代碼如下(不妨設(shè)要寫入外部RAM的內(nèi)容存放在累加器A中,要寫入數(shù)據(jù)的外部RAM單元地址存放在DPTR中):
    MOV 6EH, #55H
    MOV 6FH, #OAAH
    LCALL WRlTE
    RET
    WRITE:NOP
    CINE 6EH,#55H,TRAP
    ;寫入條件是(6EH)=#55H
    CJNE 6FH,#OAAH,TRAP且(6FH)=#OAAH
    MOVX @DPTR,A
    NOP
    M0V 6EH,#00H
    M0V 6FH,#OOH
    RET
    TRAP, SJMP TRAP ;落入死循環(huán)陷阱

4 結(jié) 論
    與第1種形式的軟件陷阱技術(shù)比較,第2種形式的軟件陷阱技術(shù)消除了兩個嚴(yán)重的隱患,因此,第2種形式的軟件陷阱技術(shù)是一種有效實用的單片機(jī)應(yīng)用系統(tǒng)抗干擾技術(shù)。本文所介紹的軟件陷阱技術(shù)已成功地使用在多個實際的單片機(jī)應(yīng)用系統(tǒng)中,保證了系統(tǒng)的可靠運行。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉