從一開始設計單片機程序以來我一直在問自己看門狗究竟應該如何使用?並不斷的尋
找權威答案。以下談一下個人在這些年來對看門狗應用相關的一些思考和觀點,錯誤不可避
免,願討論並改正。
1. 什么是單片機的程序跑飛? 什么是單片機的死機?
所謂的程序跑飛是指 CPU 程序寄存器PC 異常改變,從而CPU 不按預定的順序執行程
序,導致不可遇見的執行結果。
所謂的死機是 CPU 進入一個循環程序后因條件不滿足而無法退出,使得其它程序得不
到執行。
導致單片機程序跑飛和死機的原因可能是軟件本身的錯誤,也有可能是電磁干擾,軟件
原因導致的故障應通過改進軟件的方法來解決,而擔心干擾對系統的影響可使用看門狗電路
來做一層防護。
干擾究竟是什么樣的東西,如何產生的?這個問題實在太難了,我說不清楚。那么干擾
究竟對單片機做了些什么?這個問題很重要,想象一下可能很簡單,我想、干擾唯一能做的
就是改變了單片機內部的隨機存儲器(包括各種寄存器和內部RAM),例如改變了PC 那就
是程序跑飛,改變了一些變量(RAM)那就是死機。我始終認為干擾直接改變程序存儲器
(FLASH)或數據存儲器(EEPROM)的可能性很小。
另外,我無法證實 PC 寄存器受干擾改變的幾率會比一個普通RAM 變量受干擾而改變
的幾率更高,這樣、我們就會得到一種結果:在我們整天談論的程序跑飛現象在死機現象面
前是那么的微不足道,或許我們所遇到的大多數“跑飛”可能就是“死機”或下面要講的“誤
動作”。
2. 看門狗工作原理
看門狗就是一個計數器,有一個輸入用於復位計數值,有一個輸出用於計數溢出時復位
單片機,單片機程序應在計數器溢出前對其進行復位操作(這個過程也叫喂狗)否則自己將
遭到復位。看門狗通常的用法是在主循環里加一個喂狗指令,當單片機遭遇死機或程序跑飛
時這個喂狗指令得不到執行,直到看門狗計數器溢出復位單片機,這樣即達到了當單片機遇
到死機時能讓它重新執行的目的。
看門狗復位相當於硬件復位,所有的寄存器將恢復上電時的默認值,這與軟件調用0
地址的主要區別,應當注意。
3. 中斷喂狗如何看待
針對一個典型的前后台系統,中斷喂狗簡直就是個玩笑,除非整個系統沒有后台程序,
中斷處理所有的事情。思路有點不清析哦☺
4. 更可怕的現象:誤動作(包括不動作)
干擾既然能改變PC 寄存器和RAM,那自然也有可能改變決定輸出的相關變量甚至是輸
出寄存器本身,此種情況正是最可怕的誤動作,在一個系統中它的概率不會低於程序跑飛和
死機現象,在一般的軟件結構中看門狗對它也是無能為力。因此看門狗只能算作是系統的一
道無力防線,系統的穩定還是要靠可靠的硬件設計,軟件系統應建立在可信賴的硬件之上,
不應無限擴大看門狗在抗干擾方面的作用。
根據以上分析可以認為看門狗在一個不穩定的系統中起到一個降低故障率的作用,而不
能徹底解決問題。而在大部分穩定系統中看門狗只是一個定心丸。
既然選擇了單片機開發,那么抗干擾是我們必經的一條路!