0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于嵌入式系统中看门狗的原理与使用

Q4MP_gh_c472c21 2018-02-08 18:27 次阅读

最近需要在板子上加上一块WatchDog,以确保在系统出错时自动重启,所以看了一些在嵌入式系统中使用看门狗资料,总结如下:

一、看门狗原理

产品化的嵌入式系统中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗。

看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后,计数器开始自动计数,经过一定时间,如果没有被复位,计数器溢出就会对CPU产生一个复位信号使系统重启(俗称“被狗咬”)。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零(俗称“喂狗”),不让复位信号产生。如果系统不出问题,程序保证按时“喂狗”,一旦程序跑飞,没有“喂狗”,系统“被咬”复位。

这就好比你的身边有一只时刻饥饿的狗,你不按时给它肉吃,它就会吃你的肉,你被吃了......挂了,投胎转世,彻底重新做人了。不幸的是来世你还得喂狗.

二、看门狗的种类

在现在的嵌入式系统中主要可以分为两种类型的看门狗:

1、CPU内部自带的看门狗:此类看门狗一般是将一个芯片中的定时器来作为看门狗,通过程序的初始化,写入初值,设定溢出时间,并启动定时器。程序按时对定时器赋初值(或复位),以免被咬。这种看门狗是可以被禁用的(只要停止这个定时器即可),好比对那只要咬你的狗来个“葵花点穴手”。大部分CPU都内置看门狗,硬件原理可参考各芯片数据手册。

优点:可以通过程序改变溢出时间;可以随时禁用

缺点:需要初始化;如果程序在初始化、启动完成前跑飞或在禁用后跑飞,看门狗就无法复位系统,这样看门狗的作用就没有了,系统恢复能力降低。

2、独立的看门狗芯片:这种看门狗主要有一个用于喂狗的引脚(一般与CPU的GPIO相连)和一个复位引脚(与系统的RESET引脚相连),如果没有在一定时间内改变喂狗脚的电平,复位引脚就会改变状态复位CPU。此类看门狗一上电就开始工作,无法禁用。现在常用的芯片有:CAT705/CAT706、IMP706等等,溢出时间在1.6秒左右。 硬件原理可以参考各芯片数据手册和《基于Linux的嵌入式系统全程喂狗策略》。

优点:无须配置,上电即用。无法禁用,系统必须按时喂狗,系统恢复能力高。

缺点:无法灵活配置溢出时间,无法禁用,灵活性降低。

当然还有所谓的软件看门狗,这其实是也是一种监控软件。

一些重要的程序,必须让它一直跑着;而且还要时时关心它的状态——不能让它出现死锁现象。(当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误。首要做的事是Debug。)但如果时间紧迫可以用软件看门狗,暂时应急。

这种监控软件运行不出现界面窗口,具有一定的隐蔽性;它定时判断目标进程是否运行在当前系统中,如果没有则启动目标进程;判断目标进程是否“无响应”,如果是则终止目标进程;如果目标进程“无响应”的次数超过一定的数量,则重启整个系统。它的目的也是复位,但是它主要市复位进程,实在不行才复位CPU。

这种软件属于监控软件,不在本文的叙述范围之内。

三、看门狗的选择

在一般的民用产品,对系统的稳定性没有太高要求的场合,可以使用内置看门狗,可以简化软件开发和硬件成本。

在工控产品和对系统的稳定性有较高要求的关键场合,基本都选用硬件独立看门狗,确保系统在面对严重错误时的恢复能力。增加了硬件成本,稍微加大了软件的开发难度(必须确保在正常情况下的不断喂狗)。

四、在bootloader下的使用

如果是CPU内置的看门狗,一般在这阶段可以禁用,所有没什么特殊的操作。

但是如果是独立的看门狗芯片就必须喂了。或者为了保险,你在bootloader中就启动了看门狗,也得喂了。

bootloader有很多,基本原理都是一样的,喂狗的过程也基本一样,在这里以uboot为例讲解如何喂狗。

u-boot的运行分为以下几个阶段:

最早的简单初始化,代码重定位的自拷贝阶段

系统详细初始化阶段

控制台阶段(如果使用了自动启动,则跳过)

OS内核拷贝(可能带有解压过程),跳入操作系统

五、在Linux下使用

在bootloader加载了内核之后,系统就开始由Linux内核接管。而喂狗的工作自然也开始由内核来承担。在bootloader将控制权给内核之后,时间上可以分为以下几个部分:

内核自解压阶段(压缩内核才有:zImage或bzImage)

内核启动到看门狗驱动加载之前

看门狗驱动加载后到根文件系统启动前

根文件系统启动后到看门狗守护进程启动前

看门狗守护进程启动后

对于使用CPU内置的看门狗,在1~4阶段,看门狗一般都没有启动,无需喂狗。只有在看门狗守护进程启动后,由守护进程打开看门狗,并根据配置文件监控其他进程的状态来开始喂狗。如果被监控进程出现不可修复的问题,守护进程停止喂狗,CPU复位。

对于独立的看门狗芯片,系统一上电就必须不断喂狗,接过bootloader的接力棒继续喂狗。

首先在第1阶段,内核的自解压一般时间较长,必须在自解压的循环过程中加入喂狗代码(可能还要是汇编形式的)。一旦在这过程中跑飞,就不会喂狗,CPU复位。

