引 言
軟件的可靠性一直是一個關(guān)鍵問題,。任何使用軟件的人都可能會經(jīng)歷計(jì)算機(jī)死機(jī)或程序跑飛的問題,,這種情況在嵌入式系統(tǒng)中也同樣存在,。由于單片機(jī)的抗干擾能力有限,在工業(yè)現(xiàn)場的儀器儀表中,,常會由于電壓不穩(wěn),、電弧干擾等造成死機(jī)。在水表,、電表等無人看守的情況下,,也會因系統(tǒng)遭受干擾而無法重啟。為了保證系統(tǒng)在干擾后能自動恢復(fù)正常,,看門狗定時器(Watchdog Timer)的利用是很有價(jià)值的,。
1 看門狗的作用
看門狗定時器是一個計(jì)數(shù)器,基本功能是在發(fā)生軟件問題和程序跑飛后使系統(tǒng)重新啟動,??撮T狗計(jì)數(shù)器正常工作時自動計(jì)數(shù),程序流程定期將其復(fù)位清零,,如果系統(tǒng)在某處卡死或跑飛,,該定時器將溢出,并將進(jìn)入中斷,。在定時器中斷中執(zhí)行一些復(fù)位操作,,使系統(tǒng)恢復(fù)正常的工作狀態(tài),即在程序沒有正常運(yùn)行期間,,如期復(fù)位看門狗以保證所選擇的定時溢出歸零,,使處理器重新啟動。
2 看門狗問題及相關(guān)實(shí)驗(yàn)
現(xiàn)今市面上流行的一些單片機(jī),,多嵌有內(nèi)部WDT,,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,Microchip的PIC列,,Atmel的AT89SXX系列和Holtek公司的Htxxx系列,。但是這些內(nèi)部看門狗在工作時,多存在一定的誤差,。一些工程師在設(shè)計(jì)的過程中,,由于忽略了這一點(diǎn),導(dǎo)致系統(tǒng)出現(xiàn)異常,。MSP430系列單片機(jī)是美國德州儀器公司(TI)近幾年開發(fā)的新一代單片機(jī),,該系列是一款16位、具有精簡指令集,、超低功耗的全新概念混合型單片機(jī),。在眾多單片機(jī)系列中,由于它具有極低的功耗,、豐富的片內(nèi)外設(shè)和方便靈活的開發(fā)手段,,已成為一顆耀眼的新星。其內(nèi)部自帶看門狗及復(fù)位電路,,理論上如果程序跑飛,,可用看門狗將其復(fù)位。但在實(shí)際使用過程中,,發(fā)現(xiàn)看門狗的作用并非萬無一失,,以下實(shí)驗(yàn)證明了這一點(diǎn)。
實(shí)驗(yàn)電路如圖1所示,。
實(shí)驗(yàn)程序清單:
#include
void main(void){
P1DIR l=0x0f; //設(shè)置P1.2~P1.0為輸出
for(;;){
volatile unsigned int i;
WDTCTL=WDTPW+ WDTCNTCL;
?。瘡?fù)位WDT計(jì)數(shù)器
PIOUT==0x0t; //P1.0~P1.2相互異或
i=5000; //延時
d0(i--);
while(i!=0);
}
}
上述實(shí)驗(yàn)啟動后,,如果程序正常運(yùn)行,LED會閃爍,。缺省時,,MSP430的看門狗是允許狀態(tài),所運(yùn)行的程序會不斷地訪問看門狗,。理論上,,這個系統(tǒng)是不會發(fā)生啟動失敗的,因?yàn)榧词箚邮?,看門狗也應(yīng)該在數(shù)百毫秒內(nèi)啟動,,復(fù)位整個系統(tǒng)?;谶@種思想,,對單片機(jī)的復(fù)位進(jìn)行測試。K2斷開,用K1連續(xù)產(chǎn)生,。Reset信號,,測試看門狗使系統(tǒng)重啟的成功率。K2閉合,,則reset端高電平,,理論上K1不能有效產(chǎn)生復(fù)位脈沖,觀察看門狗是否起作用,。
3 實(shí)驗(yàn)結(jié)果與分析
實(shí)驗(yàn)結(jié)果如下:K2斷開,,連續(xù)開關(guān)K1,上電重啟系統(tǒng),,平均155次失敗1次(LED不閃),,即看門狗失效概率0.6%;K2閉合,連續(xù)開關(guān)K1,,平均18次失敗1次(LED不閃),,且一旦失敗,將連續(xù)失敗下去,,看門狗無效率占到了約5.5%,。
另外,當(dāng)采用同樣具有內(nèi)置看門狗的其他系列單片機(jī)替代實(shí)驗(yàn)中的MSP430,,啟動程序段作相應(yīng)修改時,,實(shí)驗(yàn)結(jié)果仍大致相同,這說明具有內(nèi)置看門狗的單片機(jī)面臨的問題是相同的,。經(jīng)分析可能有如下原因:
?、儆捎诳撮T狗的時鐘不獨(dú)立,計(jì)數(shù)時鐘與系統(tǒng)為同一分頻鏈路,,因此看門狗不能在系統(tǒng)出現(xiàn)問題時有效運(yùn)作,。
②由于時鐘可用軟件設(shè)置,,啟動失敗時,,開機(jī)時鐘可能處于空檔,沒有時鐘看門狗不能生效,。
?、塾行┛撮T狗需要用軟件設(shè)置或啟動,因此啟動失敗后,,初始化程序沒有激活,,CPU可能跳轉(zhuǎn)到隨機(jī)代碼,使看門狗被禁止,。這樣的看門狗是需要有可靠的上電復(fù)位作保證的,,因此,,從理論上講,原設(shè)計(jì)存在著不合理性,?;谏鲜龇治觯捎闷饪撮T狗專用芯片TPS3823由獨(dú)立的分頻振蕩電路提供計(jì)數(shù)脈沖,。實(shí)驗(yàn)電路如圖2所示,。
上述電路中,TPS3823輸出定時溢出信號給Reset端,。程序段中,,CPU要不斷地通過I/O口輸出喂狗信號,使看門狗計(jì)數(shù)器清零,。在此電路中重復(fù)上述試驗(yàn)中K1,、K2的相同動作,系統(tǒng)重啟成功率達(dá)到100%,。
結(jié) 語
未來的內(nèi)置看門狗必須有獨(dú)立可靠的時鐘,。系統(tǒng)上電后,看門狗即為允許狀態(tài),,無需軟件設(shè)置,,它只能被外部硬件跳線或內(nèi)部熔絲(fuse)所禁止。目前,,如果要求設(shè)計(jì)可靠性較高的嵌入式系統(tǒng),,外置看門狗是必須考慮的。內(nèi)置看門狗的另一問題是系統(tǒng)復(fù)位后,,程序應(yīng)判斷是由Reset端正常上電復(fù)位,,還是程序跑飛看門狗所致,由此確定現(xiàn)場數(shù)據(jù)是否應(yīng)該保留,。這也是在看門狗應(yīng)用中所應(yīng)考慮的,。
作者:上海電機(jī)學(xué)院 章銳