freeRTOS中使用看门狗的一点思考

关于看门狗想必各位嵌入式软件开发的朋友应该都不会陌生的。在嵌入式软件开发中,看门狗常被用于监测cpu的程序是否正常在运行,如果cpu程序运行异常会由看门狗在达到设定的阈值时触发复位,从而让整个cpu复位重新开始运行。

看门狗的本质是一个计数器,一开始的时候配置其为一个特定的值,然后这个计数器就会一直运行倒数自减,自减到0就会引发系统复位。所以为了避免被复位,就需要隔一定的时间复位看门狗的计数值,也就是我们常说的 “喂狗” 。

这个 “喂狗” 的动作应当发生在看门狗引发复位的阈值的间隔中,否者超过或者达到这个阈值,会导致系统被复位,这是我们所不希望看到的。

关于看门狗在程序中使用,可以分两种情况去讨论:

1)裸机中使用看门狗;
2)RTOS环境中使用看门狗。

1、裸机中使用看门狗

在裸机中使用看门狗,由于裸机的编程和程序执行流的方式的影响,一般开发人员通常会在主循环中进行看门狗的“喂狗”操作。

这种时候是要开发人员很合理的评估自己所写代码的执行流程,能够估算整个主循环中最坏的执行时间的值,从而设定看门狗的阈值时间,保证最坏的情况下,看门狗不至于复位系统。

裸机中使用看门狗进行系统监测的常见的两种方式:

(1)在代码的执行流中插入喂狗

这是一种最简单的方式。开发的时候一般都是在程序执行流中插入看门狗的“喂狗”,特别是针对程序中需要较长时间占用执行的程序段中要加入“喂狗”操作。对于执行过程中占用时间较少的,可以在主循环流程中添加“喂狗”即可。

(2)用定时器进行定时“喂狗”

在裸机中也可以使用定时器的方式进行定时喂狗。这种方式相比在代码中多处插入“喂狗”操作要使代码看起来简洁一下,但是一般都需要占用硬件定时的硬件资源,还要多加定时器中断,如果程序本身就较为复杂的话,多加异常中断可能会给系统维护和稳定性带来一些不可预料的问题。

当然,还有其他的实现和使用的方式,对于裸机的看门狗“喂狗”,总体而言是比较简单的,需要考虑的东西相对少一些,实现起来更加简单。

2、RTOS中使用看门狗

在RTOS中使用看门狗就复杂很多,需要考虑的问题就较为多。因为RTOS中的多任务机制的存在,理论上程序越复杂,系统运行就越复杂,多任务的存在就可能会有更多的变化情况,有些可能还不好预料。

在多任务中,用看门狗的时候,我们希望可以实现看门狗监测整个系统每个任务的健康存活情况。假如系统中某个任务死掉了,能够通过看门狗进行系统复位,从而重新复位系统,以使系统重新开始运行。而每个任务都正常的时候,不要进行看门狗复位,从而不影响系统的正常执行。

浅显的讨论一下在RTOS下的看门狗 “喂狗” 的实现方式:

(1)在代码的执行流中插入“喂狗”

这种方式就是在每个任务的调度流中都插入“喂狗”操作,然后通过任务的调度执行实现“喂狗”的操作。这种方式就比较好理解也不复杂,只要开发者熟悉代码,知道代码的执行顺序流,然后在程序中插入“喂狗”操作即可。

这种方式有什么优缺点呢?

优点:

方便实现。只要在各个任务中调用“喂狗”操作即可,在占用cpu执行时间较长的程序段也要注意“喂狗”。

缺点:

不能实现监控每个任务的存活情况。因为当使用这种方式的时候,有多处地方可以进行喂狗操作,这个时候假如某个任务已经死掉了,它自身因为已经死掉不能在进行喂狗,但是其他的任务可以喂狗,整个系统依然不回被复位,也就不能知道某个任务是否出现问题。

(2)监视各个任务的存活状态进行喂狗

这种方式相比较于到处去调用喂狗操作更加实用,它是要在确认每个任务都正常存活的情况下才喂狗。如果某个任务因为故障不再运行了,就会导致超时不能喂狗,从而会导致系统被看门狗复位。