在第2阶段,这段时间一般不会很长,可以不用喂狗。但是这也和你的内核有关,如果在这个阶段正好有比较耗时的模块启动的话,你可以在这个模块的初始化函数或者比较耗时的循环和等待中添加喂狗代码。具体在哪些模块中加,要尝试启动几次就知道了,靠实验和经验。

在看门狗驱动加载时,一般会在模块初始化代码中喂一次狗。

在第3阶段,和第2阶段类似,如果在这个阶段正好有比较耗时的模块启动的话,你可以在这个模块的初始化函数或者比较耗时的循环和等待中添加喂狗代码。但是在根文集系统挂载时,根据文件系统的性质和大小,可能需要在文件系统代码中添加喂狗指令。

第4阶段是一个比较耗时的阶段,一般会在系统启动脚本中添加一些简单的喂狗的shell命令,例如:“echo V > /dev/watchdog”,加的位置根据系统的启动过程而异。

在第5阶段,一切都由看门狗守护进程来实现喂狗了。

基于嵌入式系统中看门狗的原理与使用

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19111

    浏览量

    304847
  • 看门狗
    +关注

    关注

    10

    文章

    560

    浏览量

    70790

原文标题:实用!快速操作Linux终端命令行的快捷键

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式系统看门狗计数器怎么清零?

    嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路。看门狗电路其实就是一个计数器。当
    发表于 03-09 06:16

    看门狗嵌入式Linux中的应用有哪些

    嵌入式领域中 Watchdog 看门狗通常被作为用于应对系统或者应用意外崩溃的有效手段。其可以在程序执行出错并无法恢复的情况下,自动重启应用甚至复位整个系统,从而使
    发表于 01-01 07:42

    嵌入式系统】独立看门狗原理+看门狗实验分析 精选资料推荐

    嵌入式系统】独立看门狗原理+看门狗实验分析1、看门狗模块概述在由单片机构成的微机系统中,由于单
    发表于 08-03 06:27

    嵌入式系统中看门狗的相关资料下载

    https://blog.csdn.net/maopig/article/details/7173393
    发表于 12-22 06:55

    怎样去使用嵌入式系统中看门狗

    嵌入式系统中看门狗的使用总结原文地址:嵌入式系统中看门狗的使用总结 作者:tekkamannin
    发表于 12-22 06:09

    单片机应用中看门狗威廉希尔官方网站

    分析研究了单片机应用系统中软件看门狗、单双时限和强制复位 看门狗 等几种常见的看门狗威廉希尔官方网站 及具体的实现方法, 从提高看门狗工作可靠性的角度,
    发表于 06-03 16:49 318次下载
    单片机应用<b class='flag-5'>中看门狗</b>威廉希尔官方网站

    STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)

    stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型
    发表于 11-09 17:17 8438次阅读
    STM32<b class='flag-5'>看门狗</b>配置(独立<b class='flag-5'>看门狗</b>IWDG和窗口<b class='flag-5'>看门狗</b>WWDG)

    uC/OS-II 系统的多任务看门狗设计

    嵌入式系统中为提高微型机系统的可靠性和安全性, 常用的方法就是使用看门狗看门狗分硬件看门狗
    发表于 11-30 06:39 725次阅读

    嵌入式系统中看门狗的类型

    CPU内部自带的看门狗:此类看门狗一般是将一个芯片中的定时器来作为看门狗,通过程序的初始化,写入初值,设定溢出时间,并启动定时器。
    发表于 07-19 11:09 3413次阅读

    看门狗嵌入式 Linux 中的应用

    By Toradex胡珊逢1).简介在嵌入式领域中Watchdog看门狗通常被作为用于应对系统或者应用意外崩溃的有效手段。其可以在程序执行出错并无法恢复的情况下,自动重启应用甚至复位整个系统
    发表于 11-01 18:00 18次下载
    <b class='flag-5'>看门狗</b>在<b class='flag-5'>嵌入式</b> Linux 中的应用

    嵌入式单片机基础篇(八)之两只看门狗

    嵌入式工程师成长之路(八)之两只看门狗独立看门狗与窗口看门狗第一部分:stm32。STM32 内部自带了 2 个看门狗:独立
    发表于 11-24 20:51 2次下载
    <b class='flag-5'>嵌入式</b>单片机基础篇(八)之两只<b class='flag-5'>看门狗</b>

    嵌入式系统】独立看门狗原理+看门狗实验分析

    嵌入式系统】独立看门狗原理+看门狗实验分析1、看门狗模块概述在由单片机构成的微机系统中,由于单
    发表于 11-25 09:51 1次下载
    【<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>】独立<b class='flag-5'>看门狗</b>原理+<b class='flag-5'>看门狗</b>实验分析

    STM32中的独立看门狗和窗口看门狗

    和窗口看门狗。 独立看门狗:使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示程序是正常的,这点和窗口看门狗是有区别的。另外独立
    的头像 发表于 12-22 16:58 2139次阅读

    电路中看门狗的作用

    电路中看门狗的作用 电路中的看门狗是一个非常重要的保护装置,它主要用于监测系统是否出现异常状况,在检测到异常状况后关闭系统,防止系统出现不可
    的头像 发表于 09-26 16:38 3797次阅读

    软件看门狗和硬件看门狗的区别

    系统出现了故障或死锁,软件看门狗会自动重启系统或执行其他预定义的操作。软件看门狗通常用于嵌入式系统
    的头像 发表于 04-16 15:10 1070次阅读