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

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

3天内不再提示

英创信息技术多任务系统看门狗的实现

英创信息技术 来源:英创信息技术 作者:沈阳东软飞利浦医 2019-10-31 15:27 次阅读

来源:中国电子设计网 | 作者:沈阳东软飞利浦医疗系统 林先贤

看门狗硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。

看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。

图1:(a) 多任务系统看门狗示意图 ;(b) 相应的看门狗复位逻辑图

在单任务系统中看门狗工作原理如上所述,容易实现。在多任务系统中情况稍为复杂。假如每个任务都像单任务系统那么做,如图1(a)所示,只要有一个任务正常工作并定期“喂狗”,看门狗定时器就不会溢出。除非所有的任务都故障,才能使得看门狗定时器溢出而复位,如图1(b)。

而往往我们需要的是只要有一个任务故障,系统就要求复位。或者选择几个关键的任务接受监视,只要一个任务出问题系统就要求复位,如图2(a)所示,相应的看门狗复位逻辑如图2(b)所示。

在多任务系统中通过创建一个监视任务TaskMonitor,它的优先级高于被监视的任务群Task1、Task2.。.Taskn。TaskMonitor在Task1~Taskn正常工作情况下,一定时间内对硬件看门狗定时器清零。如果被监视任务群有一个Task_x出现故障,TaskMonitor就不对看门狗定时器清零,也就达到被监视任务出现故障时系统自动重启的目的。另外任务TaskMonitor自身出故障时,也不能及时对看门狗定时器清零,看门狗也能自动复位重启。接下来需要解决一个问题是:监视任务如何有效监视被监视的任务群。

图2:(a) 多任务系统看门狗示意图;(b) 正确的看门狗复位逻辑图

在TaskMonitor中定义一组结构体来模拟看门狗定时器组

typedef struct

{

UINT32 CurCnt, LastCnt;

BOOL RunState;

int taskID;

} STRUCT_WATCH_DOG;

该结构体包括被监视的任务号taskID,用来模拟“喂狗”的变量CurCnt、LastCnt(具体含义见下文),看门狗状态标志RunState用来控制当前任务是否接受监视。

被监视的任务Task1~Taskn调用自定义函数CreateWatchDog(int taskid)来创建看门狗,被监视任务一段时间内要求“喂狗”,调用ResetWatchDog(int taskid),这个“喂狗”动作实质就是对看门狗定时器结构体中的变量CurCnt加1操作。TaskMonitor大部分时间处于延时状态,假设硬件看门狗定时是2秒,监视任务可以延时1.5秒,接着对创建的看门狗定时器组一一检验,延时前保存CurCnt的当前值到LastCnt,延时后比较CurCnt与LastCnt是否相等,都不相等系统才是正常的。需要注意的是CurCnt和LastCnt数据字节数太小,而“喂狗”过于频繁,可能出现CurCnt加1操作达到一个循环而与LastCnt相等。

如果有任意一组的CurCnt等于LastCnt,认为对应接受监视的任务没有“喂狗”动作,也就检测到该任务出现故障需要重启,这时候TaskMonitor不对硬件看门狗定时器清零,或者延时很长的时间,比如10秒,足以使得系统重启。反之,系统正常,Task1~Taskn定期对TaskMonitor“喂狗”,TaskMonitor又定期对硬件看门狗“喂狗”,系统就得不到复位。还有一点,被监视任务可以通过调用PauseWatchDog(int taskid)来取消对应的看门狗,实际上就是对STRUCT_WATCH_DOG结构体中的RunState操作,该标志体现看门狗有效与否。

这种方式可监视的最大任务数由STRUCT_WATCH_DOG结构数据的个数决定。程序中应该有一个变量记录当前已创建的看门狗数,判断被监视任务Task1~Taskn是否“喂狗”只需比较CurCnt与LastCnt的值n次。

图3:系统复位逻辑图

硬件看门狗监视TaskMonitor任务,TaskMonitor任务又监视其他的被监视任务Task1~Taskn,形成这样一种链条。这种方式系统的故障图表示如图3所示。被监视任务Task1~Taskn及TaskMonitor都是或的关系,因此被监视的任一任务发生故障,硬件电路看门狗就能复位。

为实现多任务系统的看门狗监视功能额外增加了TaskMonitor任务,这个任务占用执行时间多少也是一个重要问题。假设TaskMonitor任务一个监视周期延时1.5秒,此外需要执行保存当前计数值,判断是否“喂狗”等语句,它的CPU占用时间是很小的。用一个具体的试验证实,使用50M工作频率的CPU(S3C4510),移植vxWorks操作系统,cache不使能条件下监视10个任务,每个监视周期占用220~240微秒。可见该任务绝大多数时间都处于任务延时状态。

