阅读 188

CC2530(zigbee)入门开发: 看门狗

一、看门狗介绍

看门狗在正常设计的产品里都会用到,主要是解决程序跑飞、异常死机等,程序内部引起的问题情况下可以自动复位重启的功能。

看门狗本身就是个定时器,和普通的定时器差不多。 就是设置一个固定的超时时间,正常情况下,程序比如在看门狗的超时时间到达之前重置时间(这个就叫做喂狗);在程序正常运转的情况下,因为每次都会去喂狗,就不会有超时的现象。如果因为程序逻辑出现问题,程序在指定的时间内没办法去喂狗,就导致看门狗定时器超时,超时就会产生软件复位,程序重启,这样就可以避免产品宕机。  这种重启操作一般都可以解决这种偶然产生的一些程序BUG。 就像我们常用的电脑,卡死,或者出现一些奇怪问题,重启差不多都能解决。

下面就介绍CC2530的看门狗程序配置,具体的配置直接截图出来了。 在手册里起始介绍的起始已经很详细了,只要明白看门狗这个功能的作用、含义,就可以直接看第3章的代码去实操,分析代码的配置对着手册看一遍就差不多了。

二、看门狗配置

image.png

image.png

image.png

image.png

三、示例代码

#include <ioCC2530.h> #define uint unsigned int #define RLED  P1_0 #define GLED  P1_1 void CC2530_InitLEDIO(void) { P1DIR |= 0x03;  //P10、P11定义为输出 RLED = 1; GLED = 1; //LED灯初始化为关    } void CC2530_Init_Watchdog(void) { WDCTL = 0x00; //时间间隔一秒,看门狗模式 WDCTL |= 0x08; //启动看门狗 } void  CC2530_SET_MAIN_CLOCK(source)  {                                   if(source)  {                             CLKCONCMD |= 0x40;          /*RC*/                while(!(CLKCONSTA &0X40));  /*待稳*/        }                                        else {                        CLKCONCMD &= ~0x47;        /*晶振*/              while((CLKCONSTA &0X40));  /*待稳*/   }                                        } void CC2530_FeetDog(void) { WDCTL = 0xa0; WDCTL = 0x50; } void CC2530_Delay(uint n) { uint i; for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); } void main(void) { CC2530_SET_MAIN_CLOCK(0) ; CC2530_InitLEDIO(); CC2530_Init_Watchdog();              CC2530_Delay(10000);          RLED=0;         GLED=0;        while(1) { CC2530_FeetDog(); //通过屏蔽该指令,实现看门狗的测试 } //喂狗指令(加入后系统不复位,小灯不闪烁) }


作者:DS小龙哥
链接:https://juejin.cn/post/7022304127002607630


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