独立看门狗实验和窗口看门狗都是不能关闭的吗

博客访问: 490757
博文数量: 120
博客积分: 1250
博客等级: 少尉
技术积分: 1424
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
原文地址: 作者:
& &两年前总结的东西,一时没时间整理,放了很久居然差点忘了,现在重见天日了。但是还不是很完整,先放上来,以后有时间就完善她。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~& &最近需要在板子上加上一块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阶段,一切都由看门狗守护进程来实现喂狗了。-----------------------------------------------------------------------------内核看门狗的框架分析(待续)------------------------------------------------------------------------------其实对于看门狗在Linux系统中的使用还有一种形式是双狗:在内核中用内核线程硬件的看门狗,这个硬件看门狗的作用在于保证内核宕机时可以复位。在内核产生软件看门狗,用守护进程或者需要监控的进程去喂狗,这个看门狗保证关键进程可以复位。推荐参考资料:& & 看门狗驱动:& & &linux/drivers/watchdog :其中包含所有看门狗驱动:& & & watchdog_core.c、watchdog_dev.c和watchdog_dev.h是内核看门狗的框架核心,看门狗的驱动当然最好是在这个框架下编写比较好。但是好像其中的驱动并不都只这样。、& & &linux/Documentation/watchdog/watchdog-kernel-api.txt 内核看门狗框架API说明文档& & && &(没有使用内核看门狗框架)---------------------------------------------------------------------------看门狗守护进程:& & 源码下载:& --------------------------------------------------------------------------
阅读(5784) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。《看门狗》窗口化与无敌退出解决方法
日 来源:3dm论坛 编辑:小黑妹
& & 在游戏《》中,不少玩家都遇到过这种问题,游戏玩了一段时间后会突然的退出。下面就介绍来自玩家hotspur分享的解决方法,供大家参考。
& & 先申明,软硬件的问题向来很复杂,这个方式也许只适合少数人,但我从昨晚玩到今天,再也不曾游戏自动退出了,而以前是每一次玩都会在三十分钟后退出。没想到解决了窗口化的问题后,连连无故退出的问题也消弭了。看来两个问题可能是同一个原因。有人说CPU或显卡过热,但我看温度其实还好。
& & 相信有不少人玩看门狗会遇到这类问题,无故退出是每玩二三十分钟便会发生,而只要输入法切换到中文,此时再按W便会窗口化,那这两个问题有无可能是彼此相关呢?
我硬件是i7-4770,内存24GB,姑且不论退出,玩游戏时其实很流畅,垂直同步有开,并不会顿顿的,因为我除了材质、反距齿等,其他视觉效果大多设为中而已。
系统是Windows8.1,因Windows8输入接口有所变革,所以我怀疑看门狗的窗口化和我没有再安装英文语系有关,因Windows8预设是只有中文,且因英文输入更方便,所以不像以前要额外安装英文语系的输入法。
& & 在Windows8 里,原本的Ctrl + Space 组合键还是可以用,但是如果你只有安装一个【繁体中文】语言的话,默认输入法永远会开启繁体中文语言里的那个默认的输入法,而且默认会显示在中文输入的地方,我必须再按下Ctrl + Space 才能关闭输入法,如此在看门狗中按W才不会出现中文输入的接口。
所以之前看门狗窗口化时,要先ESC&Ctrl + Space(Windows键+ Space)&Alt+Enter,但没玩多久一按W又会窗口化且出现中文输入法的候选字接口,于是不胜其烦。
想想以前似乎不会这样,所以我决定新增English语系。结果,游戏再也不会窗口化了,而且也不会每玩二三十分钟就突然退出了,真是令人出乎意料。
& & 新增 English语系:
1、开启语言设定控制面板,选英文(美国),下载安装。
2、点选【进阶设定】功能,修改 覆写预设输入法的设定,选取【英文(美国) & US】项。
3、勾选【让我为每个应用程序窗口设定不同的输入法】,勾选这个选项能让每次开启新应用程序或从应用程序切换回开始画面时回到原本的【英文输入】的状态!
4、此时切换语系的快捷键变成Alt + Shift 快捷键,或是Win + Space 快捷键,Ctrl+ Space 组合键失效了。
看门狗你感兴趣吗?
看完这篇文章有何感觉?
相关攻略及下载:6-74-162-129-249-229-187-1711-59-269-26
48小时热门评论
一周热点资讯
衣服被“锁”住了,好尴尬 心疼这件衣服,承载了天大的压力
独显加持性能暴增,生命力至少6到8年
CopyRight&2004年-年 < 游迅网 All Rights Reserved
备案编号:沪ICP备号-6窗口看门狗与独立看门狗的问题,请大神解答 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [直播]
窗口看门狗与独立看门狗的问题,请大神解答
等待验证会员
15:04:25  
两个看门狗的初始化:
WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);& &//窗口看门狗初始化,分频系数为8
IWDG_Init(4,625);& & //独立看门狗初始化,分频系数为64
为什么写成
WWDG_Init(0X7F,0X5F,3);
程序不正确
IWDG_Init(IWDG_Prescaler_8,625);
等待验证会员
15:06:11  
也就是说为什么独立看门狗表示分频系数时直接可用数字,而窗口看门狗分频系数则必须使用WWDG_Prescaler_8,直接用数字就会出错呢
22:13:17  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
独立看门狗的初始化函数是这样的://初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
void IWDG_Init(u8 prer,u16 rlr)
窗口看门狗分频系数使用WWDG_Prescaler_8 是因为底层函数已经封装好的了&&#define WWDG_Prescaler_1& & ((uint32_t)0x)
#define WWDG_Prescaler_2& & ((uint32_t)0x)
#define WWDG_Prescaler_4& & ((uint32_t)0x)
#define WWDG_Prescaler_8& & ((uint32_t)0x)
21个问题&&&&&&&&13604个浏览
21个问题&&&&&&&&23942个浏览
70个问题&&&&&&&&10146个浏览
Powered by}

我要回帖

更多关于 独立看门狗实验 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信