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

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

3天内不再提示

到底该把喂狗任务优先级设置成最高还是最低好?

鱼鹰谈单片机 来源:鱼鹰谈单片机 2023-09-13 09:10 次阅读

前言

一个学员在学习 uCOS 系统过程中,对看门狗任务的优先级产生了疑惑,到底该把喂狗任务优先级设置成最高还是最低好?

这里谈谈个人看法,首先给出结论,最低,甚至是在空闲任务运行(使用钩子函数)。

理由

首先我们要知道看门狗的工作是什么?为什么要设置看门狗。

很多产品出厂时,都会开启看门狗,这是产品运行的最后保障,可以在出现软件 bug 时(如hardfault,死循环等),及时恢复运行,让产品可以重新继续工作下去,但这不意味着万事大吉,一旦发现了看门狗引起的复位问题(可以通过寄存器标志位查看因何复位),一定要找到问题根因,否则出现了一次,后面一定还会不停出现,用户体验相当不好。

那么我们应该怎么设置看门狗的功能呢?这个学员准备这么设计:

1、超时时间 1s ,喂狗时间 500ms

2、看门狗任务优先级最高

3、每个任务发送信号量给看门狗任务,看门狗任务判断是否收到了全部任务信号量,然后再决定是否喂狗。

看似合理,但其实有许多问题,接下来一个一个讨论。

超时时间?

首先是超时时间问题,设计 1s 超时时间,500ms 喂狗,这对喂狗功能本身来说是没有问题的,但这显得过于严苛了,因为只要你某个任务运行超过了 1s,那很容易造成重启现象,虽然说一个任务持续运行 1 s 也算是个不大不小的问题,但你要知道,看门狗是应对极其严重问题下的紧急措施,这种运行缓慢只是体验不好,如果经常发生,在研发阶段就应该解决,如果是偶发的,那么对应客户来说,基本是感知不到的。

而这么短的时间就完成重启,你可能很难从外部现象分清到底是因为电源、复位引脚还是看门狗导致的重启,在没有日志情况下,增大排查范围。

如果我们能设置成10多秒的超时时间,那么我们很容易就能从表象发现,产品停止工作了,然后我们有足够的时间抓取到现场环境,这对定位这种偶发性问题非常有效(目前所待的两个公司看门狗超时时间都设置在 10 s 以上)。

不过每种产品要求不同,对超时时间也不尽相同,所以自行决定即可(时间要求严格者,可考虑使用窗口看门狗)。

优先级和信号量?

第二点,优先级最高?在鱼鹰看来,这绝对不行,这和把看门狗功能放在中断中执行没什么两样。

这里和第三点结合一起讨论。

通过每个任务设置信号量的方式,确实保证了每个任务都正常运行,但真的合适吗?

首先每个任务增加信号量,对系统资源是一大消耗,其次你能保证后续的开发人员在增加任务时能遵照你的设计要求写代码吗?不一定吧。

一旦增加新任务而未增加这个喂狗信号量,那么这个新任务的死活,看门狗可就无能为力了。因为看门狗任务优先级最高,只要现有信号量接收到了,就一定会喂狗,那么新任务可监控不了。

另外有些任务在设计时,可能就是很长时间才运行一次(如外部中断触发),那么这种任务肯定要因为你这个设计而不得不做出修改。

还有些任务走了异常分支,并没有释放CPU的行为(如delay),却能正常释放信号量,那么也是很难发现的。

而将看门狗任务优先级设计成最低(建议在空闲任务执行,这样它一定是最低的,不会被人为修改),那么不管后面的人怎么添加新任务,只要新任务死循环,不释放 CPU(低优先级任务无法运行,包括看门狗任务),那么一定会被感知到,从而使看门狗复位。

而为了保证一些关键代码一定会被执行,可以设计一个变量,每个 bit 是一处关键代码(在关键代码执行后置 1),这样只要在喂狗前判断这个变量相关位是否设置即可。就是要注意该变量的保护,如关中断。

这样通过低优先级+位域的方式,就保证了其它任务一定都能被执行到,并且对关键代码也做了进一步运行保证,使看门狗功能最大化。






审核编辑:刘清

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

    关注

    10

    文章

    541

    浏览量

    70256
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41023
  • 信号量
    +关注

    关注

    0

    文章

    53

    浏览量

    8257
  • ucos系统
    +关注

    关注

    0

    文章

    2

    浏览量

    5986

原文标题:谈谈看门狗优先级

文章出处:【微信号:emOsprey,微信公众号:鱼鹰谈单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    第8章 任务优先级修改

    优先级设置要注意以下几个问题:u 设置任务优先级时,数值越小优先级越低。u
    发表于 10-03 00:15

    任务优先级设置

    //任务优先级
    发表于 02-16 17:20

    STM32中断优先级彻底讲解

    ,中断源优先级是在中断优先级寄存器中设置的,只能设置及高四位,必须根据中断优先级分组中设置
    发表于 07-06 03:27

    UCOSII实验1,任务调度的实验中为什么最低优先级的给了开始任务

    在实验中有这样一句代码:#define START_TASK_PRIO10 //开始任务优先级设置最低。可是操作系统不是
    发表于 03-19 06:35

    UC/OS-II系统为什么例子里还能设置按键任务优先级为3

    KEY_TASK_STK[KEY_STK_SIZE];//任务函数接口void key_task(void *pdata);UC/OS-II 系统不是保留了4个最高优先级任务
    发表于 05-30 04:35

    蓝牙无线电任务优先级

    任务首先获得最小优先级,然后可以逐渐增加到最大优先级。下一节将对此进行说明。最低优先级为255,最高
    发表于 10-15 11:30

    请问UCOSIII中自己写的最低优先级任务能自行任务切换吗?

    按键点亮LED灯的任务优先级定为最低优先级8,其他自定义任务都比他高),在这个while
    发表于 03-17 04:35

    ucos3中systick中断的优先级在哪里修改?

    ucos3中systick中断的优先级如果要修改应该在哪里修改呢??是设置成最高优先级还是怎么样??但
    发表于 03-20 02:53

    任务优先级问题

    优先级任务可以通过时间片轮转调度来实现任务切换。在不同优先级任务中,如果高优先级
    发表于 04-02 04:35

    COSII移植例程里开始任务优先级为什么是最低的?

    UCOSII移植例程里开始任务优先级为什么是最低的?#define START_TASK_PRIO10我看任哲的书里是定义优先级最高的?、
    发表于 05-19 03:19

    freeRTOS任务优先级设置问题如何解决

    、状态的刷新。3、串口通信任务------接收上位机的指令,并执行相应动作,返回相关数据。4、数据采样任务------对信号脉冲计数。比如一个完整的操作过程就是:按键控制进入检测界面——>按键控制启动检测——>上位机通过串口读取当前检测数据。请问
    发表于 06-10 04:36

    软件定时器的优先级任务优先级是同一个东西吗?

    请教一下软件定时器的优先级 与任务优先级 是不是同一个东西。 还有一个是硬件中断的优先级是不是最高的我理解是软件定时器相当于周期执行的
    发表于 06-19 04:06

    FREERTOS中任务优先级设置

    FREERTOS中,各个任务优先级怎么设置比较好呢?或者是说有什么标准?疑惑中。。。。。。
    发表于 07-19 08:03

    freertos中的任务优先级通过什么函数设置

    任务优先级怎么设置成最高
    发表于 11-02 07:40

    谈谈MCU看门狗任务优先级设置

    一个学员在学习 uCOS 系统过程中,对看门狗任务优先级产生了疑惑,到底该把喂狗任务优先级
    发表于 09-15 09:32 378次阅读