国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

51系列單片機(jī)軟件抗干擾設(shè)計(jì)方法

2012-04-29 19:14:57李莉
電腦知識(shí)與技術(shù) 2012年15期
關(guān)鍵詞:處理程序看門(mén)狗斷點(diǎn)

李莉

摘要:軟件可靠性設(shè)計(jì)越來(lái)越引起人們的重視,軟件抗干擾不僅設(shè)計(jì)靈活,節(jié)省硬件資源,并且具有高可靠性,文章從軟件測(cè)試的角度闡述了51系列單片機(jī)軟件抗干擾設(shè)計(jì)技術(shù)和方法。

關(guān)鍵詞:51系列單片機(jī);軟件抗干擾

中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)15-3725-03

The Software Anti-interference Design of MCS-51

LI Li

(Software Test Center of Shanghai Academy of Spaceflight Technology, Shanghai 201109, China)

Abstract: Today the technology of software reliability design have received more consideration. Software reliability design can not only save hardware resource but also provide high reliability. This article describe the technology of software reliability design from the point of software test view.

Key words: MCS-51; software anti-interference

51系列單片機(jī)應(yīng)用廣泛,但由于指令系統(tǒng)是復(fù)雜指令集結(jié)構(gòu),致使其抗干擾性能不高,通常我們從硬件和軟件兩個(gè)方面開(kāi)展單片機(jī)可靠性的設(shè)計(jì)。硬件抗干擾性設(shè)計(jì)復(fù)雜,且提高硬件成本,相對(duì)的,軟件抗干擾性設(shè)計(jì)可以在不增加系統(tǒng)復(fù)雜性和硬件成本的基礎(chǔ)上,也能做到大幅提高系統(tǒng)的穩(wěn)定性[1]。

軟件抗干擾的設(shè)計(jì)方法通常有:開(kāi)機(jī)自檢和初始化、軟件陷阱、看門(mén)狗、關(guān)鍵信息三取二等等,這些設(shè)計(jì)能有效地防止程序走飛,或者在程序走飛后將程序拉回正常軌道。本文結(jié)合了作者在軟件測(cè)試工作的經(jīng)驗(yàn)和實(shí)例,講述了51系列單片機(jī)軟件的多種抗干擾設(shè)計(jì)方法及注意事項(xiàng)。

1抗干擾設(shè)計(jì)方法

1.1開(kāi)機(jī)自檢和初始化

開(kāi)機(jī)自檢和初始化是每個(gè)嵌入式軟件上電運(yùn)行的第一個(gè)抗干擾步驟,通常會(huì)有以下一些操作:

1)對(duì)程序ROM區(qū)的校驗(yàn)和;

2)對(duì)RAM區(qū)先寫(xiě)后讀0xaa,0x55查看寫(xiě)入與讀出的數(shù)是否一致;

3)檢查I/O口;

4)檢測(cè)其他接口電路,如擴(kuò)展的EEPROM、A/ D轉(zhuǎn)換電路等。

程序自檢和初始化設(shè)計(jì)時(shí)需要注意的問(wèn)題有:

1)自檢錯(cuò)誤時(shí)程序應(yīng)給出錯(cuò)誤提示;

2)對(duì)接口進(jìn)行自檢時(shí),應(yīng)設(shè)定響應(yīng)時(shí)間限制,以保證在硬件無(wú)響應(yīng)的情況下程序不會(huì)陷入死循環(huán),會(huì)及時(shí)報(bào)錯(cuò);

3)初始化時(shí)注意考慮對(duì)自檢結(jié)果帶來(lái)的影響。

這里對(duì)于第3點(diǎn)舉例說(shuō)明:

某軟件要求程序的遙測(cè)下傳數(shù)據(jù)中應(yīng)包含當(dāng)前工作狀態(tài)、硬件故障等信息,該軟件具有冷、熱啟動(dòng)功能。程序?qū)崿F(xiàn):冷啟動(dòng)時(shí)對(duì)所有的內(nèi)存進(jìn)行了初始化,熱啟動(dòng)時(shí)對(duì)遙測(cè)下傳數(shù)據(jù)進(jìn)行初始化。程序自檢和初始化流程如圖1所示。

