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