从学习单片机开始,就遇见了大名鼎鼎的"看门狗"!
事物都有两重性, 经过较长时间之后,发现这个狗有许多时候是会帮助人,但是同时它也会一不注意就害了人!
再后来呢,一进入程序,就一直不用看门狗了,直接关闭它!
我们知道,看门狗是一个经过若干时间后,自动重启程序的功能, 一开始都希望它的起死回生功能可以帮助自己让程序重新启动有重新运行! ---- 简直就是救命稻草!
慢慢地,终于领略到一个大问题,永远靠看门狗保护,就永远会让代码写不好!
举例说:一个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通信, 等待某种外部结果.... 都容易产生此类问题. (仅供参考.) |