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