從學習單片機開始,就遇見了大名鼎鼎的"看門狗"!
事物都有兩重性, 經過較長時間之后,發現這個狗有許多時候是會幫助人,但是同時它也會一不注意就害了人!
再后來呢,一進入程序,就一直不用看門狗了,直接關閉它!
我們知道,看門狗是一個經過若干時間后,自動重啟程序的功能, 一開始都希望它的起死回生功能可以幫助自己讓程序重新啟動有重新運行! ---- 簡直就是救命稻草!
慢慢地,終于領略到一個大問題,永遠靠看門狗保護,就永遠會讓代碼寫不好!
舉例說:一個3000行的代碼,走到 2800 行時, 看門狗重啟了,那么,如果每次都在這里重啟, 就只能實現前面 2799 行的功能! 而如果在 500 行的地方總是重啟, 這個代碼恐怕就沒有什么用處了!
關閉看門狗之后,就是背水一戰了!
引發看門狗動作的原因,無非就是軟件和硬件兩大因素.
例如: 檢測一個 P1.0 低電平有效的按鍵:
JB P1.0, $
這個時候,如果按鍵壓根是壞的,就會長時間等待下去! 引發看門狗動作 .
如果改一下,變成限制最大檢測時間,即使按鍵壞了,也可以安全退出.
MOV R2,#???
Z_KEY0:
DJNZ R2, Z_KEYS
RET
Z_KEYS:
JB P1.0, Z_KEY0
........ ;處理按鍵程序
這段程序退出后, 可以判斷 R2 的值,如果=0 ,則是沒有檢測到按鍵低電平的錯誤!
按鍵,RS232通信, 等待某種外部結果.... 都容易產生此類問題. (僅供參考.) |