看門狗復(fù)位的應(yīng)用技巧
說起看門狗這個名字還是蠻有趣的,它的作用就是在主人走神的時候咬他一口,把他咬醒。實際點來說,就是當(dāng)MCU運行過程中,在某處進(jìn)入了死循環(huán),或者受到干擾造成PC指針指向了無程序區(qū),都會導(dǎo)致程序沒反應(yīng),按鍵失效,屏幕內(nèi)容不變等問題。這時如果正確使用了看門狗,就會讓PC指針復(fù)位,從頭開始執(zhí)行程序。
看門狗復(fù)位的應(yīng)用技巧包括三個方面:
一: 判斷是否需要使用。 如果要使用看門狗的話,需要做一些寄存器的配置,在程序區(qū)的某些地方也要加入喂狗指令來防止看門狗復(fù)位,有一定的工作量,所以用與不用需要考慮一下。能不使用看門狗的場合,要求是系統(tǒng)即使死機(jī)也問題不大,等待人過來斷電復(fù)位即可的情況。但是這種情況已經(jīng)很少了,所以絕大多數(shù)情況下看門狗都要加上。比如有溫控功能的電熱水器,假如電加熱已經(jīng)啟動,但是系統(tǒng)死機(jī)了,溫控失效,電加熱也不會關(guān)閉,這時水溫就會一直升高,直到水被蒸干,然后電加熱損壞或引發(fā)火災(zāi),或者人被開水燙傷。這時有看門狗復(fù)位,系統(tǒng)就會恢復(fù)正常,檢測到溫度夠了,就會關(guān)閉電加熱的。
二、保證看門狗工作正常?撮T狗除了進(jìn)行寄存器配置之外,喂狗函數(shù)的位置也很重要,沒處理好就會發(fā)生不該復(fù)位時復(fù)位了,或改復(fù)位的時候沒有復(fù)位,可能的原因是在可能出現(xiàn)的死循環(huán)里喂狗了。
三、保證看門狗復(fù)位時不會引起系統(tǒng)異常。能否做到這一點,是工程師水平高低的重要體現(xiàn)。單片機(jī)系統(tǒng)一般都是和某個外在的系統(tǒng)連接的,可以是機(jī)械系統(tǒng),水系統(tǒng),電氣系統(tǒng)等,要保證單片機(jī)系統(tǒng)的復(fù)位不會造成這些外接系統(tǒng)的異常。主要的問題點在于單片機(jī)復(fù)位時IO口狀態(tài)會改變?yōu)槌跏贾担拇嫫鲿䦶?fù)位,內(nèi)存會清空。比如電梯,單片機(jī)發(fā)出一個向上的信號,于是轎廂開始向上,但是這時因為某種干擾,單片機(jī)死機(jī)觸發(fā)看門狗復(fù)位,IO初始化為關(guān)閉,轎廂失去了向上信號,這時是讓轎廂迅速下墜?還是單片機(jī)反應(yīng)過來之后重新輸出向上信號,又拉住了轎廂?工程師需要去思考并解決這些問題,做控制的人需要對安全性有充足的認(rèn)識。
好了,前面是常規(guī)知識,下面講一個有創(chuàng)意的技巧。基于軟件復(fù)位的優(yōu)勢和必要性,我設(shè)計的軟件一般會定時主動地進(jìn)行自復(fù)位,目的是讓變量清零,消除一些長時間運行可能造成的問題。這個功能有些型號的單片機(jī)提供了便利的設(shè)計,直接賦值給某個寄存器就可以立刻復(fù)位了,大部分芯片不支持這個功能。
那怎么辦呢,這時可以活用看門狗功能, 就是通過一個標(biāo)志來控制某個地方是否喂狗,軟件想主動復(fù)位的時候,關(guān)閉標(biāo)志,然后系統(tǒng)就不喂狗了。這樣到了看門狗復(fù)位的時間,就會發(fā)生復(fù)位了。這里主要要處理好停止喂狗和看門狗復(fù)位之間的時間,可以進(jìn)行一些變量保存,IO關(guān)閉等,目的是保證上面提到的第三點。
編輯:admin 最后修改時間:2018-05-18