您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
   
 
 订阅
一文了解AUTOSAR看门狗
 
作者:lassex
  104  次浏览      2 次
 2024-12-18
 
编辑推荐:
本文主要介绍了AUTOSAR看门狗相关内容。 希望对您的学习有所帮助。
本文来自于微信公众号谦益行,由火龙果软件Linda编辑、推荐。

1 看门狗基础知识

WdgM是标准的Autosar架构中的服务层,主要负责监控程序的执行,其监控的单元称为独立实体(Entity)。WdgM提供了三种监控机制:

1 针对周期运行软件的的Alive监控;

2 针对非周期运行软件的DeadLine监控;

3 针对执行顺序的逻辑(Logical)监控。

Alive监控通过配置一段时间内的软件期望执行次数来监测Entity是否执行的过快或者过慢。DeadLine监控通过设置两个监控点(Checkpoint)间允许运行的时间来监测Entity的执行时间是否符合要求。Logical监测聚焦于流程的运行,主要用来监测Entity是否按照给定的流程运行。

当发生看门狗错误时,一般有4种处理方式供用户选择:

1 通过RTE通知SWC或者CDD;

2 当监测到non-trusted发生错误时,可以通过BswM模块停止这个partion;

3 重新初始化硬件和软件(先deinit再init);

4 复位MCU。

1.2 Local Status & Global Status

Overview of Watchdog Manager Supervision

WdgM的状态机由两部分组成:Local Status(每个Entity的状态)和Global Status(对所有Local Status的状态进行逻辑判断,上边的错误处理就是针对Global Status而言的)。

1.2.1 Local Status

Local Supervision Status

当调用WdgM_Init初始化后,各个Entity的local状态为WDGM_LOCAL_STATUS_OK。

1)当出现喂狗错误(Alive监控的错误次数大于配置的WdgMFailedAliveSupervisionRefCycleTol或者出现DeaDline监控错误)时,Local状态将在WdgM_MainFunction中切换为WDGM_LOCAL_STATUS_EXPIRED;

2)当Alive监控出现错误且错误次数不大于配置的WdgMFailedAliveSupervisionRefCycleTol时,Local状态将在WdgM_MainFunction中切换为WDGM_LOCAL_STATUS_FAILED;

3)用户可以通过WdgM_SetMode函数将Local状态设置为WDGM_LOCAL_STATUS_DEACTIVATED,当在DEACTIVATED设置为ACTIVE时,将返回到WDGM_LOCAL_STATUS_OK状态;

4)处于WDGM_LOCAL_STATUS_EXPIRED时,WdgM_MainFunction会一直监测到Alive监控的正确性,正确时会减小错误的counter计数,不正确时会增加错误counter计数,从而决定是跳到OK还是EXPIRED状态(当然Deadline错误会直接跳转到EXPIRED)。

1.2.2 Global Status

Global Supervision Status

当调用WdgM_Init初始化后,Global状态为WDGM_GLOBAL_STATUS_OK。

1) 当至少一个Entity的Local状态为Failed且没有一个Entity的状态为EXPIRED时,Global状态在WdgM_MainFunction中切换为WDGM_GLOBAL_STATUS_FAILED;

2)当至少一个Entity的Local状态为EXPIRED且次数小于配置的WdgMFailedAliveSupervisionRefCycleTol时,Global状态切换为WDGM_GLOBAL_STATUS_EXPIRED(如果WdgMFailedAliveSupervisionRefCycleTol为0,则直接进入WDGM_GLOBAL_STATUS_STOPPED);

3) 当Global状态处于WDGM_GLOBAL_STATUS_EXPIRED时,会对EXPIRED的错误次数进行监测,当错误次数大于配置的WdgMFailedAliveSupervisionRefCycleTol时,切换到WDGM_GLOBAL_STATUS_STOPPED状态;

4) 处于WDGM_GLOBAL_STATUS_STOPPED时,可以通过WdgM_DeInit函数进入WDGM_GLOBAL_STATUS_DEACTIVATED状态。