從流程可以看出,自檢工作在初始化之前進(jìn)行,導(dǎo)致自檢錯(cuò)誤信息被初始化,即自檢錯(cuò)誤不會(huì)被遙測(cè)記錄并發(fā)送。

由于程序自檢一般不會(huì)出錯(cuò),因此該錯(cuò)誤一直潛伏在程序中,直至第三方測(cè)試時(shí)構(gòu)造了自檢錯(cuò)誤的測(cè)試案例才被發(fā)現(xiàn)。從這個(gè)實(shí)例我們得出:軟件的初始化內(nèi)容要慎重處理,不能簡(jiǎn)單地直接初始化所有使用資源,要充分考慮自檢操作使用資源的因素,并在設(shè)計(jì)時(shí)梳理全局資源,避免全局資源的使用沖突。

1.2軟件陷阱

通常在程序存儲(chǔ)器中未使用的EPROM空間填入空操作指令NOP ( 00H) ,最后再填入一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到跑飛處理程序,或者直接填入指令LJMP 0000H (020000)。

軟件陷阱的一般結(jié)構(gòu)為:

NOP

NOP

LJMP FLY ; FLY為跑飛處理程序

由于51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),為了防止軟件在二級(jí)中斷嵌套時(shí)走飛,由軟件陷阱轉(zhuǎn)入初始化程序時(shí),要用兩個(gè)中斷返回語(yǔ)句清除二級(jí)中斷服務(wù)狀態(tài)標(biāo)志,如以下代碼所示:

ERR:CLREA;關(guān)閉中斷

…………;其余清端口操作

MOVDPTR,#ERR1

PUSHDPL

PUSHDPH

RETI

ERR1:CLRA

PUSHACC

PUSHACC

RETI;從地址0000H開(kāi)始執(zhí)行

在某軟件的測(cè)試中,將程序PC指針拉飛后程序運(yùn)行至跑飛處理程序,確沒(méi)有正確復(fù)位,跑飛處理程序如下:

ERR:CLREA;關(guān)閉中斷

…………;其余清端口操作

MOVDPTR,#ERR1

PUSHDPH

PUSHDPL

RETI

ERR1:CLRA

PUSHACC

PUSHACC

RETI;從地址0000H開(kāi)始執(zhí)行

與標(biāo)準(zhǔn)的跑飛處理程序比較可以看出,該程序的錯(cuò)誤是在ERR子程序中地址壓棧時(shí)高低位順序錯(cuò)誤。為什么設(shè)計(jì)師會(huì)犯這樣的錯(cuò)誤呢?因?yàn)樵O(shè)計(jì)師習(xí)慣了中斷子程序中的現(xiàn)場(chǎng)保護(hù)寫(xiě)法,在普通的中斷子程序中,通常會(huì)在中斷開(kāi)頭保護(hù)現(xiàn)場(chǎng),中斷結(jié)束恢復(fù)現(xiàn)場(chǎng),即:

中斷開(kāi)頭時(shí): PUSHDPH

PUSHDPL

中斷結(jié)束時(shí):POP DPL

POP DPH

RETI

設(shè)計(jì)師照著中斷中現(xiàn)場(chǎng)保護(hù)的寫(xiě)法來(lái)涉及跑飛處理程序,卻沒(méi)有注意到,中斷中的地址是先壓棧后出棧的,而跑飛處理程序中該地址只有壓棧操作,是靠RETI這個(gè)指令進(jìn)行出棧操作的。

這里就涉及到對(duì)RETI這個(gè)指令的理解,在51系列單片機(jī)中,響應(yīng)中斷后,硬件自動(dòng)生成LCALL addr16的指令,addr16是各中斷源的中斷矢量地址。被中斷打斷時(shí)程序運(yùn)行至一個(gè)地址,我們稱(chēng)為斷點(diǎn)地址。處理器首先將程序計(jì)數(shù)器PC的內(nèi)容(斷點(diǎn)地址)壓入堆棧進(jìn)行保護(hù),先低位地址后高位地址,同時(shí)堆棧指針SP加2。然后將對(duì)應(yīng)中斷源的中斷矢量地址addr16裝入PC,使程序轉(zhuǎn)向該地址去執(zhí)行中斷程序。在遇到RETI指令后,程序干兩件事:一是撤銷(xiāo)中斷申請(qǐng),彈出斷點(diǎn)地址,先彈出高位地址,后彈出低位地址,同時(shí)堆棧指針SP減2,恢復(fù)原程序的斷點(diǎn)地址執(zhí)行;二是恢復(fù)中斷觸發(fā)器原先狀態(tài)。

