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

这篇具有很好参考价值的文章主要介绍了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下的有阻塞、挂起、删除、恢复任务等的操作,所以对使用看门狗会有更多的难度,需要综合实际的使用场景进行考虑。

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

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

 文章来源地址https://www.toymoban.com/news/detail-436055.html

到了这里,关于freeRTOS中使用看门狗的一点思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [RPC]关于RPC的一点理解

    以下内容仅为个人理解,不作正确性保证,感谢批评指正 在分布式计算中,远程过程调用 (RPC) 是指计算机程序导致过程(子例程)在不同的地址空间(通常在共享网络上的另一台计算机上)中执行, 它的编码就好像是普通(本地)过程调用一样,程序员没有 显式 编码远程

    2024年02月10日
    浏览(29)
  • 关于视觉3d目标检测学习像素深度的一点理解

    在真实世界的一个物体,可以通过相机矩阵将其投影到像素坐标系上 但是,在像素坐标系上的像素,由于相机的原理,导致它的深度信息已经没有了,所以原理上是没法得到其真实深度的(即3d位置) 那么现在的深度学习方法又为什么能预测出物体的深度呢? 个人理解: 大概

    2024年01月25日
    浏览(40)
  • 硬件和软件看门狗的差别

      说到提高系统的可靠性,刚入门的工程师都知道,增加一个看门狗是重要的手段。看门狗又分软件看门狗和硬件看门狗,但是很多人可能没有深入了解其中的区别,工作中可能都遇到这样的PK:   软件和硬件看门狗有什么区别?学完这篇文章就可以迎刃而解了。 硬件看

    2024年02月08日
    浏览(47)
  • Flutter关于StatefulWidget中State刷新时机的一点实用理解

    刚入门flutter开发,使用StatefulWidget踩了很多坑,就我遇到典型问题谈谈见解。 1.initState方法只会在控件初始化的时候执行一遍。 2.控件内部执行setState方法,则会每次执行build方法。 3.控件销毁会执行dispose方法,所以一些未释放的资源可以在该方法中执行,例如计时器。 4.使

    2024年02月10日
    浏览(33)
  • 关于小程序微信登录后端设计的一点分享

    我们知道微信小程序对于微信登录的设计其实是给到了一个微信login的功能接口,其中响应成功会返回一个临时凭证码(时间大概是5分钟)code,这个临时的凭证码是从https://api.weixin.qq.com/sns/jscode2session获取openId的必带参数。下图示微信登录过程的时序图:  这里我们只介绍到

    2024年02月10日
    浏览(28)
  • [数学建模] 0、关于数学建模的一点看法&付费专栏食用说明

    1、前言 在大学期间,几次参加数学建模的经历给我带来的印象还是很深

    2024年02月15日
    浏览(29)
  • 关于工作流开发前端选型的一点个人见解(bpmn.js与LogicFlow)

    掘金2023年度人气创作者打榜中,快来帮我打榜吧~ https://activity.juejin.cn/rank/2023/writer/747323639208391?utm_campaign=annual_2023utm_medium=self_web_shareutm_source=MiyueFE 首先需要明确的一点是,本文的出发点 纯粹是针对工作流开发 的场景的选型对比,其他业务场景下建议重新调研。 什么是工作

    2024年02月20日
    浏览(36)
  • 看门狗的详细介绍(重点:喂狗操作应该在主循环或其他正常运行的代码段中执行,而不是在中断服务函数中进行)

    1. 看门狗的作用是:当单片机因为软硬件问题或者外界干扰导致死机时,可以自动复位单片机,使系统重新正常工作。 当电脑的系统死机了,我们可以人为手动的进行重启,使电脑重新正常工作。但当火星的单片机系统死机了,我们没办法人为的去重启,只能靠这只看门狗来

    2024年02月07日
    浏览(35)
  • 背包问题的一点看法

    背包问题已经被人讲得很透彻了,上古大神写的《背包九讲》已经相当详细的阐述了背包问题,本文不会过多赘述,主要总结一些有关背包的有趣的玩意。 01背包和完全背包是非常类似的问题,01背包的特点是每种物品最多只能取一个,而完全背包每种物品都可以任意取。 以

    2024年02月12日
    浏览(25)
  • 账号登录相关的一点随笔

    最后更新于2023年8月8日 14:25:32 简单:一个token验证; 前端发来登录信息,后端验证通过后,将token发回前端; 复杂:Access Token + Refresh Token验证: 将Access Token和Refresh Token都发回前端,AT过期时间短,RT时间长。AT过期后,使用RT刷新AT,再用新的AT登录。 token这东西可以放在ht

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包