1.3 监控原理

1.3.1 Alive监控原理

监控实体(SE)通过调用WdgM_CheckpointReached函数增加监测点(Checkpoint)的Alive Counter来进行监控。WdgM在WdgM_MainFunction中通过监测给定的周期(WdgMSupervisionReferenceCycle倍的WdgM_MainFunction运行周期)checkpoint的Alive Counter是否在给定范围内(Expected – Min Margin;Expected + Max Margin),当不在给定的范围内时,SE的local状态是否需要跳到FAILED或者expired。

1.3.2 Deadline监控原理

对于每个Deadline监控的SE来说,需要配置两个checkpoint(start和end).当执行start checkpoint时,WdgM记录当前的时间(读取OS Ticks),当执行end checkpoint时,WdgM通过调用GetElapsedTime的OS服务函数来计算时间差并判断是否在WdgMDeadlineMin和WdgMDeadlineMax之间。

1.3.3 Logical监控原理

Supervised Entity

Control Flow Graph

每个Logical监控实体都有自己的一个Active标志。当调用WdgM_Init后,其为False。当checkpoint到达时(调用WdgM_CheckpointReached函数),分两种情况:

1)是Initial Checkpoint(通过WdgMInternalCheckpointInitialRef配置的checkpoint),那么就会将Active标志置为True,表示后续将会对SE进行逻辑判断;

2) 不是Initial Checkpoint触发(其他的checkpoint到达了),那么本次Logical监控的SE的运行结果就是错误的(Local状态变为FAILED或者EXPIRED(如上描述,根据配置决定))。

当Active标志为True后,WdgM会存储每个SE的最近一个到达的checkpoint,从而判断当前到达的checkpoint是否是正确的,最终达到逻辑判断的目的。

2 看门狗的使用

Autosar中看门狗架构

Autosar中WdgM负责提供用户设置的监控点,WdgIf负责对看门狗进行抽象,向WdgM提供统一的接口,Wdg可以是内狗也可以是外狗。

看门狗按位置可以分为内狗与外狗。顾名思义,内狗就是单片机内部的看门狗,外狗就是挂在单片机外部的看门狗。内狗一般通过操作寄存器来喂狗,而外狗可以通过硬件(如SPI/I2C/IO)来喂狗。

按照类型可以分为独立狗和窗口狗。独立狗可以理解为在看门狗启动后,一个计数器开始递减,用户必须在递减到0之前之前喂狗,而窗口狗是是计数器递减后,用户需要在计数器给定值的范围内喂狗。

按照喂狗时间的长短,还可以分为快狗和慢狗。快狗的最大允许喂狗范围远小于慢狗的范围值。

2.1 内部看门狗

单片机内部的看门狗定时器(WDGT)是一个硬件计时电路,用来监测由软件故障导致的系统故障。片上有两个看门狗定时器外设,独立看门狗定时器(FWDGT)和窗口看门狗定时器(WWDGT)。

2.1.1 独立看门狗

向控制寄存器(FWDGT_CTL)中写给定的值可以开启独立看门狗定时器,计数器开始向下计数。当计数器记到0x000,产生一次复位。在任何时候向控制寄存器(FWDGT_CTL)中写给定的值可以重装载计数器,重装载值来源于FWDGT_RLD寄存器。软件可以在计数器计数值达到0x000之前可以通过重装载计数器来阻止看门狗定时器复位。

某单片机独立看门狗定时器框图

2.1.2 窗口看门狗

窗口看门狗定时器开启后,窗口看门狗定时器开启后,向下递减计数器值逐渐减小。计数值达到给定值时会产生复位。在计数器计数值达到窗口寄存器值之前,计数器的更新也会产生复位。因此软件需要在给定的区间内更新。

某单片机窗口看门狗定时器框图

2.2 外部看门狗

SBC与MCU的连接示意图

Window watchdog and functional watchdog

Watchdog state diagram

