看门狗程序
如何设计STM32单片机独立看门狗程序?
如何设计STM32单片机独立看门狗程序?[导读]今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O 引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
1.1独立看门狗简介看门狗定时器 (WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。
如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。
看门狗主要是用于在发生系统软件故障时,将系统复位。
也可以用于将系统从休眠或空闲模式唤醒。
8051单片机看门狗原理C语言演示程序(以STC89C52RC单片机为例包含最简单的程序只有三条)
***************************************************************************/
#include <Reg52.H>
sfr WDT_CONTR=0xE1;
//定义特殊功能寄存器:STC 单片机看门狗控制寄存器
#define uchar unsigned char
//初始化时两盏灯都熄灭 LED=1; LED_busy=1;
TMOD=0x21; 为串行口波特率发生器
TH0=0x4C; TL0=0x00; IE=0x82; TR0=1;
//定时器 0 工作在方式 1,作为 16 位定时器;定时器 1 工作在方式 2,作
//定时器 0 装初值:每隔 50ms 溢出一次
#define true 1
#define false 0
#define WEIGOU WDT_CONTR=0x34
//看门狗启动设置和“喂狗”操作
sbit LED=P1^6; sbit LED_busy=P1^7;
//信号灯,系统正常工作就一闪一闪的 //工作灯,上电灭一会儿(约 800ms),然后正常工作的时
注解:这里顺便说一下,一般教材上叫“看门狗定时器”,其实定时器原理 还是计数器,只是计的是时钟周期,所以我为了初学者好理解叫统一叫“计数 器”,这里阐明一下。
明白了上面的原理,我们在设计程序时,先根据看门狗计数器的位数和系统 的时钟周期算一下计数器计满数需要的时间,就是说在这个时间内“看门狗”计 数器是丌会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,
由于现在 AT89S52 用的很广泛,所以我先说说 ATMEL 的看门狗;再说说本次试验用的 STC89C52RC 的看 门狗;注意两个不一样!!!
单片机看门狗程序
门狗”WDT的功能;此单片机看门狗由51hei独家提供LISTP=18F458INCLUDE”
P18F458.INC”
DEYHEQU0X20DEYLEQUDEYH+1
ORG0X00GOTOMAINORG0X30
;*************初始化子程序*****************INITIALCLRFTRISD;D口
;************单片机看门狗主程序
****************************MAINNOPCALLINITIAL;系统初始化
MOVLW0X00MOVWFPORTD;D口送00H,发光二极管亮
CALLDELAYMOVLW0XFFMOVWFPORTD;D口送FFH,发光二极管灭
LOOPGOTOLOOP;死循环,等待看门狗复位END
/*主程序*/main(){initial();/*初始化,设定看门狗的相关寄存器*/PORTD=
0X00;/*D口送00H,发光二极管亮*/DELAY();/*给予一定时间的延时*/PORTD
=0XFF;/*D口送FFH,发光二极管灭*/while(1){;}/*死循环,等待看门狗溢出
复位*/}
-------------------汇编语言版本的单片机看门狗程序----------------;此程序实现”看
单片机看门狗程序
/*此程序实现单片机”看门狗”WDT的功能*/
#include”p18f458.h”
unsignedlongi;
/*系统初始化子程序*/voidinitial(){TRISD = 0X00;/*D口设为输出*/}
/*延时子程序*/voue;}
看门狗定时器的使用流程
看门狗定时器的使用流程简介看门狗定时器是一种用于监控系统运行状态的硬件设备。
当系统出现故障或超时的情况下,看门狗定时器会自动重启系统,以确保系统的稳定运行。
本文将介绍看门狗定时器的使用流程,包括初始化、配置、启动和监控等步骤。
初始化初始化是使用看门狗定时器的第一步。
在使用之前,需要确保系统已经正确连接了看门狗定时器,并且加载了相应的驱动程序。
步骤1.打开终端或命令行界面。
2.使用以下命令初始化看门狗定时器:$ watchdog_init3.检查初始化结果,确保看门狗定时器成功初始化。
配置配置是使用看门狗定时器的关键步骤。
通过配置,可以设置看门狗定时器的超时时间和动作。
步骤1.打开终端或命令行界面。
2.使用以下命令配置看门狗定时器的超时时间:$ watchdog_set_timeout 5这里将超时时间设置为5秒,你可以根据需要进行调整。
3. 使用以下命令配置看门狗定时器的重启动作:$ watchdog_set_action restart这里将重启动作设置为自动重启。
启动启动是使用看门狗定时器的关键步骤。
通过启动,可以使看门狗定时器开始监测系统运行状态。
步骤1.打开终端或命令行界面。
2.使用以下命令启动看门狗定时器:$ watchdog_start3.检查启动结果,确保看门狗定时器成功启动。
监控监控是看门狗定时器的主要功能。
通过监控,可以实时检测系统的运行状态,并在系统超时或故障时进行相应的动作。
步骤1.让系统正常运行。
2.看门狗定时器会定时检测系统的运行状态。
3.如果系统在超时时间内未接收到看门狗定时器的喂狗信号,则看门狗定时器会触发动作,例如自动重启系统。
总结通过以上的流程,我们可以使用看门狗定时器来监控系统的运行状态。
首先,我们需要初始化看门狗定时器,并配置超时时间和重启动作。
然后,启动看门狗定时器,并让其监控系统的运行状态。
在系统发生故障或超时的情况下,看门狗定时器会自动触发相应的动作,以确保系统的稳定运行。
STC89系列单片机看门狗的使用及应用程序
STC89 系列单片机看门狗的使用及应用程序
看门狗概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O 引脚相连,该I/O 引脚通过单
片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,这在我们的单片机教程网51hei 以前做过相关的电路介绍。
不过这样会给电路设计带
来复杂,STC 单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置
就可实现看门狗的应用,STC89 系列单片机内部有一个专门的看门狗定时器
寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
单片机汇编语言实现看门狗
CS=0; if(bRegion==0) //write the page addr else WriteByte(cAddress); WriteByte(cData); SCK=0; // CS=1; } uchar ReadEpm(uchar cAddress,bit bRegion) /* 读入一个字节,cAddress 为读入地址,bRegion 为页 */ { uchar cData; while((ReadReg()&0x01)==1);//the device is busy CS=0; if(bRegion==0) else WriteByte(cAddress); cData=ReadByte(); CS=1; return cData; } main() { WriteReg(0x00);//set the watchdog time as 1.4s CS=1; CS=0; } //reset the watchdog
SCK=0; SCK=1; ucData<<=1; } } uchar ReadReg() { uchar ucData; CS=0; WriteByte(RDSR); ucData=ReadByte(); CS=1; return ucData; } uchar WriteReg(uchar ucData) { uchar ucTemp; ucTemp=ReadReg(); if((ucTemp&0x01)==1) //the device is busy return 0; CS=0; WriteByte(WREN);//when write the WREN, the cs must have a high level CS=1; CS=0; WriteByte(WRSR); WriteByte(ucData); CS=1; return 1; } void WriteEpm(uchar cData,uchar cAddress,bit bRegion) /* 写入一个字节,cData 为写入的数,cAddress 为写入地址,bRegion 为页 */ { while((ReadReg()&0x01)==1); //the device is busy CS=0; WriteByte(WREN); //when write the wren , the cs must have a high level CS=1; //write register //read register
《看门狗2》全主支线任务及收集流程图文攻略
《看门狗2》全主⽀线任务及收集流程图⽂攻略 《看门狗2》继承了前作的优点,同时玩家可⾃由的探索世界,游戏元素更加丰富,但其难度也随之增加,其按键操作、技能树选择、主线⽀线任务、物品收集都是关键点,⼤家初⼊游戏可能会遇到卡关的情况,或者觉得难以上⼿,今天⼩编带来“昨天”分享的《看门狗2》图⽂攻略,包含全任务及物品收集,助⼤家顺利通关。
操作按键指令按键开启地图触摸板(轻按)多媒体播放器触摸板(按住)接受/关闭/追踪触摸板(视情况按住)瞄准L2(按住)情景快速骇⼊L1(轻按)透析⽬标L1(按住)物品栏⽅向上键(按住)取出/收回武器⽅向上键(轻按)部署跳跃者⽅向左键(轻按)切换跳跃着⽅向左键(按住)表情动作栏⽅向下键(按住)使⽤表情动作⽅向下键(轻按)部署四轴飞⾏器⽅向右键(轻按)切换到四轴飞⾏器⽅向右键(按住)切换冲刺状态L3切换到瞄准镜按下L3(瞄准时)开启智能⼿机O P T I O N键(轻按)攀爬/跳跃R2射击R2(瞄准时)使⽤投掷物或是⼤规模骇⼊R1(轻按)瞄准投掷物R1(轻按)互动/进⼊车辆△近⾝搏⽃○找掩护×武器装弹□(轻按)控制遥控装置/监视器□(按住)切换到⽹络⼊侵按下R3多媒体操作R3 主⾓背景介绍 本作的背景设定于美国旧⾦⼭的开放世界,并在旧⾦⼭分为六个不同的区域,市中⼼区、市政区、海岸、奥克兰、马林和硅⾕,每⼀个区域都有着⾃⼰独特的美学设计。
同时,旧⾦⼭也继芝加哥之后,成为下⼀个安装c t O S(C e n t r a lO p e r a t i n g S y s t e m,中央操作系统)监控系统的城市,它连着着居民的⼀切。
游戏主⾓是⼀个名为马可仕·哈洛威(M a r c u s H o l l o w a y)的⿊客。
在孩童时期,升级后的c t O S系统c t O S2.0连接了他的个⼈信息,向他错误地指控了⼀项⾃⼰未曾犯下的罪⾏。
他意识到该系统会给旧⾦⼭的⽆辜平民带来危害,于是决定加⼊⿊客组织D e d S e c,打败c t O S2.0和它的创造者布鲁姆(B l u m e)。
看门狗的工作原理和应用
看门狗的工作原理和应用简介看门狗是一种常用的硬件监控机制,主要用于确保系统或设备的稳定运行。
本文将介绍看门狗的工作原理和应用。
工作原理看门狗的工作原理基于定时器和复位机制,其具体流程如下:1.启动定时器:看门狗通过启动一个定时器来计时。
2.监控程序:看门狗监控系统或设备中的关键程序,确保其正常运行。
3.定时器复位:监控程序定时重置定时器的计时。
4.定时器溢出:如果定时器计时超过了预定的时间,即定时器溢出。
5.复位信号:定时器溢出后,看门狗发送一个复位信号给系统或设备。
6.设备重启:系统或设备在接收到复位信号后会进行重启操作,重新启动。
应用场景看门狗的应用非常广泛,在许多领域中发挥着重要的作用。
以下列举了几个常见的应用场景:•嵌入式系统:嵌入式系统通常是长时间运行的,看门狗可以确保系统在长时间运行后仍然稳定,避免死机或其他故障。
•服务器:服务器运行的应用程序往往非常复杂,存在各种潜在的问题,看门狗可以监控服务器的关键进程,及时发现异常情况并进行复位。
•工业自动化:在工业自动化过程中,看门狗可以监控各种设备和传感器,实时检测故障,并进行相应的处理,确保生产过程的稳定进行。
•汽车电子:随着汽车电子的普及和发展,看门狗在汽车电子中也有重要的应用,可以监控汽车各个系统的运行情况,确保汽车的安全和稳定。
•无人机:无人机是一种高度自动化的飞行器,看门狗可以监控无人机的各个部件,检测故障并采取相应的措施,确保飞行安全。
优点看门狗的应用有许多优点,包括:•提高系统的稳定性:看门狗可以监控系统的运行状态,及时发现并处理异常情况,保证系统的稳定性和可靠性。
•自动化处理:看门狗可以自动检测和处理故障,减少人工干预的需求,提高系统的自动化程度。
•快速恢复:一旦发生故障,看门狗可以快速进行复位操作,使系统尽快恢复正常运行。
•灵活性:看门狗可以根据实际需求进行定制,灵活适应不同应用场景。
注意事项在使用看门狗的过程中,需要注意以下几点:•设定合适的定时器时间:定时器时间的设置需要根据具体的应用场景来确定,过短的时间可能会导致频繁的复位,过长的时间则可能会延误故障的处理。
51单片机 c语言看门狗程序怎么写
51单片机c语言看门狗程序怎么写看门狗在51单片机电路里的作用是防止程序“跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。
89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:#include<reg51.h>...sfr WDTRST = 0xA6;...void main(){WDTRST=0x1E;;//初始化看门狗WDTRST=0xE1;//初始化看门狗for(;;){WDTRST=0x1E;;//喂狗指令WDTRST=0xE1;//喂狗指令}}可见,你只要在程序的大循环体内加一条喂狗指令就行。
但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。
实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813、X25045.....具体编程就要看芯片的参考资料了。
例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。
WREN 0x06 设置写允许位WRDI 0x04 复位写允许位RDSR 0x05 读状态寄存器WRSR 0x01 写状态寄存器READ 0x03/0x0b 读操作时内部EEPROM页地址WRITE 0x02/0x0a 写操作时内部EEPROM页地址#include <reg51.h>sbit CS= P2^7;sbit SO= P2^6;sbit SCK= P2^5;sbit SI= P2^4;#define WREN 0x06 //#define WRDI 0x04 //#define RDSR 0x05 //#define WRSR 0x01 //#define READ0 0x03 //#define READ1 0x0b //#define WRITE0 0x02 //#define WRITE1 0x0a //#define uchar unsigned charuchar ReadByte() //read a byte from device{bit bData;uchar ucLoop;uchar ucData;for(ucLoop=0;ucLoop<8;ucLoop++){SCK=1;SCK=0;bData=SO;ucData<<=1;if(bData){ ucData|=0x01; }}return ucData;}void WriteByte(uchar ucData)//write a byte to device {uchar ucLoop;for(ucLoop=0;ucLoop<8;ucLoop++){if((ucData&0x80)==0) //the MSB send first{SI=0;}else{SI=1;}SCK=0;SCK=1;ucData<<=1;}}uchar ReadReg() //read register{uchar ucData;CS=0;WriteByte(RDSR);CS=1;return ucData;}uchar WriteReg(uchar ucData) //write register{uchar ucTemp;ucTemp=ReadReg();if((ucTemp&0x01)==1) //the device is busyreturn 0;CS=0;WriteByte(WREN);//when write the WREN, the cs must have a high levelCS=1;CS=0;WriteByte(WRSR);WriteByte(ucData);CS=1;return 1;}void WriteEpm(uchar cData,uchar cAddress,bit bRegion)/* 写入一个字节,cData为写入的数,cAddress为写入地址,bRegion为页*/ {while((ReadReg()&0x01)==1); //the device is busyCS=0;WriteByte(WREN); //when write the wren , the cs must have a high levelCS=1;CS=0;if(bRegion==0){ WriteByte(WRITE0);} //write the page addrelse{WriteByte(WRITE1);}WriteByte(cAddress);WriteByte(cData);SCK=0; //CS=1;}uchar ReadEpm(uchar cAddress,bit bRegion)/* 读入一个字节,cAddress为读入地址,bRegion为页*/{uchar cData;while((ReadReg()&0x01)==1);//the device is busyCS=0;if(bRegion==0)else{WriteByte(READ1);}WriteByte(cAddress);cData=ReadByte();CS=1;return cData;}main(){WriteReg(0x00);//set the watchdog time as 1.4sCS=1;CS=0; //reset the watchdog}回复:xuzhimin9514所有的89S系列都带狗,所有的80C系列都不带狗。
我的独立看门狗总结
我的独立看门狗总结
一、独立看门狗IWDG概述
1.)看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误
引起的故障;当计数器达到给定的超时值时,触发一个中断或产生系统复位。
2.)功能图:(由于本人无法贴图,请见参考手册,125页)
3.)独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。
4.)其中IWDG_PR为预分频器寄存器,IWDG_RLR为重新加载计数器寄存器,IWDG_KR为控制器存器。
IWDG_SR为状态寄存器。
(见图)
5.)IWDG_KR写入OXCCCC,启动独立看门狗功能,计数器值开始递减,减到0时,看门狗复位。
IWDG_KR写入0XAAAA,计数器值被重新加载,即避免看门狗复位。
IWDG_KR写入0X5555,则允许写IWDG_PR 和IWDG_RLR寄存器写操作。
写入其它值,IWDG_PR 和IWDG_RLR被保护,数据将无法写入这两个寄存器。
IWDG_SR状态寄存器指示预分频值和递减
计数器是否正在被更新。
IWDG_RLR寄存器范围为0-0xfff.
6.)如果用户在选择字节中启用了硬件看门狗功能,在系统上电复位后,。
看门狗使用说明书
目录第一章查看工控机是否已安装看门狗 (1)第二章安装看门狗程序步骤 (2)第三章看门狗具体事项设置 (5)第四章查看看门狗运行状况 (8)第一章查看工控机是否已安装看门狗步骤如下:在开始菜单中打开控制面板,查看是否有一个WatchServiceConfiguration程序,如下图所示:如果有的话就直接按照第三章进行设置即可,否则,按照第二章进行安装,安装完以后再按照第三章进行设置。
第二章安装看门狗程序步骤第一步:打开看门狗程序,界面显示如下图所示:第二步:点击Next按钮后,选中第三项Adwantech[w83627HF]WDT,然后点击下一步,界面显示如下图所示:第三步:点击Install进行安装,界面显示如下图所示:程序自行安装完成以后,点击Finish完成。
如下图所示:第四步:安装完成以后会提示重启系统,选中Yes,I want to restart my computer now,点击OK按钮重启即可安装完毕,系统重启以后再根据第三章设置看门狗的事项。
第三章看门狗具体事项设置具体设置步骤如下所示:第一步:在控制面板中找到已安装好的WatchServiceConfiguration程序,打开此程序后,在General窗口中显示如下图所示:提示:如果在安装过程中,General窗口并没有Start watchdogservice on boot复选框和StartService按钮的话,就直接跳到第三步进行设置,如下图所示:第二步:在Start watchdogservice on boot复选框中打上对勾,然后点击Start Service后,该窗口显示如下图所示:第三步:点击Setting窗口,该窗口显示如下图所示:第四步:在Setting窗口中,Timer Span设置问15s,在Watch Mode模式中选中System,并且在Log Event复选框中打上对勾。
如下图所示:第五步:鼠标点击Apply按钮,再点击Enable按钮,最后点击OK按钮即可。
51单片机看门狗软件程序设计
51单片机看门狗软件设计一、设计原理单片机中有两个定时器,我们可以用这两个定时器来对主程序的运行进行监控。
可以对T1设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。
二、设计方案1、看门狗定时器T1的设置。
在初始化程序块中设置T1的工作方式,并开启中断和计数功能。
系统Fosc=12 MHz,T1为16位计数器,最大计数值为65 535,T1输入计数频率是.Fosc/12,溢出周期为(65 535+1)/1=65 536(μs)。
2、计算主控程序循环一次的耗时。
考虑系统各功能模块及其循环次数,系统设置"看门狗"定时器T1计时50 ms (T1的初值为65 536-50000=15 536=3CB0H)。
主控程序的每次循环都将刷新T1的初值。
如程序进入"死循环"而T1的初值在50 ms内未被刷新,这时"看门狗"定时器T1将溢出并申请中断。
溢出中断服务程序开始工作,将看门狗标志num加1。
当num 的值等于100时,说明看门狗定时器已经计时5s,此时,单片机I/O端口P1.0输出高电平,对程序进行复位。
3.、在此过程中,喂狗代码将被穿插于程序中循环体末尾。
当循环体结束时,喂狗代码执行,关闭定时器1、清空num并重新初始化定时器设置。
若循环体进入死循环,喂狗代码无法执行,num将一直累加至100,此时程序复位。
三、关键代码“看门狗“定时器设置程序代码如下:TMOD=0x10; //设置TMOD寄存器,定时器1设为方式1TL1=0xB0; //设置定时器初值低8位TH1=0x3C; //设置定时器初值高8位,设置为计时50msET1=1; //开定时器1溢出中断EA=1; //开总中断控制TF1=0; //定时器1溢出中断标志清零TR1=1; //开定时器1溢出中断服务程序代码如下:void int_T1() interrupt 3 using 3 //定时器1溢出中断服务程序{num++;//每溢出一次标志加1if (num==100)//当标志等于100时,即计时5s {P1=~(0x01); //P1.0输出1}}喂狗程序代码如下:TR1=0; //喂狗代码,关定时器1TL1=0xB0; //重新设置定时器初值TH1=0x3C;TF1=0;//定时器1溢出中断标志清零TR1=1; //开定时器1四、电路图。
micropython看门狗的用法
micropython看门狗的用法使用MicroPython时,看门狗(watchdog)是一项非常实用的功能。
它可以确保程序在出现故障或意外情况时能够进行自我恢复,并保持系统的稳定性和可靠性。
本文将详细介绍MicroPython中看门狗的用法,并提供一些示例代码供参考。
一、什么是看门狗?看门狗是一种硬件或软件机制,旨在监控系统的运行状态,并在出现故障时重新启动系统或执行其他指定的操作。
其原理是定期向看门狗喂食,如果在预定的时间内没有再次喂食,看门狗会产生一个复位信号,导致系统重新启动。
二、MicroPython中的看门狗功能在MicroPython中,看门狗被实现为一个库(库是一些常用代码的集合),需要通过导入相应的模块来使用。
首先,需要申明并实例化一个看门狗对象。
pythonimport machinewdt = machine.WDT(timeout=5000)在上述代码中,我们使用`machine`模块创建了一个看门狗对象`wdt`,并指定了一个超时时间为5000毫秒(也可以根据实际需要设置其他数值)。
超时时间是指看门狗等待的时间,如果在超时时间内没有重置看门狗,它将触发复位。
三、看门狗的喂食与喂食时间在MicroPython中,喂食看门狗很简单,只需调用看门狗对象的`feed()`方法即可。
喂食后,看门狗会重新开始计时,以防止超时发生。
pythonwdt.feed()通常情况下,我们会在程序的主循环中调用`wdt.feed()`,确保看门狗得到定期喂食。
四、如何处理看门狗超时?当看门狗超时时,可以采取一些措施来处理超时情况。
最常见的做法是执行系统重启,以便在故障发生时恢复系统。
pythondef reset():machine.reset()wdt.irq(reset)在上述代码中,我们定义了一个名为`reset()`的函数,并在看门狗的中断事件发生时调用该函数。
`reset()`函数使用`machine`模块的`reset()`方法实现系统重启。
看门狗程序
在程序初始化中向看门狗寄存器(WDTRST地址是0A6H)中先写入01EH,再写入0E1H。
即可激活看门狗。
汇编格式
Org 0000
Ljmp begin
Begin:
Mov 0A6H,#01EH ;先送1E
Mov 0A6H,#0E1H ;后送E1
;在程序初始化中激活看门狗。
……
……
For:
……
Mov 0A6H,#01EH ;先送1E
Mov 0A6H,#0E1H ;后送E1
;喂狗指令
……
Ljmp for
c格式
在C语言中要增加一个声明语句。
在AT89X51.h声明文件中增加一行 sfr WDTRST = 0xA6;
Main()
{
WDTRST=0x1E;
WDTRST=0xE1;//初始化看门狗。
While (1)
{
WDTRST=0x1E;
WDTRST=0xE1;//喂狗指令
}
}
注意事项:
1. 89S51的看门狗必须由程序激活后才开始工作。
所以必须保证CPU有可靠的上电复位。
否则看门狗也无法工作。
2.看门狗使用的是CPU的晶振。
在晶振停振的时候看门狗也无效。
3. 89S51只有14位计数器。
在16383个机器周期内必须至少喂狗一次。
而且这个时间是固定的,无法更改。
当晶振为12M时每16个毫秒需喂狗一次。
Linux:看门狗watchdog.sh程序编写示例
Linux:看门狗watchdog.sh程序编写⽰例学习和借鉴前⼈经验,加之美化⼀番1.###2.# @Author: hanxiaoshun3.# @Date: 2020-07-08 15:53:344.# @LastEditTime: 2020-09-05 10:54:455.# @LastEditors: Please set LastEditors6.# @Description: In User Settings Edit7.# @FilePath: \shunzi\config\owatchdog.sh8.###9.#!/bin/sh10.#kill -9 $(ps -ef|grep owatchdog.sh | grep -v grep | awk '{print $2}')11.# 监控node 服务12.chktask_node(){13.#echo "check task name with" $114.pidcount=`ps -ef|grep $1 | grep -v grep |wc -l`15.if [ $pidcount -eq 0 ]; then16.#echo "no run"17.node /home/shunzi/node/testServer.js > /dev/null 2>&118.echo "$CURTIME run $1 " >> /tmp/owatchdog_log.txt19.fi20.}21.# 监控python server服务22.chktask_python3(){23.echo "check task name with" $124.pidcount=`ps -ef|grep $1 | grep -v grep | wc -l`25.if [ $pidcount -eq 0 ]; then26.python3 /home/shunzi/python/test_flask_server.py >/dev/null 2>&1 &27.echo "$CURTIME run $1 " >> /tmp/owatchdog_log.txt28.fi29.}30.31.while true32.do33.CURTIME=`date "+%Y-%m-%d %H:%M:%S"`34.35.# 监控服务36.if [ -d "/home/shunzi/python/" ]; then37.cd/home/shunzi/python/38.chktask_python3 test_flask_server.py39.fi40.if [ -d "/home/shunzi/node/" ]; then41.cd /home/shunzi/node/42.chktask_node testServer.js43.fi44.45.# 监控脚本46.#PID=`ps -ef|grep watch_test | grep -v grep | wc -l`47.#if [ $PID -eq 0 ]; then48.# if [ -f /usr/bin/watch_test.sh ]; then49.# /usr/bin/watch_test.sh &50.# fi51.#fi52.53.# 监控命令⾏54.count=`ps -ef|grep redis|grep -v grep|wc -l`55.if [ $count -eq 0 ]; then56.if [ -f /home/shunzi/redis_place/redis/local/redis/bin/redis-server ]; then57./home/vcontroller/redis_place/redis/local/redis/bin/redis-server /home/shunzi/redis_place/redis/local/redis/bin/redis.conf --daemonize yes --port 967358.fi59.fi60.sleep 361.62.done。
plc中看门狗的用法
plc中看门狗的用法
在PLC(可编程逻辑控制器)中,看门狗(Watchdog)是一种用于监视系统运行状态的机制。
它通常是一个计时器,用于定期检查PLC是否正常运行。
如果PLC由于某种原因停止响应或出现故障,看门狗计时器将达到设定的时间阈值,触发一个动作,例如重新启动PLC,以确保系统的稳定性和可靠性。
以下是在PLC中使用看门狗的一般步骤和用法:
* 看门狗计时器的设置:
* 在PLC编程软件中,通常可以设置一个看门狗计时器。
这个计时器的时间阈值取决于系统的要求和稳定性需求。
在PLC程序中,你需要定期重置这个计时器,以确保它不会超时。
* 周期性地重置看门狗计时器:
* 在PLC程序中,需要在适当的位置周期性地重置看门狗计时器。
这通常是在主程序的循环中的某个位置。
通过重置计时器,系统表明PLC仍然在正常运行。
* 检测看门狗计时器是否超时:
* PLC会周期性地检查看门狗计时器是否超时。
如果计时器超时,系统会认为PLC处于异常状态,并执行预定的动作,比如重新启动PLC。
* 执行异常处理动作:
* 当看门狗计时器超时时,可以执行一些异常处理动作,例如记录日志、发送警报、重新初始化系统或重新启动PLC。
请注意,具体的看门狗的实现方式可能因PLC型号、制造商和应用程序而有所不同。
因此,查阅相关的PLC文档和手册,以获取与你使用的具体PLC相匹配的信息。
DSP28335看门狗中断程序如何变为看门狗重启程序
/*DSP28335看门狗中断程序如何变为看门狗重启程序编28335C程序时没有现成的看门狗重启程序, 但有许多看门狗中断程序, 中断程序运行正常, 取消主循环程序的喂狗S ervic eDog(), 可进入中断.想改为看门狗重启程序 ,按IT 28335的说明修改, 将中断设置语句S ysCtr lRegs.SCSR = BI T1;改为重启设置语句SysC trlRe gs.SC SR =0; 取消喂狗, 程序并不能重启, 将SysCt rlReg s.SCS R =0放到:"PieC trlRe gs.PI ECTRL.bit.ENPIE = 1; //su3 E nable thePIE b lock Pie CtrlR egs.P IEIER1.bit.INTx8 = 1; //su4Enabl e PIE Grop u 1 I NT8 IER|= M_INT1; //su5 E nable CPUint1 EIN T; Ser viceD og(); //su7 "的后面, 取消主循环程序的Ser viceD og();程序重启, 这是花了几天时间的调试结果*////201506串口//#inclu de "D SP2833x_De vice.h" //DSP2833x H eader fileInclu de Fi le#i nclud e "DS P2833x_Exa mples.h" // D SP2833x Ex ample s Inc ludeFile#de finePOST_SHIFT 0 // S hiftresul ts af ter t he en tiresampl e tab le is full#def ine I NLINE_SHIF T 1 // Sh ift r esult s asthe d ata i s tak en fr om th e res ultsregsi ter#defin e NO_SHIFT0 // Do n ot sh ift t he re sults//// ADC star t par amete rs#i f (CP U_FRQ_150M HZ) // Defa ult - 150MHz S YSCLK OUT #def ine A DC_MO DCLK0x3 // HSP CLK = SYSC LKOUT/2*AD C_MOD CLK2=150/(2*3) = 25.0 MHz#endi f#if (CPU_FRQ_100MH Z)#defi ne AD C_MOD CLK 0x2 // HSPC LK =SYSCL KOUT/2*ADC_MODC LK2 = 100/(2*2) =25.0MHz#endif#def ine A DC_CK PS 0x0 // A DC mo duleclock = HS PCLK/1 = 25.5MH z/(1) =25.0MHz#defin e ADC_SHCL K 0x1 // S/H widt h inADC m odule peri ods = 2ADC c ycle#defi ne AV G 1000 // Av erage samp le li mit#defin e ZOF FSET 0x00 // Ave rageZerooffse t#de fineBUF_S IZE 1024 //Sampl e buf fer s ize////////in t3//#defi ne LED1G pioD ataRe gs.GP BDAT.bit.G PIO60 //#d efine LE D2 Gp ioDat aRegs.GPBD AT.bi t.GPI O61 ///I2CUin t16 g eti2c data[1];U int16 getd ata=0;Uin t16 c lei=0;//U int16 time rinte rrupt i=0;//uns igned long time rinte rrupt i=0;unsig ned l ong c ounti=0;//unsi gnedlongLASTc ounti=0;u nsign ed ch ar nocou nt=0;//un signe d lon g Wa keCou nt;U int16ad1data[1025];Ui nt16jj;//Uin t16 ii;//Uint16 kk;```````````````````````````````Ui nt16ad2d ata[1025];Uint16 a ddata;Uin t16 temp[1];U int16 bigc ount=0;Ui nt16 i2c wretu rn;U int16 i2crret urn;Uint16 ad max=0; Uint16 t esten d=0;U int16 sav eadma x=0;///Uint16 o penco unt=0;Uin t16 h add32c=0;Uint16 lad d32c=0;Ui nt16nowAD R24C32=0;Uint16 ADR24C32=0;//2015i2cU int16 addr=0;//i2cvo id I nitI2C(voi d);Uint16 I2C_xrdy();U int16 I2C_rrdy();U int16 Read byte(Uint16 *R amAdd r, Ui nt16RomAd dress);Ui nt16Write byte(Uint16 Ra mdata, Uin t16 R omAdd ress);int errup t voi d wak eint_isr(v oid);//i2c//v oid I nsert ionSo rt(Ui nt16 inp ut[],intlen);int errup t voi d xin t4_is r(voi d);i nterr upt v oid x int3_isr(v oid);//in terru pt vo id IS RTime r0(vo id);voidscic_echob ack_i nit(v oid);void scic_fifo_init(void);vo id sc ic_xm it(in t a);void scic_msg(char*msg);v oid I nitI2CGpio(void);v oid I nitI2C(voi d);///i2c/******************************IO口初始化****************************/ voidInitI2C(vo id){//Initi alize I2C-A: // I nitia lizeI2C I2c aRegs.I2CM DR.bi t.IRS =0;I2caReg s.I2C SAR = 0x0050; // Sl ave a ddres s - E EPROM cont rol c ode I2c aRegs.I2CP SC.al l = 9; // Pre scale r - n eed 7-12 M hz on modu le cl k I2caR egs.I2CCLK L = 15; // NO TE: m ust b e non zeroI2caRe gs.I2CCLKH = 15; // NOT E: mu st be nonzeroI2caReg s.I2C IER.a ll =0x00;//Enabl e SCD & AR DY in terru ptsI2caReg s.I2C MDR.b it.IR S = 1; //TakeI2C o ut of rese t//tbd...}v oid I nitI2CGpio( voi d ){EALLO W;/* Enab le in terna l pul l-upfor t he se lecte d pin s */// Pu ll-up s can be e nable d ordisab led d isabl ed by theuser.// This will enab le th e pul lupsfor t he sp ecifi ed pi ns.// Com mentout o therunwan ted l ines.Gp ioCtr lRegs.GPBP UD.bi t.GPI O32 = 0; //Enabl e pul l-upfor G PIO32 (SDA A) G pioCt rlReg s.GPB PUD.b it.GP IO33= 0; // Enab le pu ll-up forGPIO33(SC LA)/* Se t qua lific ation forselec ted p ins t o asy nch o nly *///Thiswillselec t asy nch (no qu alifi catio n) fo r the sele ctedpins.// C ommen t out othe r unw anted line s.GpioC trlRe gs.GP BQSEL1.bit.GPIO32 =3; // Asy nch i nputGPIO32 (SD AA) Gp ioCtr lRegs.GPBQ SEL1.bit.G PIO33 = 3; //Async h inp ut GP IO33(SCLA)/* Conf igure SCIpinsusing GPIO regs*/// This spec ifies whic h ofthe p ossib le GP IO pi ns wi ll be I2Cfunct ional pins.//Comme nt ou t oth er un wante d lin es.Gpio CtrlR egs.G PBMUX1.bit.GPIO32 =1; // Co nfigu re GP IO32for S DAA o perat ionGpioC trlRe gs.GP BMUX1.bit.GPIO33 = 1; // Con figur e GPI O33 f or SC LAop erati onE DIS;}/////////////////i2cvo id sc i_ini t(voi d) { E ALLOW; Sci cRegs.SCIC CR.al l =0x0007;ScicR egs.S CICTL1.all =0x0003;// S cicRe gs.SC ICTL2.all=0x0003; Sc icReg s.SCI CTL2.bit.T XINTE NA=1;ScicR egs.S CICTL2.bit.RXBK INTEN A=1;//Scic Regs.SCIHB AUD =0x0001;/// Sc icReg s.SCI LBAUD=0x0086; Sci cRegs.SCIC TL1.b it.SW RESET=1; ED IS; } /////xx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx main(){Ui nt16i;//AD步骤1.初始化系统控制:P LL、看门狗、使能外设时钟 Ini tSysC trl();///t imer0 xi ntste p1 // InitG pio(); //// xi ntste p1//x_Sci.c fi le. c omI nitSc icGpi o();//IN T HIS P RO FO UIn itXin tf16G pio();//20241123In itI2C Gpio();///i21cI nitI2C();//i2c///有这才有串口输出s cic_f ifo_i nit(); // In itial ize t he SC I FIF O//初始化SCIFIFOs cic_e choba ck_in it(); //Inita lizeSCI f or Pi eCtrl Regs.PIEIE R8.bi t.INT x5=1;// PI E Gro up 9, int1 20141123 Pi eCtrl Regs.PIEIE R8.bi t.INT x6=1;// PI E Gro up 9, INT2 20141123// IE R = 0x100;// Ena ble C PU IN T EINT;I ER =0x80;// 20141120Enabl e CPU INT EI NT; //20141123E ALLOW; // Y记入C接收中断向量表 //Pi eVect Table.SCIT XINTC = &u art_s end; // 记入C中断向量表 ED IS; // EINT; ERTM;///rrr2015f or (i=0; i<5;i++) {sc ic_xm it (107);sci c_xmi t (105);scic_xmit(104); }///i2c2803Re adbyt e(get i2cda ta, 31007) ;a dmax=geti2cdata[0];DELA Y_US(100); Rea dbyte(geti2cdat a, 31005) ; //低位DELAY_US(100); lad d32c= geti2cdat a[0]& 0x00ff; //ladd32c= n owADR24C32&0x00ff ; Read byte(geti2cdata, 31004) ; //高位D ELAY_US(100);hadd32c=ge ti2cd ata[0];///// la dd32c= now ADR24C32&0x00ff ; DEL AY_US(100);ADR24C32=h add32c<<8; //左移nowAD R24C32=ADR24C32+ lad d32c; //// no wADR24C32= ADR24C32;//Rea dbyte(geti2cdat a, 31009); // open coun t // DE LAY_U S(100); //open count=geti2cdat a[0];// DEL AY_US(100);//o penco unt=o penco unt+1;// Writ ebyte( ope ncoun t,31009 ) ;//Writ ebyte( ope ncoun t<<8,31008 ) ;/// i2cstop= I2C_24c32_re ad_by te(0, 30000) ;////// s top sc ic_xm it (h add32c); scic_xmit (lad d32c); scic_xmit (adm ax);sc ic_xm it (55);///// i2c2803 ///ADXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X //本例的时钟配置E ALLOW;//EA LLOW允许DSP指令对关键寄存器进行操作,宏定义EALLO W,设置状态寄存器1的C6位设置与复 Sys CtrlR egs.H ISPCP.all= ADC_MODC LK; // HSP CLK =SYSC LKOUT/ADC_MODCL KEDIS;///清除状态寄存器1的C6位 //与E ALLOW对应使用//步骤2.初始化GPI O///inig ipo3();//initg pio1();//xints tep2 EALL OW; Gpi oCtrl Regs.GPBMU X2.bi t.GPI O61 = 0; // GPI O61 = GPIO61 Gpio CtrlR egs.G PBDIR.bit.GPIO61 = 1;EDIS;// EALL OW; // This is n eeded to w riteto EA LLOWprote ctedregis ters// Pi eVect Table.SCIT XINTA = &I SRTxU art;//EDIS; //禁止CPU中断DINT;//关全局中断tim ero x intst ep3Ini tPieC trl();//初始化Pie控制寄存器x intst ep3 ///所有P IE中断的默认状态为禁止,并且标志位被清除t imero// Me mCopy(&Ram funcs LoadS tart, &Ram funcs LoadE nd, &Ramfu ncsRu nStar t); // I nitFl ash();//201505c opy // S tep 3. Cle ar al l int errup ts an d ini tiali ze PI E vec tor t able:// D isabl e CPU inte rrupt s//初始化P ie控制寄存器,ti mero ///AD// Dis ableCPU i nterr uptsand c learall C PU in terru pt fl ags://禁止CPU中断,清除所有CPU中断标志I ER =0x0000;//关所有CPU级中断xi ntste p3 IFR = 0x0000;////清除CPU所有中断标志xints tep3 Ini tPieV ectTa ble();//BO TH//初始化中断向量表xin tstep3/////////in t3EALLO W; // Thi s isneede d towrite to E ALLOW prot ected regi stersPi eVect Table.WAKE INT = &wak eint_isr; ////su1E DIS; //Thisis ne ededto di sable writ e toEALLO W pro tecte d reg ister s EALL OW; //SysCt rlReg s.SCS R = B IT1; //su2 //D OG中断可放在这有效 //Sy sCtrl Regs.SCSR=0; //su2放在这REST无效 // SysCt rlReg s.SCS R =0; //s u2 r est e ngEDIS;PieCt rlReg s.PIE CTRL.bit.E NPIE= 1; //s u3 En ablethe P IE bl ock PieC trlRe gs.PI EIER1.bit.INTx8 = 1; //su4 E nable PIEGropu 1 IN T8 IER |= M_I NT1; //s u5 En ableCPU i nt1 EINT;//su6Enabl e Glo bal I nterr uptsS ervic eDog(); //su7E ALLOW;// s.S CSR = BIT1; //su2 Sy sCtrl Regs.SCSR=0; //su2 DOG REST放在这才有效 // SysC trlRe gs.SC SR =0; //su2 resteng EDIS;E ALLOW; // Dis ableD og();Sy sCtrl Regs.WDCR= 0x002f; //su8 EDIS;EALLO W; // This is n eeded to w riteto EA LLOWprote ctedregis ters ////time ro// EA LLOW; //Thisis ne ededto wr ite t o EAL LOW p rotec ted r egist ers //Inter rupts that areusedin th is ex ample arere-ma ppedto // I SR fu nctio ns fo und w ithin this file. //im c没有这一句INT不中断///PieV ectTa ble.T INT0= &IS RTime r0; //2015RRRR xxxxx填入定时器中断地趣到向量表T001 //P ieVec tTabl e.XIN T13 = &cpu_time r1_is r; //Pie VectT able.TINT2 = &c pu_ti mer2_isr;/// ED IS; /////n nnnnn nnnnn nnnnn nn2015 ////////timer o // time ro////// Ini tCpuT imers(); //T002 20141109RRR RR Fo r thi s exa mple, only init ializ e the CpuTimer s /// Co nfigC puTim er(&C puTim er0,150,100000); //0.1S中断定时器 //没有这一句t imero不中断//Conf igCpu Timer(&Cpu Timer0, 150, 1000);//T003RRRR2015 F=100K,10U S //Co nfigC puTim er(&C puTim er0,150,100);// F=100K,10US //(定时器名,工作频率150, 周期US, ) 9 //Co nfigC puTim er(&C puTim er1,150,1000000); //C onfig CpuTi mer(&CpuTi mer2, 150, 1000000);// Ena ble C PU in t1 wh ich i s con necte d toCPU-T imer0, CP U int13 // whi ch is conn ected to C PU-Ti mer 1, and CPUint 14, wh ich i s con necte d // t o CPU-Time r 2:////// CpuT imer0Regs.TCR.a ll =0x4001; //T004 141130 Us e wri te-on ly in struc tionto se t TSS bit= 0 //C puTim er1Re gs.TC R.all = 0x4001; // 141130Use w rite-onlyinstr uctio n toset T SS bi t = 0// CpuT imer2Regs.TCR.a ll =0x4001; // 141130Use writ e-onl y ins truct ion t o set TSSbit = 0IER |= M_I NT1; ///T006 //I ER |= M_IN T13; //IER |= M_I NT14; // E INT; //141130 Enab le Gl obalinter ruptINTM/// ER TM; // 141130Enabl e Glo bal r ealti me in terru pt DB GM// E nable TINT0 inthe P IE: G roup1 int errup t 7 ////// Pie CtrlR egs.P IEIER1.bit.INTx7 = 1; //这句放在这会停机PieVe ctTab le.XI NT3 = &xin t3_is r; //填中断向量地址 Pi eVect Table.XINT4 = &xint4_isr;//set p3E DIS; //Thisis ne ededto di sable writ e toEALLO W pro tecte d reg ister s PieC trlRe gs.PI ECTRL.bit.ENPIE = 1;// xi ntSte p 5En ablethe P IE bl ock Pi eCtrl Regs.PIEIE R12.b it.IN Tx1 = 1; //xin tStep 5int3 // En ablePIE G ropu//2 INT1P ieCtr lRegs.PIEI ER12.bit.I NTx2= 1; //x int S tep 5int4 //Enabl e PIE Grop u 12INT2// IE R |=M_INT12; //使能 CPU中断 // Enab le CP U int12 //IER |= M_I NT1;使能 CPU中断I ER =0x100;//IER |= M_INT13;//IER |= M_INT14;//ERTM; // Enab le Gl obalrealt ime i nterr upt D BGM //Enabl e TIN T0 in thePIE:Group 1 in terru pt 7 // 、EI NT; // E nable Glob al in terru pt IN TM//tim er0 // Enab le TI NT0 i n the PIE: Grou p 1 i nterr upt 7 ///// PieC trlRe gs.PI EIER1.bit.INTx7 = 1;/////T07 //ti meroIER |= M_I NT12; //xintS tep 5使能 CP U 中断EINT; //xintS tep 5使能全局中断 // Enab le Gl obalInter rupts //timer0E RTM; //xxxxx Enabl e Glo bal r ealti me in terru pt DB GM ///// S tartC puTim er0(); //// 2015rrrr T08 //t imero //// co nfigt estle d();// GPI O58 a nd GP IO59are i nputsEA LLOW;G pioCt rlReg s.GPB MUX2.bit.G PIO58 = 0;// GPI OXint Step5GpioC trlRe gs.GP BDIR.bit.G PIO58 = 0;// in put Gpi oCtrl Regs.GPBQS EL2.b it.GP IO58= 0; //Xint3 Sync h toSYSCL KOUTonlyG pioCt rlReg s.GPB MUX2.bit.G PIO59 = 0;// GPI OGpioC trlRe gs.GP BDIR.bit.G PIO59 = 0;// in put Gpi oCtrl Regs.GPBQS EL2.b it.GP IO59= 2; //XINT4 Qual usin g 6 s ample sGpioC trlRe gs.GP BCTRL.bit.QUALP RD0 = 0xFF; // Xin tStep 5Eac h sam plingwind ow is 510*SYSCL KOUTE DIS;// G PIO58 is X INT3, GPIO59 is XINT4// GP IO58is XI NT3,GPIO59 isXINT4E ALLOW;GpioI ntReg s.GPI OXINT3SEL.bit.G PIOSE L = 58; // Xi nt3 X intSt ep 5i s GPI O58 Gpi oIntR egs.G PIOXI NT4SE L.bit.GPIO SEL = 59; //XINT4 Xint Step5is G PIO59E DIS; EAL LOW;// Co nfigu re XI NT3 a nd XI NT4 XIn trupt Regs.XINT3CR.bi t.POL ARITY = 0; // F allin g edg e int errup tXIntr uptRe gs.XI NT4CR.bit.POLAR ITY = 1; // Ris ing e dge i nterr upt// Enab le XI NT3 a nd XI NT4 XIntr uptRe gs.XI NT3CR.bit.ENABL E = 1; // Ena ble X int3X Intru ptReg s.XIN T4CR.bit.E NABLE = 1; // Enab le XI NT4 EDI S;// LED1 = 1;// LED2 = 1; ///GpioD ataRe gs.GP BDAT.bit.G PIO60;///Gpio DataR egs.G PBDAT.bit.GPIO61;//////////i nt3 //AD///XX XX//在使用的中断被重新影射到文件中的ISR函数// EA LLOW;//在写EA LLOW保护寄存器,该语句是必须的//piev ectta ble.A DCINT = &a dc_is r;/// E DIS;//当禁止写EALL OW保护寄存器///XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X/////////////////////////////ADXX XXXXXI nitAd c(); // Forthisexamp le, i nit t he AD C本程序是要初始化A DC// Spe cific ADCsetup forthisexamp le:///Adc Regs.ADCTR L1.bi t.ACQ_PS =ADC_S HCLK; //r rrrrr r20131024Seque ntial mode: Sam ple r ateAd cRegs.ADCT RL1.b it.AC Q_PS=1;//ADC_S HCLK; //0;/// Sequ entia l mod e:Sa mplerate = 1/[(2+ACQ_P S)*AD C clo ck in ns]// ADC_S HCLK;=1 = 1/(3*40ns) =8.3MHz(for150 M HzSY SCLKO UT) // = 1/(3*80ns) =4.17M Hz (f or 100 MHz SYSC LKOUT) //AC Q_PS=bit11-8 AC Q_PS3-ACQ_PS0 //采集窗口大小。
alwaysup看门狗的用法
看门狗是一种软件定时器,它能够对计算机系统进行监控,检测系统是否出现故障,并在必要时进行自动恢复,以确保系统的稳定性和可靠性。
它通常用于保护计算机系统免受恶意软件攻击、硬件故障、网络问题等影响,以确保系统能够正常运行,避免系统崩溃和数据丢失。
看门狗的工作原理是通过监测系统的各种参数(如内存、处理器、硬盘等)来检测系统是否出现故障。
它能够实时检测系统的状态,一旦发现系统出现故障,看门狗会立即启动自动恢复机制,例如重启系统、恢复系统文件等,以确保系统能够尽快恢复正常运行。
看门狗的具体使用方法如下:1. 首先,在计算机系统中安装看门狗软件,并根据需要设置相应的监控参数和恢复机制。
例如,可以设置看门狗软件在系统出现故障时自动重启系统,或者在系统运行缓慢时自动清理系统垃圾文件。
2. 启动看门狗软件,并确保其正常运行。
看门狗软件通常会在系统托盘中显示图标,用户可以通过点击图标来查看软件的状态和设置。
3. 在计算机系统中执行可能导致系统故障的操作,例如运行病毒扫描程序、安装新的软件、修改系统配置等。
这些操作可能会导致系统运行缓慢、崩溃等问题,看门狗软件可以在这些问题发生时自动恢复系统。
4. 观察看门狗软件的状态栏,如果发现看门狗软件开始闪烁,说明系统已经检测到故障。
这是看门狗软件在自动恢复系统的过程中发出的警报,用户需要等待看门狗软件完成恢复操作。
5. 等待看门狗软件完成恢复操作,通常需要几秒到几分钟的时间。
在等待过程中,用户可以查看看门狗软件的状态栏,了解恢复操作的进度。
6. 如果看门狗软件无法自动恢复系统,可以尝试手动重启系统或使用其他恢复工具进行恢复。
在这种情况下,用户需要使用其他恢复工具来手动修复系统问题,或者重新安装操作系统。
需要注意的是,看门狗软件并不能完全避免系统故障的发生,但它可以在系统出现故障时提供及时的恢复机制,从而减少系统故障对业务运行的影响。
此外,用户也应该定期备份系统文件和数据,以避免数据丢失。
alwaysup看门狗的用法
alwaysup看门狗的用法AlwaysUp是一款极为实用的Windows服务管理工具,其中的AlwaysUp看门狗功能是该软件的一大亮点。
本文将介绍AlwaysUp看门狗功能的用法,帮助用户更好地了解和使用这一功能。
AlwaysUp看门狗是一种监控机制,用于确保关键应用程序或服务在系统运行时的稳定性。
它能够监视应用程序的运行状态,一旦应用程序在某种原因下终止或出现故障,AlwaysUp看门狗会自动将其重新启动,从而保证服务的持续可用性。
启用看门狗功能非常简单。
首先,确保已经安装并打开了AlwaysUp软件。
然后,按照以下步骤进行操作。
第一步,找到要监控的应用程序或服务。
在AlwaysUp主界面的左侧窗口中,可以看到已经安装在系统中的应用程序或服务列表。
如果目标应用程序或服务不在列表中,可以通过点击"添加应用程序"按钮来添加新的应用程序或服务。
第二步,选择目标应用程序或服务。
在列表中选中要启用看门狗的应用程序或服务,然后点击界面上的"编辑选定的应用程序"按钮。
第三步,在弹出的编辑窗口中,点击"看门狗"选项卡。
在该选项卡中,可以设置看门狗的相关参数。
第四步,启用看门狗。
在看门狗选项卡中,将"启用看门狗"的复选框打勾。
然后,可以根据实际需求调整监控参数。
在看门狗选项卡中,可以设置检测应用程序状态的时间间隔、重试次数以及操作。
监测时间间隔表示两次检测之间的时间间隔,默认为5秒,可以根据实际情况进行调整。
重试次数表示在连续多少次检测失败后才会触发看门狗的重新启动操作,默认为3次。
在操作一栏中,可以选择看门狗自动重启应用程序,或者发送通知邮件给管理员。
第五步,保存设置并启动应用程序或服务。
在编辑窗口中点击"保存"按钮,然后可以点击主界面上的"启动"按钮来启动应用程序或服务。
现在,我们已经成功启用了AlwaysUp看门狗功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TMS320F2812 Watchdog范例程序FILE: Example_28xWatchdog.c//// TITLE: DSP28 Watchdog interrupt test program.//// ASSUMPTIONS://// This program requires the DSP28 header files. To compile the// program as is, it should reside in the DSP28/examples/watchdog// sub-directory.//// As supplied, this project is configured for "boot to H0" operation.//// DESCRIPTION:// This program exercises the watchdog on the F2812/F2810 parts.//// First the watchdog is connected to the WAKEINT interrupt of the// PIE block. The code is then put into an infinite loop.//// The user can select to feed the watchdog key register or not// by commenting one line of code in the infinite loop.//// If the watchdog key register is fed by the KickDog function// then the WAKEINT interrupt is not taken. If the key register// is not fed by the KickDog function then WAKEINT will be taken.//// Watch Variables:// LoopCount for the number of times through the infinite loop// WakeCount for the number of times through WAKEINT////###########################################################################//// Ver | dd mmm yyyy | Who | Description of changes// =====|=============|======|=============================================== // 0.57| 29 May 2002 | L.H. | Initial Release//###########################################################################// Step 0. Include required header files// DSP28_Device.h: device specific definitions #include statements for// all of the peripheral .h definition files.// DSP28_Example.h is specific for the given example.#include "DSP28_Device.h"// Prototype statements for functions found within this file.interrupt void wakeint_isr(void);// Global variable for this exampleUint32 WakeCount;Uint32 LoopCount;void main(void){// Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state: // For this example, this function is found in Example_WatchdogSysCtrl.cInitSysCtrl();// Step 2. Select GPIO for the device or for the specific application: // This function is found in the DSP28_Gpio.c file.// InitGpio(); // Not required for this example// Step 3. Initialize PIE vector table:// The PIE vector table is initialized with pointers to shell Interrupt // Service Routines (ISR). The shell routines are found in DSP28_DefaultIsr.c.// Insert user specific ISR code in the appropriate shell ISR routine in // the DSP28_DefaultIsr.c file.// Disable and clear all CPU interrupts:DINT;IER = 0x0000;IFR = 0x0000;// Initialize Pie Control Registers To Default State:// This function is found in the DSP28_PieCtrl.c file.InitPieCtrl();// Initialize the PIE Vector Table To a Known State:// This function is found in DSP28_PieVect.c.// This function populates the PIE vector table with pointers// to the shell ISR functions found in DSP28_DefaultIsr.c.InitPieVectTable();// Step 4. Initialize all the Device Peripherals to a known state:// This function is found in DSP28_InitPeripherals.c// InitPeripherals(); // Not required for this example.// Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:// Reassign the PIE vector for WAKEINT to point to a different ISR then// the shell routine found in DSP28_DefaultIsr.c.// This is done if the user does not want to use the shell ISR routine// but instead wants to use their own ISR. This step is optional:EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.WAKEINT = &wakeint_isr;EDIS; // This is needed to disable write to EALLOW protected registers// Include application specific functions. This is for this example:// Enable INT1 which is connected to WAKEINT:IER |= M_INT1;// Enable WAKEINT in the PIE: Group 1 interrupt 8PieCtrlRegs.PIEIER1.bit.INTx8 = 1;// Connect the watchdog to the WAKEINT interrupt of the PIE// Write to the whole SCSR register to avoid clearing WDOVERRIDE bitEALLOW;SysCtrlRegs.SCSR.all = BIT1; //#define BIT1 0x0002该位为1时,看门狗输出复位信号无效,看门狗中断输出信号有效;若为0,则输出复位信号有效,中断输出信号无效。
EDIS;// Clear the countersWakeCount = 0; // Count interruptsLoopCount = 0; // Count times through idle loop// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// Step 6. IDLE loop. Just sit and loop forever (optional):for(;;){LoopCount++;// Uncomment(不受约束的) KickDog to just loop here// Comment KickDog to take the WAKEINT instead// KickDog();}// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:// If local ISRs are used, reassign vector addresses in vector table as// shown in Step 5interrupt void wakeint_isr(void){WakeCount++;// Acknowledge this interrupt to get more from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//=========================================================================== // No more.//===========================================================================。