这种方式的实现有很多种手段,比如用事件标志组的方式就比较容易实现。

做法是:

1)创建一个“喂狗”的独立任务;
2)申请一个事件标志组,并为每个任务留一个标志位;
3)在每个单独的任务中执行的时候置位属于这个任务的标志位;
4)在“喂狗”的独立任务中检测这些所有的任务所关联的标志位,
如果所有的标志位都置位成立,说明所有的任务都正常,进行一次喂狗操作。反之则引发一次复位。

这种方式也有一个问题需要留意的:

其他的任务可以通过这个“喂狗”的独立任务进行监测,那这个独立的“喂狗”任务由谁来监测它呢?答案肯定是由看门狗进行监测啊。

在这个独立的“喂狗”任务中,它除了要监测其他任务的事件标志外,还要自身能够定时的进行“喂狗”的操作,防止长时间不“喂狗”导致系统复位。这样可以实现看门狗监测这个“喂狗”任务,而“喂狗”任务监测其他的任务的状态。

特别注意:因为RTOS环境下的软件开发毕竟与裸机开发不同,RTOS下的有阻塞、挂起、删除、恢复任务等的操作,所以对使用看门狗会有更多的难度,需要综合实际的使用场景进行考虑。

当然,文章里只是简单的分析了一些使用看门狗的思路,做法是多种多样的,如果有觉得文中分析的有误,还望指正!有更好的思路也望多多分享!!!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++初阶】类和对象(下)

一.再谈构造函数 构造函数其实分为: 1.函数体赋值 2.初始化列表 之前所讲到的构造函数其实都是函数体赋值,那么本篇文章将会具体讲述初始化列表。 初始化列表 语法 以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"…

Kali Linux 操作系统安装详细步骤——基于 VMware 虚拟机

1. Kali 操作系统简介 Kali Linux 是一个基于 Debian 的 Linux 发行版,旨在进行高级渗透测试和安全审计。Kali Linux 包含数百种工具,适用于各种信息安全任务,如渗透测试,安全研究,计算机取证和逆向工程。Kali Linux 由…

【论文】SimCLS:一个简单的框架 摘要总结的对比学习(1)

SimCLS:摘要总结的对比学习(1) 写在最前面模型框架 摘要1 简介 写在最前面 SimCLS: A Simple Framework for Contrastive Learning of Abstractive Summarization(2021ACL会议) https://arxiv.org/abs/2106.01890 论文:https://…

GIT常用操作

GIT基本使用保姆级教程 1、本地安装GIT 1.1、安装 GIT安装包获取:https://git-scm.com/ 具体安装流程自行百度或自行摸索 1.2、配置信息 安装完成后运行git程序,大打开git bash界面,然后输入以下命令,设置全局用户名与全局邮…

软件设计师笔记--数据结构