上图为TLF35584的看门狗示意图,我们以此为例来说明。从图上可以看出,该SBC内有两种看门狗:窗口狗和功能狗。其中窗口狗可以通过IO(WDI)或者SPI来喂狗,而功能狗只能通过SPI来喂狗。看门狗未及时喂狗时会导致Watchdog Failure Counter的增加,当超过设定值时,会上报给该SBC的安全状态控制模块(Safe State Control).

2.3 不同类型看门狗的使用场景

2.3.1 窗口狗VS独立狗

窗口狗可以用于Autosar的Deadline监控,独立狗一般用于Alive监控。

2.3.2 外狗VS内狗

对于外狗(SBC内部的看门狗),一般上电后就会自动开启,而内狗一般在进入main函数之后(或者说是OS启动后)才开启,因此在启动的这段时间可以由外狗来监测(超时后通过SBC自己复位不再输出从而达到复位MCU的目的,如上图Watchdog state diagram所示,在Initialization中连续不喂狗TLF35584就会产生复位,复位时就会停止对外输出)。

3 实战喂狗

看门狗的喂狗一般是任务中喂狗而不是定时器中断喂狗,因为如果出现了任务跑飞或者陷入某个死循环,定时器中断可能还在正常运行并正常喂狗,那么看门狗就会失去作用。但是,对于使用窗口狗来说,可以结合定时器中断来进行喂狗,下边我们将详细叙述这两种模式。

3.1 主任务喂狗

如上图所示,在WdgM_MainFunction中先判断各个监控实体(SE)的Local Status,再根据Local Status决定当前的Global Status的状态。

1) 当Global状态为STOPPED时,此时不再喂狗(将TimeOutValue设置为0);

2) 当Global状态为其他状态时,将TimeOutValue设置为用户通过Autosar工具配置的值(WdgMTriggerConditionValue配置的值)

3.2 中断喂狗

WdgM通过WdgIf调用Wdg_SetTriggerCondition时,判断两次调用的时间时间间隔ElapsedTime,

1) 如果ElapsedTime大于看门狗超时时间那么就不需要再在中断中喂狗,此时只需要停止定时器中断即可(调用Gpt_StopTimer);

2) 如果ElapsedTime小于看门狗超时时间,那么只需要设置新的超时时间并等待定时器中断到达后,在中断服务函数中进行喂狗即可。

在中断中喂狗一般适用于窗口狗,因为可以起一个窗口狗窗口中间值作为定时喂狗的时间,但是假如用在外狗的喂狗上需要注意的是尽量用IO去喂狗而不要通过总线,因为这可能会增加中断服务函数的时间!

   
104 次浏览       2
 
相关文章

CMM之后对CMMI的思考
对软件研发项目管理的深入探讨
软件过程改进
软件过程改进的实现
 
相关文档

软件过程改进框架
软件过程改进的CMM-TSP-PSP模型
过程塑造(小型软件团队过程改进)
软件过程改进:经验和教训
 
相关课程

以"我"为中心的过程改进(iProcess )
iProcess过程改进实践
CMMI体系与实践
基于CMMI标准的软件质量保证

最新活动计划
C++高级编程 12-25 [线上]
白盒测试技术与工具实践 12-24[线上]
LLM大模型应用与项目构建 12-26[特惠]
需求分析最佳实践与沙盘演练 1-6[线上]
SysML建模专家 1-16[北京]
UAF架构体系与实践 1-22[北京]
 
 
最新文章
iPerson的过程观:要 过程 or 结果
基于模型的需求管理方法与工具
敏捷产品管理之 Story
敏捷开发需求管理(产品backlog)
Kanban看板管理实践精要
最新课程
基于iProcess的敏捷过程
软件开发过程中的项目管理
持续集成与敏捷开发
敏捷过程实践
敏捷测试-简单而可行
更多...   
成功案例
英特尔 SCRUM-敏捷开发实战
某著名汽车 敏捷开发过程与管理实践
北京 敏捷开发过程与项目管理
东方证券 基于看板的敏捷方法实践
亚信 工作量估算
更多...