zigbee学习之路(十一):看门狗
一.前言
今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来。
二.原理与分析
在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学习之路(十一):看门狗的更多相关文章
- (stm32f103学习总结)—独立看门狗(IWDG)
一.IWDG介绍 1.1 IWDG简介 STM32F1芯片内部含有两个看门狗外设,一个是独立看门狗IWDG,另 一个是窗口看门狗WWDG.两个看门狗外设(独立和窗口)均可用于检测 并解决由软件错误导致 ...
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- zigbee学习之路(十三):基于协议栈的Usart 实验
一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- zigbee学习之路(一):zigbee介绍
一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
- zigbee学习之路(十):串口(接收)
一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...
- zigbee学习之路(九):串口(发送)
一.前言 今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和pc机进行数据的交换和发送,所以我们今天就来学习一下.这个实验所进行的功能是一开始CC25 ...
- zigbee学习之路(八):定时器1(中断)
一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...
随机推荐
- nginx配置之取消index.php同时不影响js,css功能
server { listen 8084; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; ...
- Java中MyEclipse快捷键整理
************************************ MyEclipse 快捷键1(CTRL) ************************************ Ctrl ...
- TweenMax学习一
TweenMaxjs是一个性能很高的js动画框架,它与css3动画具有时间轴的概念.你可以很方便的把动画添加到一个时间轴队列里面去按照你需要的顺序去执行. 官网地址: http://greensock ...
- 浅谈OC对象初始化的三种姿势
一.普通程序猿普通程序员使用最常见路人姿势等场.普普通通,纯属陆仁辈. 陆仁贾写法: // view 1 UIView *v1 = [UIView alloc] initWithFrame:CGRec ...
- android开发中的问题总结(一)
1.设置sdk路径 window->preferences->android->SDK location 中进行修改,如果出现红叉,就说明不正确,选择的路径必须包含tools的那个目 ...
- 用python实现计算1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))类似的公式计算
作业需求: 开发一个简单的python计算器 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 ...
- lkx开发日志2-第一次团队讨论
遇到的问题 冰球与击球手碰撞的形式有两种.第一种:击球手的速度不指向冰球圆心,这样碰撞后冰球会旋转.第二种:击球手的速度指向冰球圆心,直接科运用动量定理计算两者速度的变化.考虑到时间限制,团队假设冰球 ...
- 探索模拟angular的双向绑定
前言 本次探索的demo是基于jquery写的,毕竟jquery提供了强大的选择器,用惯了就离不开它了!angular的双向绑定实在是有点精深,本次探索只实现了文本的双向绑定. View-Model ...
- C++实现黄金分割数列(斐波纳奇数列)(非递归)
斐波纳奇数列: 定义为F0=0,F1=1,......Fn=F(n-1)+F(n-2) 1,1,2,3,5,8,13,21,34,55....... void FibonacciOdd(int n) ...
- 有一道题,大家能帮我看一下哪里错了吗?c++的
有一道题我不知道是哪里错了,大神们帮忙看一下,谢谢! 试题描述: 在四位自然数中有这样一些特点的数:(1)它们是素数:(2)将这些素数加上45后得到一个新的数值:(3)请同学们在这些新的数值中挑选出: ...