文章目录 前言学习资料数据结构大 O 表示法时间复杂度线性结构和线性表线性表的顺序存储线性表的链式存储栈的顺序存储栈的链式存储队列的顺序存储与循环队列 串KMP 数组矩阵树二叉树二叉树的顺序存储结构二叉树的链式存储结构二叉树的遍历平衡二叉树二叉排序树最优二叉树(哈夫…

ZZS-7系列分闸、合闸、电源监视综合控制装置ZZS-7/1 ac220v

ZZS-7系列分闸、合闸、电源监视综合控制装置 系列型号: ZZS-7/1分闸、合闸、电源监视综合控制装置 ZZS-7/11分闸、合闸、电源监视综合控制装置 ZZS-7/12分闸、合闸、电源监视综合控制装置 ZZS-7/13分闸、合闸、电源监视综合控制装置 ZZS-7/14分闸、合闸、电源…

分享111个Java源码,总有一款适合您

分享111个Java源码,总有一款适合您 源码下载链接:https://pan.baidu.com/s/1fycjYHA7y6r-IH8H7v5XKA?pwdag8l 提取码:ag8l ​ Druid v1.2.15 OpenJDK Java开发环境 v21.5 Diboot轻代码开发平台 v2.8.0 blockj 基础区块链(联…

ANSYS APDL谐响应分析——悬臂梁的频响函数计算以及幅值、角度(相位)、分贝计算

问题描述 研究一根悬臂梁,材质为钢材。长度 L 2 L2 L2 米;截面为矩形,矩形的长度为 H 5 c m H 5cm H5cm,宽度为 B 2 c m B 2cm B2cm 。 建模思路: 先建立节点,然后用节点生成单元。使用n命令&…

《基于多尺度特征提取的少样本脉搏波形轮廓分类》阅读笔记

目录 一、论文摘要 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一课…

索引—MySQL

文章目录 1.定义以及相关知识1.1定义1.2数据库保存数据的基本单位 2.MySQL中索引分类2.1B树和B树2.2主键索引(聚簇索引)2.3非聚簇索引2.4覆盖索引2.5复合索引(联合索引)2.6基于B树的索引2.7hash索引 1.定义以及相关知识 1.1定义 …

数据导向下制造业的生产效率、交易效率提升办法

在智能制造和工业4.0成为趋势的今天,大部分制造业企业,均已在企业内部通过实施PLM系统(Product Lifecycle Management,产品生命周期管理系统),实现了对组织内产品研发过程和产品研发数据的管理,…

基于Spring Boot的在线考试系统

系统分析 可行性分析 一个完整的系统,可行性分析是必须要有的,因为关系到系统生存问题,对开发的意义进行分析,能否通过本系统来补充线下在线考试管理模式中的缺限,去解决其中的不足等,通过对本系统&#…

基于SpringBoot, Vue实现的校园二手书交易系统

背景 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管理的兴起也同时飞速发…

【Linux】基本权限

😁作者:日出等日落 🔔专栏:Linux 任何值得到达的地方,都没有捷径。 目录 Linux权限: 权限的概念: Linux上面的用户分类: Linux权限管理 文件访问者的分类(人) 文件…

金兰组织 | 2023金兰解决方案集经营管理篇正式发布

为助力企业创新管理、提质增效,人大金仓携手金兰组织成员单位,于近期发布多项经营管理领域的联合解决方案,共享创新应用成果。 /人大金仓高级副总裁宋瑞/ 人大金仓高级副总裁宋瑞在致辞中表示:“联合解决方案创新是指通过把不同领…

跟着我学 AI丨ChatGPT 详解

随着人工智能的发展,聊天机器人成为了一个备受关注的领域。而ChatGPT作为其中的佼佼者,其功能和技术水平也越来越受到人们的关注。那么,什么是ChatGPT?它又有哪些优点和限制呢? ChatGPT是一款基于自然语言处理技术开发…

178_技巧_Power BI 动态排名多项展示

178_技巧_Power BI 动态排名多项展示 一、背景 在 Power BI 中做排名矩阵时,我们经常遇到同一维度下,多项展示排名的问题。类似这样的排名矩阵,排名的名次不会太多,但是同一维度下会有多项同时展示排名,并且还要满足…

第10 CURD操作与RedisCache缓存的强制清理的实现

using System.Net; using Microsoft.Extensions.Caching.Distributed; using Core.Caching; using Core.Configuration; using StackExchange.Redis; namespace Services.Caching { /// <summary> /// 【Redis分布式缓存数据库软件管理器--类】 /// <remarks>…

2023零售店铺管理系统最新排名,这5款性价比高!

很多零售店铺的老板&#xff0c;每天都在被开单收银、记账对账、商品销售、销售数据等各种琐事困扰&#xff0c;使用传统的人工管理模式&#xff0c;耗费了大量的时间和成本&#xff0c;也没有达到理想的效果。 其实&#xff0c;零售店铺管理也可以很简单省事&#xff0c;借助零…

TCP三次握手

TCP三次握手 文章目录 TCP三次握手1. TCP三次握手过程和状态变迁1. 准备工作2. 进行连接 2. 能把三次握手改为两次握手吗&#xff1f;3. 改为两次握手会出现什么后果&#xff1f;4. 改为四次握手行不行&#xff1f;5. TCP第三次握手失败了怎么办&#xff1f;6. 三次握手是否可以…