看门狗 (监控芯片)

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。

看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。

定义

编辑

看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。 [1]

基本原理

编辑

看门狗是一种监控系统的运行状况的手段,通过软硬件结合的方式实现对系统运行状况的监控。稳定运行的软件会在执行完特定指令后进行喂狗,若在一定周期内看门狗没有收到来自软件的喂狗信号,则认为系统故障,会进入中断处理程序或强制系统复位。系统上电后根据不同的工作模式可以选择使能看门狗的时机,若看门狗被使能则计数器开始计数,如果在设定的时间内没有及时喂狗则会发生看门狗超时。看门狗主要由寄存器、计数器和狗叫模块构成:通过寄存器对看门狗进行基本设置,计数器计算狗叫时间,狗叫模块决定看门狗超时后发出的中断或复位方式。 [2]

应用

编辑

看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。 [3]

分类

编辑

硬件看门狗

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等。

软件看门狗

而在某些情况下,也会采用纯软件的方法来设置看门狗,如在单片机系统中,利用闲置的定时器/计数器就可以设计一个软件看门狗。具体实现步骤如下:

首先,在初始化程序中设置定时器/计数器的方式以控制寄存器(TMOD) 和定时时间的初值,并且打开中断。

然后,根据定时器的时间,在主程序中按一定的时间间隔插人复位定时器的指令(喂狗), 两条喂狗指令之间的时间间隔可以根据系统时钟与指令周期计算出来,而且该时间周期应该小于定时器的定时时间。

最后,在定时器的中断服务程序中,设置一条无条件转移指令,将程序计数器PC转移到初始化程序的入口。

在非单片机系统,如PowerPC系统中,也可以采用多线程的方式来设置软件狗,其主要的步骤如下所述:

首先,新建一个看门狗线程,该线程维护一个全局变量数组,该数组相当于每个工作线程的计数器。看门狗线程为一一个死循环,每隔一段时间就会循环一次,并将全局变量数组的每一个值都加1后判断是否超过预定义的上限值,若发现某个线程对应的变量数值超过最大值,则看门狗线程会重置该线程。

然后,每个工作线程中,每隔一段时间就会将对应的全局变量置0 (喂狗)。

软件看门狗的优点是无需额外的硬件支持,但当系统存在严重的错误时(例如:中断服务出错),则有可能导致软件看门狗失效。 [4]

原文地址:https://www.cnblogs.com/mhq-martin/p/11575983.html

时间: 2024-10-17 10:34:24

看门狗 (监控芯片)的相关文章

u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗

u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文档: Arm9内核手册:http://download.csdn.net/detail/wrjvszq/8358867 Arm11内核手册:http://download.csdn.net/detail/wrjvszq/8358877 Arm a8内核手册:http://download.csdn.

看门狗芯片--SP706SEN--调试记录

一.前因后果 工程中,设备为了稳定可靠,会增加外部看门狗,但是外部看门狗一旦启动,就停不下来,必须在固定的时间范围内进行喂狗,不然看门狗芯片就会产生一个复位信号复位MCU.以前大家都认为看门狗一旦工作,就不能进行控制,也不便于程序调试,所以在硬件上,会使用单片机来控制看门狗芯片的电源,原理图如下: 最近在工程中由于MCU的复位信号一直是低电平,导致程序下不下去,最后查原因,发现是看门狗电路这一块造成的,然后就仔细看SP706SEN的手册,发现WDI引脚这样描述:如果WDI引脚处于浮空或高阻状态,

5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1

[看门狗]内部看门狗和外部看门狗

1. 芯片内部看门狗 内部看门狗通常为芯片内部某个特殊定时器,用户可以通过手动初始化.设置timeout.使能.失能该看门狗,然后在线程中定时去喂狗,从而达到检测应用程序跑飞.跑死的情况. 在Linux系统中,可以在uboot中打开看么狗,把喂狗时间设置长度超过kernel启动时间,从而当kernel正常启动后,喂狗任务由uboot交给了应用程序,这样达到了监控kernel启动bootsup和应用程序的双重功效. 2. 芯片外部看门狗 外部看门狗具有独立性,可以更加安全的确保芯片的正常运行. 外

[ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG

引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数.如果看门狗减到0就认为程序没有正常工作,强制整个系统复位.因此可以用看门狗防止程序在跑飞的时候回不到正常模式. 看门狗可用于受到电气噪音.

CC2541蓝牙学习——看门狗

看门狗是在软件跑飞的情况下CPU自恢复的一个方式,看门狗分为硬狗和软狗,硬狗就是由专门的看门狗硬件电路实现看门狗功能,看门狗芯片也比较多,比如DS1232,除了看门狗功能外还有电源电压监测功能.软狗就是由软件实现的看门狗功能,现在很多CPU都自带了软狗,很难说硬狗好还是软狗好,如果软狗够用,尽量使用软狗简化设计,看门狗说白了就是一个定时器!,当软件在选定的时间间隔内不能置位看门狗定时器(WDT),WDT就复位系统.看门狗可用于电噪声,电源故障或静电放电等恶劣工作环境或高可靠性要求的环境.如果系统

ARM中的看门狗程序

在ARM中,有一个硬件部分叫WATCH DOG.这个硬件,一直在做一件事情:就是,从某一数值,一直数,各一段时间减一,隔一段时间减一,直到减到0的时候将会触发重启或者中断.而有时候,为了预防死机,我们在操作系统跑起来的时候会有一个特定的程序来做一件事情:减到特定是值的时候数值将会重新置到100.这样,看门狗将会循环往复做一件事情:一直数数,而不会死机. 这个程序叫做守护程序:又叫做喂狗程序. 看门狗的逻辑运算图如下: 今天,有看门狗来写了一个程序:隔一段时间来触发一个中断,每次中断来的时候,将会

(4)MSP430F5529 看门狗的设置

看门狗定时器(Watchdog Timer(WDT_A))实际上是一个特殊的定时器,即可以用来作为看门狗使用,也可以用作定时器. 所谓的看门狗功能,是指可以监控程序是否由于某些干扰或者错误而跑飞.其原理就是发生故障的时间满足规定的定时时间后,产生一个非屏蔽中断,使系统复位.这样当在调试程序或预计程序在某个地方可能瞬时发生错误时(如外部电路干扰),选用设置看门狗定时中断可以避免程序跑飞. 当然,它也可以用作一般的定时功能. 不过实际上,由于看门狗定时器(作看门狗使用时)需要很严密的设置(否则程序容

开启树莓派的硬件看门狗功能

前段时间挖矿,将CGMiner设置为开机启动,由于各种问题系统不是很稳定,时不时的就停了L 网上查了一下,树莓派居然自带硬件的看门狗功能,立即尝试了一把,基本上能够解决我的问题 ? 原理很简单: 看门狗(Watchdog)需要不停的喂骨头(heartbeat) 如果在规定的时间内都没有喂(默认15秒),系统自动重启 ? 不过,一秒钟要吃一块骨头,还要不停的吃,还真是吃不饱的狗呀,呵呵~~~ ? 下面是开启该功能的脚本 // 开启模块 sudo modprobe bcm2708_wdog sudo