在由單片機(jī)構(gòu)成的微型計(jì)算機(jī)系統(tǒng)中,由于單片機(jī)的工作常常會(huì)受到來(lái)自外界電磁場(chǎng)的干擾,造成程序的跑飛,而陷入死循環(huán),程序的正常運(yùn)行被打斷,由單片機(jī)控制的系統(tǒng)無(wú)法繼續(xù)工作,會(huì)造成整個(gè)系統(tǒng)的陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果,所以出于對(duì)單片機(jī)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè)的考慮,便產(chǎn)生了一種專(zhuān)門(mén)用于監(jiān)測(cè)單片機(jī)程序運(yùn)行狀態(tài)的芯片,俗稱(chēng)“看門(mén)狗”(watchdog)
其作用是使單片機(jī)可以在無(wú)人狀態(tài)下實(shí)現(xiàn)連續(xù)工作,其工作原理是:看門(mén)狗芯片和單片機(jī)的一個(gè)I/O引腳相連,該I/O引腳通過(guò)程序控制它定時(shí)地往看門(mén)狗的這個(gè)引腳上送入高電平(或低電平),這一程序語(yǔ)句是分散地放在單片機(jī)其他控制語(yǔ)句中間的,一旦單片機(jī)由于干擾造成程序跑飛后而陷入某一程序段 進(jìn)入死循環(huán)狀態(tài)時(shí),寫(xiě)看門(mén)狗引腳的程序便不能被執(zhí)行,這個(gè)時(shí)候,看門(mén)狗電路就會(huì)由于得不到單片機(jī)送來(lái)的信號(hào),便在它和單片機(jī)復(fù)位引腳相連的引腳上送出一個(gè)復(fù)位信號(hào),使單片機(jī)發(fā)生復(fù)位,即程序從程序存儲(chǔ)器的起始位置開(kāi)始執(zhí)行,這樣便實(shí)現(xiàn)了單片機(jī)的自動(dòng)復(fù)位。
單片機(jī)看門(mén)狗電路的作用
看門(mén)狗的作用: 看門(mén)狗定時(shí)器是一個(gè)計(jì)數(shù)器,基本功能是在發(fā)生軟件問(wèn)題和程序跑飛后使系統(tǒng)重新啟動(dòng)??撮T(mén)狗計(jì)數(shù)器正常工作時(shí)自動(dòng)計(jì)數(shù),程序流程定期將其復(fù)位清零,如果系統(tǒng)在某處卡死或跑飛,該定時(shí)器將溢出,并將進(jìn)入中斷。在定時(shí)器中斷中執(zhí)行一些復(fù)位操作,使系統(tǒng)恢復(fù)正常的工作狀態(tài),即在程序沒(méi)有正常運(yùn)行期間,如期復(fù)位看門(mén)狗以保證所選擇
的定時(shí)溢出歸零,使處理器重新啟動(dòng)。軟件的可靠性一直是一個(gè)關(guān)鍵問(wèn)題。任何使用軟件的人都可能會(huì)經(jīng)歷計(jì)算機(jī)死機(jī)或程序跑飛的問(wèn)題,這種情況在嵌入式系統(tǒng)中也同樣存在。由于單片機(jī)的抗干擾能力有限,在工業(yè)現(xiàn)場(chǎng)的儀器儀表中,常會(huì)由于電壓不穩(wěn)、電弧干擾等造成死機(jī)。在水表、電表等無(wú)人看守的情況下,也會(huì)因系統(tǒng)遭受干擾而無(wú)法重啟。為了保證系統(tǒng)在干擾后能自動(dòng)恢復(fù)正常,看門(mén)狗定時(shí)器(Watchdog Timer)的利用是很有價(jià)值的。
現(xiàn)今市面上流行的一些單片機(jī),多嵌有內(nèi)部WDT,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,Microchip的PIC列,Atmel的AT89SXX系列和Holtek公司的Htxxx系列。但是這些內(nèi)部看門(mén)狗在工作時(shí),多存在一定的誤差。一些工程師在設(shè)計(jì)的過(guò)程中,由于忽略了這一點(diǎn),導(dǎo)致系統(tǒng)出現(xiàn)異常。MSP430系列單片機(jī)是美國(guó)德州儀器公司(TI)近幾年開(kāi)發(fā)的新一代單片機(jī),該系列是一款16位、具有精簡(jiǎn)指令集、超低功耗的全新概念混合型單片機(jī)。在眾多單片機(jī)系列中,由于它具有極低的功耗、豐富的片內(nèi)外設(shè)和方便靈活的開(kāi)發(fā)手段,已成為一顆耀眼的新星。其內(nèi)部自帶看門(mén)狗及復(fù)位電路,理論上如果程序跑飛,可用看門(mén)狗將其復(fù)位。但在實(shí)際使用過(guò)程中,發(fā)現(xiàn)看門(mén)狗的作用并非萬(wàn)無(wú)一失,以下實(shí)驗(yàn)證明了這一點(diǎn)。實(shí)驗(yàn)電路如圖1所示。
試驗(yàn)程序清單:
#include《msp430x12.h》
void main(void){
p1dir l=0x0f; //設(shè)置p1.2-.p1.0為輸出
for(;;){
volatile unsigned int i;
wdtctl=wdtpw+wdtcncl;
//復(fù)位wdt
piout==0x0t;
i=5000;
do(i--)
while(i!=0);
}}
上述實(shí)驗(yàn)啟動(dòng)后,如果程序正常運(yùn)行,LED會(huì)閃爍。缺省時(shí),MSP430的看門(mén)狗是允許狀態(tài),所運(yùn)行的程序會(huì)不斷地訪問(wèn)看門(mén)狗。理論上,這個(gè)系統(tǒng)是不會(huì)發(fā)生啟動(dòng)失敗的,因?yàn)榧词箚?dòng)失敗,看門(mén)狗也應(yīng)該在數(shù)百毫秒內(nèi)啟動(dòng),復(fù)位整個(gè)系統(tǒng)。基于這種思想,對(duì)單片機(jī)的復(fù)位進(jìn)行測(cè)試。K2斷開(kāi),用K1連續(xù)產(chǎn)生。Reset信號(hào),測(cè)試看門(mén)狗使系統(tǒng)重啟的成功率。K2閉合,則reset端高電平,理論上K1不能有效產(chǎn)生復(fù)位脈沖,觀察看門(mén)狗是否起作用。
實(shí)驗(yàn)結(jié)果與分析
實(shí)驗(yàn)結(jié)果如下:K2斷開(kāi),連續(xù)開(kāi)關(guān)K1,上電重啟系統(tǒng),平均155次失敗1次(LED不閃),即看門(mén)狗失效概率0.6%;K2閉合,連續(xù)開(kāi)關(guān)K1,平均18次失敗1次(LED不閃),且一旦失敗,將連續(xù)失敗下去,看門(mén)狗無(wú)效率占到了約5.5%。另外,當(dāng)采用同樣具有內(nèi)置看門(mén)狗的其他系列單片機(jī)替代實(shí)驗(yàn)中的MSP430,啟動(dòng)程序段作相應(yīng)修改時(shí),實(shí)驗(yàn)結(jié)果仍大致相同,這說(shuō)明具有內(nèi)置看門(mén)狗的單片機(jī)面臨的問(wèn)題是相同的。經(jīng)分析可能有如下原因:
?、儆捎诳撮T(mén)狗的時(shí)鐘不獨(dú)立,計(jì)數(shù)時(shí)鐘與系統(tǒng)為同一分頻鏈路,因此看門(mén)狗不能在系統(tǒng)出現(xiàn)問(wèn)題時(shí)有效運(yùn)作。
?、谟捎跁r(shí)鐘可用軟件設(shè)置,啟動(dòng)失敗時(shí),開(kāi)機(jī)時(shí)鐘可能處于空檔,沒(méi)有時(shí)鐘看門(mén)狗不能生效。
?、塾行┛撮T(mén)狗需要用軟件設(shè)置或啟動(dòng),因此啟動(dòng)失敗后,初始化程序沒(méi)有激活,CPU可能跳轉(zhuǎn)到隨機(jī)代碼,使看門(mén)狗被禁止。這樣的看門(mén)狗是需要有可靠的上電復(fù)位作保證的,因此,從理論上講,原設(shè)計(jì)存在著不合理性。基于上述分析,采用片外看門(mén)狗專(zhuān)用芯片TPS3823由獨(dú)立的分頻振蕩電路提供計(jì)數(shù)脈沖。實(shí)驗(yàn)電路如圖2所示。
上述電路中,TPS3823輸出定時(shí)溢出信號(hào)給Reset端。程序段中,CPU要不斷地通過(guò)I/O口輸出喂狗信號(hào),使看門(mén)狗計(jì)數(shù)器清零。在此電路中重復(fù)上述試驗(yàn)中K1、K2的相同動(dòng)作,系統(tǒng)重啟成功率達(dá)到100%。
未來(lái)的內(nèi)置看門(mén)狗必須有獨(dú)立可靠的時(shí)鐘。系統(tǒng)上電后,看門(mén)狗即為允許狀態(tài),無(wú)需軟件設(shè)置,它只能被外部硬件跳線或內(nèi)部熔絲(fuse)所禁止。目前,如果要求設(shè)計(jì)可靠性較高的嵌入式系統(tǒng),外置看門(mén)狗是必須考慮的。內(nèi)置看門(mén)狗的另一問(wèn)題是系統(tǒng)復(fù)位后,程序應(yīng)判斷是由Reset端正常上電復(fù)位,還是程序跑飛看門(mén)狗所致,由此確定現(xiàn)場(chǎng)數(shù)據(jù)是否應(yīng)該保留。這也是在看門(mén)狗應(yīng)用中所應(yīng)考慮的。
看門(mén)狗系統(tǒng)設(shè)計(jì)技巧
外部看門(mén)狗是嵌入式系統(tǒng)工程師工具箱里重要且關(guān)鍵的工具,然而為了捕捉到故障,且預(yù)防故障的發(fā)生,看們狗必須設(shè)計(jì)得當(dāng)。因此設(shè)計(jì)一個(gè)看門(mén)狗系統(tǒng)時(shí)應(yīng)考慮以下5個(gè)秘訣。
技巧1—監(jiān)測(cè)心跳
一個(gè)外部看門(mén)狗須具備的最簡(jiǎn)單功能是監(jiān)測(cè)由主應(yīng)用處理器產(chǎn)生的一個(gè)定期“心跳(Heartbeat)”信號(hào),以及在心跳異常時(shí)發(fā)出一個(gè)錯(cuò)誤信號(hào)。心跳監(jiān)測(cè)可做為兩種不同的用途:首先,在經(jīng)過(guò)已在軟件執(zhí)行的功能檢查之后,微控制器(MCU)應(yīng)該只是生成心跳,以確保軟件的正常工作。第二,如果系統(tǒng)的實(shí)時(shí)響應(yīng)已受到損害,心跳應(yīng)該要能顯示出來(lái)。
為軟件功能和實(shí)時(shí)響應(yīng)監(jiān)測(cè)心跳,可透過(guò)一個(gè)使用簡(jiǎn)單,“啞巴(Dumb)”的外部看門(mén)狗。外部看門(mén)狗應(yīng)該有沿著一個(gè)心跳必須出現(xiàn)的窗口的能力調(diào)派一個(gè)心跳周期,心跳窗口的作用是當(dāng)系統(tǒng)的實(shí)時(shí)響應(yīng)受到損害時(shí),允許看門(mén)狗進(jìn)行檢測(cè)。而在該功能或?qū)崟r(shí)檢查失敗的情況下,看門(mén)狗會(huì)試圖透過(guò)應(yīng)用處理器的重置來(lái)恢復(fù)系統(tǒng)。
技巧2—采用一個(gè)低效能MCU
簡(jiǎn)易基于定時(shí)器的外部看門(mén)狗可在相對(duì)低成本的狀況下監(jiān)控心跳,但這會(huì)嚴(yán)重限制看門(mén)狗系統(tǒng)的能力和恢復(fù)的可能性。其實(shí),低效能微控制器就可以做為外部看門(mén)狗的定時(shí)器,所以何不為看門(mén)狗增添一些智能且采用微控制器呢?微控制器的固件(Firmware)可被開(kāi)發(fā)用來(lái)滿足增加許多功能的心跳監(jiān)測(cè)窗口所需。
一個(gè)“聰明”的看門(mén)狗有時(shí)被稱(chēng)為監(jiān)督者或安全看門(mén)狗,且已在不同的產(chǎn)業(yè),如汽車(chē)領(lǐng)域?qū)嶋H使用了許多年;另外,通?;谖⒖刂破鞯目撮T(mén)狗以被主要用于安全關(guān)鍵應(yīng)用。目前開(kāi)發(fā)工具已相當(dāng)可用且硬件成本也低,這樣的設(shè)計(jì)具成本效益,且在其他的應(yīng)用中亦是如此。
技巧3—監(jiān)督關(guān)鍵的系統(tǒng)功能
使用一個(gè)小微控制器作為看門(mén)狗的決定,可開(kāi)啟看門(mén)狗該如何使用的無(wú)限可能。其中可賦予智能看門(mén)狗的第一個(gè)角色通常是監(jiān)督的重要系統(tǒng)功能,如系統(tǒng)電流或傳感器狀態(tài)。看門(mén)狗如何能監(jiān)督電流的一個(gè)例子是,采取一個(gè)電流的獨(dú)立測(cè)量,并提供監(jiān)測(cè)值給應(yīng)用處理器,之后,應(yīng)用處理器可比較看門(mén)狗與自身讀取到的數(shù)值。若是兩者之間有分歧,則系統(tǒng)將執(zhí)行故障樹(shù)(FaultTree)此一被應(yīng)用程序視為適當(dāng)?shù)姆绞健?/p>
技巧4—觀察一個(gè)信道
有時(shí)嵌入式系統(tǒng)可像個(gè)看門(mén)狗且應(yīng)用處理器也可以如期工作,但外部的檢查員是處于非響應(yīng)的狀態(tài)。在這樣的狀態(tài)下,綁定智能看門(mén)狗到一個(gè)信道如通用異步收發(fā)器(UART)是可行的。當(dāng)看門(mén)狗被連接到信道時(shí),不僅可以監(jiān)控通道流量,還可以接收對(duì)看門(mén)狗而言的特定指令。
在這方面一個(gè)很好的例子是專(zhuān)為小型衛(wèi)星設(shè)計(jì)的看門(mén)狗,其可監(jiān)視飛行器計(jì)算機(jī)和地面基地臺(tái)間的無(wú)線電通信。如果飛行器計(jì)算機(jī)變得不響應(yīng)無(wú)線電,看門(mén)狗將接收到一個(gè)命令,然后執(zhí)行并重置飛行器計(jì)算機(jī)。
技巧5—考慮外部定時(shí)重置功能
采用一個(gè)微控制器執(zhí)行看門(mén)狗,會(huì)有額外功能增加其復(fù)雜性,以及一個(gè)新軟件單元到系統(tǒng)的設(shè)計(jì),因此,系統(tǒng)中看門(mén)狗的問(wèn)題無(wú)疑是由工程師的頭腦來(lái)監(jiān)看。在看門(mén)狗自行“放大假”的情況下,其將如何恢復(fù)?
選擇之一是使用前面討論的啞巴外部看門(mén)狗定時(shí)器。智能看門(mén)狗會(huì)由啞巴看門(mén)狗的定時(shí)器,使其從被重置的狀況下生成心跳;另一個(gè)選擇是讓?xiě)?yīng)用處理器的行為就像個(gè)看門(mén)狗。這里須小心思考,給予最佳的方式以確保兩個(gè)處理器如預(yù)期地保持正常狀態(tài)。
簡(jiǎn)單設(shè)計(jì)確保看門(mén)狗可行性
智能看門(mén)狗的目的是監(jiān)測(cè)系統(tǒng)和主微控制器,以確保它們依預(yù)期運(yùn)作。在系統(tǒng)設(shè)計(jì)中,看門(mén)狗可允許其所支持的非常多功能,開(kāi)發(fā)者需要牢記,增加智能看門(mén)狗復(fù)雜度的可能性,且看門(mén)狗本身須包含潛在的故障模式和錯(cuò)誤。更重要的是,看門(mén)狗的設(shè)計(jì)應(yīng)保持簡(jiǎn)單與采用最小的必要功能集,將可確保其可被徹底測(cè)試和驗(yàn)證。
看門(mén)狗技術(shù)及其抗干擾措施
隨著工業(yè)自動(dòng)化水平的不斷提高,以MCS-51單片機(jī)為核心所構(gòu)成的單片機(jī)應(yīng)用系統(tǒng)得到了廣泛應(yīng)用,如水泥生料配料系統(tǒng)、電子皮帶秤給料控制、各種現(xiàn)場(chǎng)智能測(cè)量?jī)x表等。但其工作現(xiàn)場(chǎng)條件惡劣,干擾多而且幅度大,嚴(yán)重影響著應(yīng)用系統(tǒng)的正常運(yùn)行與可靠性,甚至使應(yīng)用系統(tǒng)計(jì)算機(jī)進(jìn)入死循環(huán)而癱瘓,通常稱(chēng)為程序“跑飛”。由此引出的計(jì)算機(jī)可靠性問(wèn)題,一直是人們研究的重要課題。
采用屏蔽、濾波、退耦、隔離、接地等措施能有效地提高系統(tǒng)的抗干擾能力,但很難在強(qiáng)干擾發(fā)生時(shí)消除因程序“跑飛”而死機(jī)情況的發(fā)生?!翱撮T(mén)狗”技術(shù)能在程序“跑飛”時(shí)實(shí)現(xiàn)自我診斷并使系統(tǒng)恢復(fù)運(yùn)行,是單片機(jī)應(yīng)用系統(tǒng)抗干擾的有力武器。當(dāng)然,它是以系統(tǒng)的硬、軟件設(shè)計(jì)開(kāi)發(fā)的合理和成熟為條件的,否則將掩蓋系統(tǒng)設(shè)計(jì)開(kāi)發(fā)過(guò)程中的人為缺陷與不足。
“看門(mén)狗”技術(shù)及其對(duì)干擾的抑制
1、程序“跑飛”對(duì)系統(tǒng)的攻擊
?。?)程序計(jì)數(shù)器PC的值被攻擊,成為一隨機(jī)拼合的數(shù)據(jù)。
?。?)系統(tǒng)設(shè)置的控制字與標(biāo)志參數(shù)因“跑飛”后可能被訪問(wèn)而被攻擊。
(3)數(shù)據(jù)存儲(chǔ)器RAM內(nèi)容被攻擊等。
2、 “看門(mén)狗”技術(shù)
“看門(mén)狗”源于“Watch dog、Watch dog timer”,或稱(chēng)定時(shí)監(jiān)視技術(shù),其本質(zhì)是一可復(fù)位的定時(shí)器,其原理如圖1、2所示。
在程序正常運(yùn)行時(shí),計(jì)算機(jī)通過(guò)程序以周期T1向定時(shí)器發(fā)送脈沖觸發(fā)定時(shí)器(或通過(guò)軟件以T1為周期初始化定時(shí)器),而由定時(shí)脈沖控制的定時(shí)器動(dòng)作時(shí)間為T(mén)2(T3),在T1<T2(T3)時(shí),定時(shí)器不會(huì)動(dòng)作,處于休眠狀態(tài)。當(dāng)計(jì)算機(jī)受到強(qiáng)干擾等作用破壞后,程序計(jì)數(shù)器PC中內(nèi)容不再是程序的正確代碼,而可能為一隨機(jī)拼合的數(shù)據(jù),這樣會(huì)使取指不正確,必然導(dǎo)致程序運(yùn)行混亂“跑飛”,進(jìn)入死循環(huán)而死機(jī)。反過(guò)來(lái)由于程序脫離正常循環(huán),也使定時(shí)器觸發(fā)脈沖丟失,在經(jīng)過(guò)T2(T3)時(shí)間后,“看門(mén)狗”定時(shí)器被激活,向CPU發(fā)出Reset信號(hào)使其復(fù)位,將“跑飛”的程序從PC=0000H開(kāi)始,納入正常軌道。但有些生產(chǎn)過(guò)程是不能從頭開(kāi)始的,應(yīng)用程序均是一循環(huán)體,且在開(kāi)始處均有初始化程序,包含各種寄存器、指針、變量、控制字等。此時(shí)狀態(tài)不能反應(yīng)“跑飛”時(shí)的狀態(tài),有時(shí)還有人身、設(shè)備等方面的安全危險(xiǎn)。在這種情況下,程序“跑飛”后應(yīng)設(shè)法找到出錯(cuò)時(shí)的斷點(diǎn),此時(shí)就可以采用二級(jí)“看門(mén)狗”的方式。由程序設(shè)計(jì)時(shí)優(yōu)先級(jí)設(shè)置為最高級(jí)的定時(shí)器一先發(fā)出中斷請(qǐng)求信號(hào),CPU響應(yīng)中斷轉(zhuǎn)向中斷處理程序,進(jìn)而恢復(fù)系統(tǒng)。第二級(jí)“看門(mén)狗”電路只有在第一級(jí)未起作用時(shí)經(jīng)過(guò)T3才起動(dòng)Reset信號(hào)。
3、 “看門(mén)狗”技術(shù)的實(shí)施方法
?。?)在系統(tǒng)構(gòu)成時(shí)選用芯片內(nèi)帶有“看門(mén)狗”電路的單片機(jī),如ATMEL公司的89C52等。
?。?)選配專(zhuān)門(mén)的“看門(mén)狗”電路,如美國(guó)Xicor公司的X25043/45、MAXIM公司的MAX813L等,它們均可構(gòu)成獨(dú)立的“看門(mén)狗”電路。
(3)采用計(jì)數(shù)器、單穩(wěn)態(tài)觸發(fā)器、定時(shí)器等器件構(gòu)成。在圖3中用4060構(gòu)成了一個(gè)二級(jí)“看門(mén)狗”電路。
因/I/N/T/O中斷入口0003H處僅有0003H~000AH單元可為中斷服務(wù)程序所用,很可能容納不下中斷服務(wù)程序,故應(yīng)在其內(nèi)安排一條JMP Watch dog指令。由于“跑飛”,PC值在響應(yīng)中斷前已被破壞,在響應(yīng)中斷后,該內(nèi)容自動(dòng)被壓入堆棧,故一定要用兩條POP A指令將無(wú)用內(nèi)容彈出,以便為中斷返回時(shí)由堆棧給PC賦予“跑飛”處的正確值,這一點(diǎn)在設(shè)計(jì)中斷服務(wù)程序時(shí)尤其要引起重視。通過(guò)對(duì)P1.0取反,恢復(fù)對(duì)4060的觸發(fā)脈沖。在中斷服務(wù)中應(yīng)安排被破壞數(shù)據(jù)的診斷、修復(fù)以及查找“跑飛”處的地址正確入口,并在返回前將其壓棧。當(dāng)執(zhí)行RETI時(shí),“跑飛”處斷點(diǎn)地址入口自動(dòng)彈棧到PC,恢復(fù)正常運(yùn)行。P1.0取反指令在何處插入應(yīng)通過(guò)計(jì)算指令周期讓兩條CLR P1.0指令間隔小于定時(shí)器的定時(shí)時(shí)間T1<T2,可取T2=(1.5~2)T1。
?。?)利用8031片內(nèi)定時(shí)器/計(jì)數(shù)器 8031片內(nèi)有兩個(gè)十六位的定時(shí)器/計(jì)數(shù)器,可用定時(shí)器T0。在應(yīng)用程序?qū)0初始化時(shí),將其定時(shí)時(shí)間T2設(shè)置得比應(yīng)用程序循環(huán)體執(zhí)行時(shí)間T1長(zhǎng),可?。篢2=(1.5~2)T1。當(dāng)程序正常時(shí),T0不會(huì)溢出,“跑飛”時(shí)溢出,定時(shí)器/計(jì)數(shù)器控制寄存器TCON的TF0(TCON.5)由8031內(nèi)部硬件置位TF0=1,發(fā)出中斷信號(hào)。設(shè)8031采用12MHz晶振,經(jīng)定時(shí)器內(nèi)部12分頻后得1MHz的定時(shí)時(shí)鐘,對(duì)應(yīng)定時(shí)時(shí)間1μs,最長(zhǎng)可定時(shí)約65.5ms,如應(yīng)用程序循環(huán)時(shí)間T1=10ms,則可取T2=2T1=20ms,定時(shí)器的初值X可由下式確定:
?。?16-X)×1μs=20ms
X=45536D=B1EOH
定時(shí)器的初始化程序:
MOV TLO,#OEOH
MOV THO,#OB1H;定時(shí)器/計(jì)數(shù)器T0寫(xiě)入初值
MOV TMOD,#O1H;設(shè)置定時(shí)器/計(jì)數(shù)器工作方式1
SETB TRO; 起動(dòng)定時(shí)器/計(jì)數(shù)器T0
在應(yīng)用程序的系統(tǒng)初始化時(shí)用下面指令設(shè)定T0優(yōu)先級(jí):
SETB EA; 開(kāi)放中斷
SETB ETO; 允許T0中斷
SETB PTO; 置T0中斷優(yōu)先級(jí)最高
T0中斷服務(wù)流程與/I/N/T/O中斷服務(wù)流程(見(jiàn)圖4)相比,其中斷入口為000BH,去掉P1.0取反的指令,其余相同???jī)?yōu)先級(jí)別最高的中斷將控制權(quán)重新奪回交給CPU,使系統(tǒng)恢復(fù)正常。
6
4、 斷點(diǎn)的查找與恢復(fù)
斷點(diǎn)的查找與恢復(fù)是人們最關(guān)注的問(wèn)題,我們的方法是擴(kuò)展一外部數(shù)據(jù)存儲(chǔ)器,用以存儲(chǔ)“跑飛”前斷點(diǎn)(或接近斷點(diǎn))的PC之值以及一些重要的變量、指針及控制字的值。利用正常工作時(shí)P1.0向“看門(mén)狗”發(fā)送的觸發(fā)脈沖經(jīng)反向、延時(shí)等作為外部擴(kuò)展RAM的片選信號(hào)以T1為周期定時(shí)對(duì)外部RAM中內(nèi)容進(jìn)行刷新。當(dāng)“跑飛”后因觸發(fā)脈沖丟失而避免了外部RAM被攻擊,保證其內(nèi)容的可靠性。隨著T1的減少,被恢復(fù)的值就愈趨近斷點(diǎn)值,但要非常準(zhǔn)確找到斷點(diǎn),還值得人們研究。在中斷響應(yīng)時(shí)由于P1.0恢復(fù)了輸出觸發(fā)脈沖,故可將斷點(diǎn)值讀出。
結(jié)束語(yǔ)
“看門(mén)狗”是對(duì)付“跑飛”的有力手段,在生產(chǎn)過(guò)程中由于特定的生產(chǎn)條件使得“看門(mén)狗”技術(shù)有其相當(dāng)?shù)淖饔谩N覀冊(cè)趯?duì)某水泥廠微機(jī)配料系統(tǒng)的技術(shù)改造過(guò)程中采用了二級(jí)“看門(mén)狗”技術(shù),該系統(tǒng)運(yùn)行兩年多來(lái)經(jīng)受住了各種強(qiáng)干擾的考驗(yàn),取得了令人滿意的效果。
對(duì)于“跑飛”后的診斷、恢復(fù),尤其是如何更準(zhǔn)確地找到程序“跑飛”斷點(diǎn),對(duì)被損數(shù)據(jù)加以恢復(fù)等方面盡管有許多軟件可以利用,但還是值得人們多加關(guān)注的問(wèn)題。
評(píng)論