被监视任务可能有获取消息、等待一个信号量等的语句,往往这个消息、信号量的等待是无限期的等待。这就需要将这类语句作一些修改。比如在vxWorks中将一次无期限的获取信号量操作。

semTake(semID, WAIT_FOREVER); // WAIT_FOREVER为无限时间等待

分解为

do

{

ResetWatchDog; // “喂狗”操作

}while(semTake(semID, sysClkRateGet( )) != OK); // 1s内的等待信号量操作

多次的时间范围内的获取信号量操作,这样才能保证及时“喂狗”。

另外需要注意的是系统中是否有的任务优先级比TaskMonitor高并且长时间处于执行状态,TaskMonitor长时间得不到调度,使得看门狗错误复位。良好的任务划分,配置是不应该出现这种高优先级任务长期执行状况的。

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

    关注

    7

    文章

    6064

    浏览量

    34620
收藏 人收藏

    评论

    相关推荐

    【安富莱】【RTX操作系统教程】第20章 独立看门监测多任务的执行状态

    教程】第20章 独立看门监测多任务的执行状态 通过前面的几个章节,我们基本已经完成了RTX所有功能的讲解,本章节为大家介绍一种使用独立看门狗监测任务执行状态的方法,借此为大家提供一种R
    发表于 02-04 15:35

    第29章 FreeRTOS独立看门狗监测任务执行状态

    如何保证系统复位的思路。本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407以及F429。29.1 独立看门狗监测任务实现思路2
    发表于 09-11 07:27

    第20章 独立看门监测多任务的执行状态

    转rtx操作系统通过前面的几个章节,我们基本已经完成了RTX所有功能的讲解,本章节为大家介绍一种使用独立看门狗监测任务执行状态的方法,借此为大家提供一种RTX系统在软件或者硬件死机时,
    发表于 10-08 08:22

    多任务(RTOS)环境中使用看门狗

    长时间运行,例如线程等待潜在的网络通信。一个干净的方法可以定期喂养看门狗,同时确保每个不同的过程都处于健康状态,成为这些系统开发人员面临的主要挑战,例如需要关注的是:操作系统是否正常执行高优先级
    发表于 09-01 10:09

    看门狗电路

    一、独立看门狗STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,
    发表于 07-30 06:02

    看门狗的原理与作用

    一、独立看门狗STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环
    发表于 07-30 06:36

    看门狗是什么 看门狗的功能

    监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。看门狗的功能①、在启动正常运行的时候,系统不能复位。②、在系统跑飞(程序异常
    发表于 07-30 08:07

    看门狗是什么 看门狗分哪几类

    单片机自身运行状态的东西,看看程序是不是正常跑完。这个东西就叫看门狗看门狗分两类:独立看门狗和窗口看门狗。这俩的区别就是独立看门狗用的是独
    发表于 08-02 09:20

    看门狗的原理 看门狗的作用

    独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种
    发表于 08-02 08:56

    如何去实现一种硬件+软件看门狗监测多任务方案

    硬件+软件看门狗监测多任务的原理是什么?如何去实现一种硬件+软件看门狗监测多任务方案?
    发表于 08-05 07:55

    如何实现看门狗系统重启?

    如何实现看门狗系统重启?
    发表于 11-09 07:21

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

    必须在最大指定时间范围内完成, 否则重启系统。软件看门狗采用处理器内部定时器, 把任务的理论最大运行时间作为时间约束, 如果该任务超过了这个时间跨度, 则强制退出本次
    发表于 10-20 09:32 0次下载

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

    必须在最大指定时间范围内完成, 否则重启系统。软件看门狗采用处理器内部定时器, 把任务的理论最大运行时间作为时间约束, 如果该任务超过了这个时间跨度, 则强制退出本次
    发表于 11-30 06:39 540次阅读

    基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法

    基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
    的头像 发表于 03-12 10:11 8501次阅读

    MCU硬件看门狗+软件看门狗监测多任务的思路

    MCU硬件看门狗+软件看门狗监测多任务的思路
    的头像 发表于 10-24 15:25 1365次阅读
    MCU硬件<b class='flag-5'>看门狗</b>+软件<b class='flag-5'>看门狗</b>监测<b class='flag-5'>多任务</b>的思路