最近一个基于LPC2387的方案遇到了棘手的死机问题,板子的网口在客户那运行了十天左右会无法连通。这种现象很难复制,也没有规律。只能祭出大招看门狗,死机时候Ping不通那肯定网络线程Down掉了,那就在网络线程中喂狗吧。
看门狗驱动:
//初始化watchdog
void InitWDT(unsigned long t)
{
WDCLKSEL = 0; //use IRC as watchdog clock
WDTC = t*1000000; // t*4/4MHZ
WDMOD = 0x03;
}
void FeedWDT()
{
Disable_Int(); //禁止中断,以免喂狗操作被打断出现错误
WDFEED = 0xAA;
WDFEED = 0x55; //必须连续执行
Enable_Int();
}
注意事项:
初始玩看门狗后必须紧跟着喂一次狗,否则看门狗功能无法正常运行。