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

举报
DS小龙哥 发表于 2022/02/28 09:30:01 2022/02/28
【摘要】 看门狗在正常设计的产品里都会用到,主要是解决程序跑飞、异常死机等,程序内部引起的问题情况下可以自动复位重启的功能。 看门狗本身就是个定时器,和普通的定时器差不多。 就是设置一个固定的超时时间。

一、看门狗介绍

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

看门狗本身就是个定时器,和普通的定时器差不多。 就是设置一个固定的超时时间,正常情况下,程序比如在看门狗的超时时间到达之前重置时间(这个就叫做喂狗);在程序正常运转的情况下,因为每次都会去喂狗,就不会有超时的现象。如果因为程序逻辑出现问题,程序在指定的时间内没办法去喂狗,就导致看门狗定时器超时,超时就会产生软件复位,程序重启,这样就可以避免产品宕机。 这种重启操作一般都可以解决这种偶然产生的一些程序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();	//通过屏蔽该指令,实现看门狗的测试
	}	//喂狗指令(加入后系统不复位,小灯不闪烁)
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。