单片机看门狗
时间:09-15
来源:互联网
点击:
在单片机系统中,我们经常用硬狗复位MCU。程序经常这样写:
data unsigned char bootflag;
if(bootflag!=0xaa)
{
/* 冷启动代码 */
}
else
{
/* 热启动代码 */
}
最近做了一个东东,发现即使系统冷启动,bootflag仍为0xaa。所以希望各位兄第做东西时,如果用到硬狗,程序中至少要用2个启动检查变量,来查看是冷启动,还是热复位。如果程序的RAM比较紧张,或者你就想用一个字节变量做标志,可以在else中这样写:
else
{
/* 根据系统用到的变量在运行时的值初始化系统 */
if(run_var==VAR_DEF_1)
{
/* 初始化1 */
}
else if(run_var==VAR_DEF_2)
{
/* 初始化2 */
}
else
{
bootflag=0x55;
soft_dog();
}
while(1)
{
/* 实际的程序代码 */
}
}
需要注意的是,单片机被硬狗复位后,外部端口和SFR将还原成默认状态。所以有些SFR
还需要在else中重新初始化。
data unsigned char bootflag;
if(bootflag!=0xaa)
{
/* 冷启动代码 */
}
else
{
/* 热启动代码 */
}
最近做了一个东东,发现即使系统冷启动,bootflag仍为0xaa。所以希望各位兄第做东西时,如果用到硬狗,程序中至少要用2个启动检查变量,来查看是冷启动,还是热复位。如果程序的RAM比较紧张,或者你就想用一个字节变量做标志,可以在else中这样写:
else
{
/* 根据系统用到的变量在运行时的值初始化系统 */
if(run_var==VAR_DEF_1)
{
/* 初始化1 */
}
else if(run_var==VAR_DEF_2)
{
/* 初始化2 */
}
else
{
bootflag=0x55;
soft_dog();
}
while(1)
{
/* 实际的程序代码 */
}
}
需要注意的是,单片机被硬狗复位后,外部端口和SFR将还原成默认状态。所以有些SFR
还需要在else中重新初始化。
- 单片机智能频率信号装置(11-25)
- 单片机在医学信号检测仪中的应用(02-07)
- 单片机应用编程技巧(02-25)
- DSP与单片机通信的多种方案设计(03-08)
- 单片机与PC机串行通信的实现方法 (02-25)
- 单片机与PC通信的简化接口 (05-11)