工作原理如下:“看门狗”技术就是使用一个“看门狗”定时器来对系统时钟不断计数,监视程序的运行。当看门狗定时昌灶器启动运行后,为防止看门狗定时器的不必要溢出而引起单片机的非正常的复位,应定期地把看门狗定时器清0,以保证看门狗定时器不溢出。当由于干扰,使单片机程序“跑飞”或陷入“死循环”时,单片机也就不能正常运行程序来定时地把看门狗定时器清0,当看门狗定时器计满溢出时,将在AT89S52的RST引脚上输出一个正脉冲(宽度为98个时钟周期),使单片耐羡扮机复位,在系统的复位入口0000H处重新开始派迅执行主程序,从而使程序摆脱“跑飞”或“死循环”状态,让单片机归复于正常的工作状态。
跑飞慎镇戚指的是旅槐程序指针混乱,堆宽陵栈被破坏,跑飞算是程序运行问题中较严重的一类,对指针未初始化或未指向值就解引用常会引起跑飞如: struct AA
{
int i
char j
} *p
如未p = (AA *)malloc(sizeof(struct AA))等之类进行初始化就 使用p->i,j等就会使得程序跑飞
单片机程序运行的原理是通过寄存器状态的设置来控制单片机内部以及端口的各个管脚的逻辑状态,来实现预期逻辑功能的目的。而这所有的功能是通过逻辑单元的0-1电平来实现的,这些逻辑可能被外界的电磁干扰或者内部本身逻辑结构的问题,使得出现了一个不可控的逻辑状态,这是单片机会出现很多预料之外的状枝巧毕态,这是我们就说单片机”跑飞了“。
而防止这种状态的出现就是加入“看门狗”机制,也就是说,单片机在运行中,我使用宽州一个定时器,定时猛芹器不断的递增,如果程序运行正常,我会在一段时间内(定时器溢出之前)将其清空,也就是说,只要程序运行正常,这个定时器永远也不会溢出。但,如果程序跑飞了,进入了不可控的状态,则程序不会运行到清空定时器这个命令上来,这是,我强行将单片机重启,使单片机恢复初始状态
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)