打印

单片机看门狗

[复制链接]
1408|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flycat2008|  楼主 | 2008-8-2 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在单片机系统中,我们经常用硬狗复位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/

相关帖子

沙发
NE5532| | 2008-8-2 17:15 | 只看该作者

你写N个都可能分不清楚

RAM的保持电压很低。单片机硬件复位,一般是不会清除RAM数据的,所以“上次一”的数据可能会被保留下来。

要做复位判断,你得找上电复位以后有确定值的寄存器来看,并且在看完了以后马上修改他的值。很多MCU的STATU寄存器都会提供这个服务。

此文的作者明显没有弄清什么叫“复位”

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

103

帖子

0

粉丝