一.前言

今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来。

二.原理与分析

在CPU 可能受到一个软件颠覆的情况下,看门狗定时器(WDT)用作一个恢复的方法。当软件在选定时间间隔内不能清除WDT 时,WDT 必须就复位系统。看门狗可用于受到电气噪音、电源故障、静电放电等影响的应用,或需要高可靠性的环境。如果一个应用不需要看门狗功能,可以配置看门狗定时器为一个间隔定时器,这样可以用于在选定的时间间隔产生中断。这也是我们学习看门狗的作用,我们首先要配置WDT寄存器,WDT寄存器如下:

这次实验选用的是看门狗模式,时间间隔1秒检测一次,清除位也要配置,相当于喂狗。

三.程序

#include <ioCC2530.h>

#define uint unsigned int

#define uchar unsigned char

#define LED1  P1_0    //P1_0连接LED1

#define LED2  P1_1    //P1_1连接LED2

#define LED3  P1_4    //P1_4连接LED3

//函数声明 void LED_IO_Init(void); void Watchdog_Init(void); void FeetDog(void); void Delayms(uint xms);

/*********************  函 数 名  : main  功能描述  : WatchDog测试(通过注释掉“喂狗函数”来观察实验现象)  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ****************/

void main(void)

{

LED_IO_Init();  //LED IO初始化

Watchdog_Init();  //看门狗初始化

while(1)

{

LED1=~LED1;

Delayms(1000);            //通过注释测试,可以看到LCD1以少于1s的时间间隔闪烁,说明系统在不停地复位 //

FeetDog();       // 防止程序跑飞

} }

/***************  函 数 名  : LED_IO_Init  功能描述  : LED_IO初始化函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE *********/

void LED_IO_Init(void)

{

P1DIR=0xff;

LED1=0;        //点亮LED1

LED2=0;        //点亮LED2,指示作用

LED3=1;        //点亮LED3,指示作用

}

/************************  函 数 名  : Watchdog_Init  功能描述  : 看门狗初始化函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE *************************/

void Watchdog_Init(void)

{

WDCTL = 0x00;  //这是必须的,打开IDLE才能设置看门狗

WDCTL |= 0x08; //时间间隔一秒,看门狗模式

}

/************************  函 数 名  : FeetDog  功能描述  : 喂狗函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ************************/

void FeetDog(void) {     WDCTL = 0xa0;     WDCTL = 0x50; }

/***************************  函 数 名  : Delayms  功能描述  : 毫秒延时  输入参数  : xms:延时时间,如 i=xms 即延时i/2毫秒  输出参数  : none  返 回 值  : none ***********************/

void Delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=587;j>0;j--);

}

四.总结

通过上面这个程序,我们可以看出,主程序里一直在执行FeetDog()这个函数,也就是说一直在喂狗,使看门狗不进行复位,如果没有喂狗这个函数,看门狗就要咬人了,也就是让程序不断的复位,从头开始执行,看门狗在实际项目应用中,还是很常见的,希望大家多多理解。

zigbee学习之路(十一):看门狗的更多相关文章

  1. (stm32f103学习总结)—独立看门狗(IWDG)

    一.IWDG介绍 1.1 IWDG简介 STM32F1芯片内部含有两个看门狗外设,一个是独立看门狗IWDG,另 一个是窗口看门狗WWDG.两个看门狗外设(独立和窗口)均可用于检测 并解决由软件错误导致 ...

  2. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  3. zigbee学习之路(十三):基于协议栈的Usart 实验

    一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...

  4. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  5. zigbee学习之路(一):zigbee介绍

    一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...

  6. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

  7. zigbee学习之路(十):串口(接收)

    一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...

  8. zigbee学习之路(九):串口(发送)

    一.前言 今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和pc机进行数据的交换和发送,所以我们今天就来学习一下.这个实验所进行的功能是一开始CC25 ...

  9. zigbee学习之路(八):定时器1(中断)

    一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...

随机推荐

  1. JAVASE02-Unit08: 文本数据IO操作 、 异常处理

    Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...

  2. iOS:选择器控件UIPickerView的详解和演示

    选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...

  3. Spring操作指南-针对JDBC配置声明式事务管理(基于注解)

  4. VS2013 ViewData ViewBag Ajax等关键词报错(当前上下文不存在名称)而且不提示也点不出来,但是可以正常运行,

    这个多数问题是因为 视图 的Web.config 内的配置问题 在Views文件夹下  有一个Web.config文件,把里面的版本号(System.Web.Mvc, Version=5.2.2.0) ...

  5. Let’s Encrypt 配置

    刚配置了下Let's Encrypt,chrome浏览器里有绿条出来,看官网其它平台问题应该也不大.我还没有研究这个工作原理,关键是刚花了几千块给公司买了个收费的证书认证.这里写下配置过程(https ...

  6. git用.gitignore忽略指定文件

    .gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得. 1.配置语法: 以斜杠“/”开头 ...

  7. android adb命令

    adb查看logcat adb logcat <TAG>:* *:S 查看指定TAG的Log adb查看最上层activity:linux: adb shell dumpsys activ ...

  8. Android 自定义 view(四)—— onMeasure 方法理解

    前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...

  9. UWP学习开发笔记记录(开篇)

    零零散散开发微软移动2年多了,基本上从未记录或写过任何笔记.所以打算写一些自己的心得和技术的分享,大家一起来共同探讨.虽然现在UWP的工作几乎没有了,但是我感觉大家都是在观望,再看接下来微软的动作,所 ...

  10. No compiler is provided in this environment. Perhaps you are running on a JRE ra

    No compiler is provided in this environment. Perhaps you are running on a JRE ra,有需要的朋友可以参考下. 控制台输出的 ...