以上這些都是在中斷響應(yīng)時(shí)硬件自動(dòng)執(zhí)行的,因此,對(duì)于斷點(diǎn)地址入棧的順序設(shè)計(jì)師通常都不會(huì)注意,斷點(diǎn)地址自動(dòng)入棧時(shí)是先低位地址后高位地址,RETI恢復(fù)時(shí)是先彈出高位地址,后彈出低位地址。由于跑飛處理程序是一個(gè)子程序,而不是中斷程序,因此硬件不會(huì)自動(dòng)將斷點(diǎn)地址壓棧,這里ERR的PUSH語(yǔ)句就是為了將斷點(diǎn)地址壓棧,因此應(yīng)當(dāng)按照先低位后高位的順序進(jìn)行,以匹配之后RETI語(yǔ)句的出棧操作。

以上是匯編語(yǔ)言的跑飛處理程序,需要注意的是在51系列的高級(jí)語(yǔ)言編程程序中,要在跑飛處理程序中進(jìn)行中斷申請(qǐng)的撤銷(xiāo)。因?yàn)橥ǔV袛嘧映绦蛟诮Y(jié)束處會(huì)對(duì)中斷申請(qǐng)進(jìn)行撤銷(xiāo),但是一旦在中斷執(zhí)行過(guò)程中程序走飛進(jìn)入跑飛處理程序,那么中斷子程序最后的撤銷(xiāo)操作未被執(zhí)行,即中斷申請(qǐng)未被撤銷(xiāo),因此需要在跑飛處理程序中進(jìn)行該操作,避免程序復(fù)位后中斷未被釋放而導(dǎo)致中斷不響應(yīng)。

1.3看門(mén)狗

看門(mén)狗是防止軟件陷入死循環(huán)的有效手段,在正常工作時(shí),安插在循環(huán)程序中的清除脈沖信號(hào)周期性地清除看門(mén)狗,看門(mén)狗定時(shí)器不會(huì)溢出,當(dāng)系統(tǒng)受到干擾使程序跑飛時(shí),看門(mén)狗定時(shí)器得不到及時(shí)清除而溢出,產(chǎn)生CPU復(fù)位信號(hào),使系統(tǒng)重新開(kāi)始[2]。

由于看門(mén)狗對(duì)時(shí)間的要求非常精確,為了避免在正常的流程中超時(shí)喂狗而導(dǎo)致看門(mén)狗復(fù)位,設(shè)計(jì)師有時(shí)會(huì)陷入“喂狗綜合癥”,即過(guò)于頻繁的清除看門(mén)狗,導(dǎo)致看門(mén)狗失去作用。

在某程序的測(cè)試過(guò)程中,設(shè)計(jì)師在主程序和某中斷程序中均進(jìn)行了喂狗操作,由于該中斷觸發(fā)頻繁,且中斷優(yōu)先級(jí)高,導(dǎo)致喂狗過(guò)頻。在這種情況下如果主程序走飛,看門(mén)狗也不能發(fā)現(xiàn),因?yàn)轭l繁到來(lái)的中斷中不停在喂狗,導(dǎo)致看門(mén)狗定時(shí)器不會(huì)溢出。因此在看門(mén)狗設(shè)置上,通常的建議是只在主程序中喂狗,以保證狗確實(shí)能看住“門(mén)”。

1.4關(guān)鍵信息三取二

對(duì)于在太空環(huán)境中運(yùn)行的軟件來(lái)講,關(guān)鍵數(shù)據(jù)三取二是防止單粒子翻轉(zhuǎn)的有效且必要的手段,所謂三取二即是將關(guān)鍵的數(shù)據(jù)存儲(chǔ)在三個(gè)不同的地方,訪(fǎng)問(wèn)數(shù)據(jù)應(yīng)采取三取二表決方式裁決。

