在单片机系统中,我们经常用硬狗复位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) { /* 实际的程序代码 */ }
}
[NextPage]
需要注意的是,单片机被硬狗复位后,外部端口和SFR将还原成默认状态。所以有些SFR
还需要在else中重新初始化 本**来自中国IT实验室http://embed.chinaitlab.com/ |