8771|10

463

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

嵌入式系统看门狗的使用 [复制链接]

随着32 位微控制器在嵌入式产品中的广泛应用,嵌入式操作系统也逐渐被大量应用。由于嵌入式操作系统的使用, 大大降低了复杂应用系统中软件开发的工作量, 使得嵌入式软件能够采用现代的软件开发技术进行代码编写和调试, 从而也提高了软件的质量。 但在嵌入式应用中, CPU 必须可靠工作, 即使因为某种原因进入一个错误状态, 系统也应该可自动恢复。 看门狗的用途就是使微控制器在进入错误状态后的一定时间内复位。

看门狗的基本原理

所谓 “看门狗” 是指在系统设计中通过软件或硬件方式在一定的周期内监控系统的运行状况。如果在规定时间内没有收到来自系统的触发信号, 则系统会强制复位, 以保证系统在受到干扰时仍然能够维持正常的工作状态。 它主要有寄存器、 定时器和看门狗模等部件构成, 其内部结构如图1 所示。

 

1、看门狗内部结构

在这里看门狗的原理我想大家都已经比较熟悉,我不再罗嗦

关于看门狗在前后台运行的程序(无OS)上使用很简单,我们只需要定时的去喂狗就可以。但是对于使用的嵌入式操作系统的软件我们上面的简单喂狗方式就行不通了。原因是系统是会执行任务调度的。每一个任务在运行时就相当于一个前后台系统。任一时刻只会有一个任务获得CPU的支配权而运行。这样就要求我们必须在每一个任务中都要执行喂狗动作。这样一来虽然达到了及时喂狗而不至于让系统复位的目的,但是如果有一个任务现在异常而不能运行的话,或者是两个任务因为资源问题发生死锁,系统其它的任务还会继续喂狗。这样应用程序虽然出了问题,但是系统依然在按正常运行。

所以在OS中使用看门狗就变得复杂起来。

下面我说一下我是如何在OS中使用看门狗的。以uCOS-IISTM32的平台上使用为例

首先我为每一个任务分配一个软件看门狗计数器。这样就形成了软件看门狗计数器队列。这个队列在系统中使用的是全局变量(关于全局变量的使用可以看我上面一篇的“谈谈在UCOS中使用全局变量”一文)。,设置一个优先级别最高的任务作为监视器 ,以监视各应用任务是否正常运行 ,该监视器即为软件看 门狗.该任务对其他任务都设定一个计时器,每个被监视的任务在设定的时间内对软件看门狗中相应的定时器定时清零,即 喂软狗”.在其他 任务都正常工作的情况下,软件看门狗对 内置硬件看 门狗定时器周期性清零,即 喂狗”.  若某个任务出现故障,则该任务在设置的时间内对软件看门狗不 喂软狗”,此时与之对应的定时器溢出,软件看门狗发送指令,把该任务的堆栈地址指到其起始地址,重启该任务.当在设定的次数内不能有效启动,则监视器任务延时 喂狗”,内置硬件看门狗计数器溢出,自动重启系统.另外,当监视器任务本身或系统硬件出现故障时,不能及时对硬件看门狗定时器清零,则重启系统.

监控软件狗的任务原理图如下:

  

系统的实现过程

本软件看门狗通过检查各应用任务是否在规定的时间内对其 喂软狗”来确定各任务的运行状态,硬件看门狗通过检查软件看门狗是否在规定的时间内对其 喂狗”来实现对监视器任务的监视.通过微 处理器的定时器中断机制,为每个任务分配计时单元和运行标志.系统具体的执行操作如下: 

1 )系统中某任务空闲时,以小于 喂软狗”设定的时间间隔为周期,周期性地 喂软狗”. 

2 )在该任务执行时,预计执行所需的最长耗时,并用稍大于该最大耗时的时问间隔设置监视器中与 其对应的定时器参数,同时中断周期性 喂软狗”模块,启动监视器任务中的定时器倒计数.当该任务正常执行完毕时,发送信号 喂软狗”,对定时器清零,复位该任务供下次使用,同时恢复周期性 喂软狗”模块  

3 )当任务出现异常时,不能在设定的时间间隔内完成该任务,不能对软件看门狗及时清零,使得监 视器中相应的定时器溢出,监视器任务通过内核服务发送指令,把该任务的堆栈地址指到其起始地址,重启该任务,累计其复位次数,同时把该任务的计时器清零.如果在设定的次数内不能够有效启动该任务,软件看门狗则延时喂内置硬件看门狗,内置看门狗计数器溢出,自动重启系统.当系统主程序出现问题或者系统硬件出问题时,软件按看门狗也延迟 喂狗”,重新启动系统,以确保系统长时间稳定运行. 

这个方法已经成功运行于我的项目,在次分享出来。方便大家的使用

 

 

图片上传不上来。大家看附件吧

[ 本帖最后由 wstrom 于 2011-2-24 09:27 编辑 ]

嵌入式系统看门狗的使用.doc

301.5 KB, 下载次数: 399

最新回复

:carnation:  详情 回复 发表于 2012-6-28 21:21

点评

不错,嵌入式OS就是会出现类似的问题,  详情 回复 发表于 2012-6-20 14:20
点赞 关注(1)

回复
举报

2735

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不错 顶起~~
 
 

回复

2131

帖子

0

TA的资源

至上芯片

板凳
 

回复 楼主 wstrom 的帖子

版主你好,这种喂狗的方式很独特,这种思路很好,就像是windows系统服务器中增加监控软件看门狗的意义一样,更好的控制多个任务程序.
系统的喂狗:1:单个任务不能独享CPU
                     2:任务间的死锁问题
                     3:硬件错误与地址异常等等
如果 出现上面1,2的问题,那么管理任务重启单个或多个任务那么你是怎样重启的呢?

也许因为这样做的复杂程序要比空闲任务和高优先级并行喂狗复杂,但是这样更能体现管理的概念.
 
个人签名处处留心皆学问!
 
 

回复

463

帖子

0

TA的资源

纯净的硅(中级)

4
 

Re:daicheng

对于上面的问题我是这么处理的
对于问题1:当某一个任务不能独享CPU时,他就无法复位自己的软件看门狗计数器。这样看门狗处理任务就会做相应数据保存后终止该任务后在重新创建出现问题的任务。如果连续几次不能重新创建任务成功就复位整个系统。这个代价较大。一般迫不得已我才会让系统进入这个流程
对于问题2:
死锁的任务一般会无法进入得到资源的地方,那么可以把软件看门狗的复位放在这里就可以解决上面的问题了
 
 
 

回复

463

帖子

0

TA的资源

纯净的硅(中级)

5
 

Re:liuceone

谢谢关注
 
 
 

回复

2万

帖子

74

TA的资源

管理员

6
 

回复 楼主 wstrom 的帖子

嘿嘿 以附件的形式上传 图片应该能上来 呵呵
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

463

帖子

0

TA的资源

纯净的硅(中级)

7
 
可能是我还没有掌握好上传的基本知识。呵呵。继续学习!
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 楼主 wstrom 的帖子

不错,嵌入式OS就是会出现类似的问题,
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 
楼主请教你个问题,就是我现在用一个RT系统,测试的时候发现有线程会挂掉,但是系统别的线程是正常的,
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

10
 
思路不错,有个问题,如果作为系统节拍时钟的定时器出问题,你在任务中的软件看门狗是不起作用的。
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(中级)

11
 
:carnation:
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表