某軟件的主要功能是控溫,加熱片溫度低于加熱點(diǎn)則控制進(jìn)行加熱,加熱片溫度高于斷開(kāi)點(diǎn)則控制停止加熱。加熱點(diǎn)/斷開(kāi)點(diǎn)的溫度值由外部注入,程序中對(duì)加熱點(diǎn)/斷開(kāi)點(diǎn)溫度值進(jìn)行了三取二操作。測(cè)試中針對(duì)三取二模擬了各種情況,當(dāng)構(gòu)造三取二操作兩兩相異的情況時(shí),問(wèn)題出現(xiàn)了。所謂兩兩相異,即溫度值存放的三個(gè)地方的值各不一樣。程序中當(dāng)遇到三取二錯(cuò)誤時(shí),直接放棄了控溫操作,既沒(méi)有采取遙測(cè)下報(bào)措施,也沒(méi)有考慮重要數(shù)據(jù)三取二錯(cuò)誤后的備份控溫方案。如果當(dāng)前加熱片處于加熱狀態(tài),而外部也沒(méi)有重新進(jìn)行控溫注數(shù),那么加熱片將一直加熱下去,很可能導(dǎo)致硬件故障。

因此,三取二操作設(shè)計(jì)時(shí)應(yīng)注意容錯(cuò)性的設(shè)計(jì),即在三取二操作失效后程序的處理。

2結(jié)束語(yǔ)

當(dāng)前的科研生產(chǎn)均提倡“降本增效”,在硬件上增加抗干擾性設(shè)計(jì)提高成本,因此通過(guò)軟件設(shè)計(jì)提高系統(tǒng)和產(chǎn)品的可靠性已越來(lái)越受到科技人員的重視。軟件抗干擾設(shè)計(jì)方法多種多樣,且都不是單獨(dú)使用的,不同的軟件需要根據(jù)實(shí)際情況結(jié)合實(shí)現(xiàn)多種抗干擾手段。設(shè)計(jì)師在進(jìn)行抗干擾設(shè)計(jì)時(shí)應(yīng)考慮全面,使程序做到防錯(cuò)、容錯(cuò)、糾錯(cuò)的全面性,保證單片機(jī)系統(tǒng)穩(wěn)定可靠地工作。

參考文獻(xiàn):

[1]于洪洲,程建.51系列單片機(jī)軟件抗干擾設(shè)計(jì)[J].集成電路通訊,2007(6):1-2.

[2]李子華.MCS-51單片機(jī)軟件系統(tǒng)可靠性設(shè)計(jì)[J].遼寧師專(zhuān)學(xué)報(bào),2002(3).

猜你喜歡
處理程序看門(mén)狗斷點(diǎn)
高速公路工程變更與計(jì)量支付處理程序的優(yōu)化方法
把他叫醒
一類(lèi)無(wú)限可能問(wèn)題的解法
主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
基于C++的數(shù)控加工通用后處理程序的開(kāi)發(fā)應(yīng)用研究
企業(yè)危機(jī)公關(guān)管理問(wèn)題分析
一種采用FPGA實(shí)現(xiàn)的通用看門(mén)狗電路
大眾科技(2015年11期)2015-11-24 01:57:16
把它叫醒
把它叫醒
地鐵直流系統(tǒng)中框架保護(hù)原理及處理程序
安乡县| 明光市| 静乐县| 青田县| 常山县| 杭锦后旗| 娱乐| 泸溪县| 繁昌县| 峨眉山市| 梁山县| 女性| 泌阳县| 区。| 五原县| 枣庄市| 融水| 财经| 景谷| 博罗县| 陆川县| 明溪县| 通州市| 敦化市| 宝清县| 鄂尔多斯市| 滁州市| 榆林市| 商城县| 泊头市| 陇南市| 资兴市| 邯郸县| 广昌县| 福海县| 乌审旗| 潜江市| 东城区| 衡水市| 通河县| 桓仁|