AUTOSAR实战篇:手把手带你搞定Watchdog协议栈
前言
正文
在进行Watchdog协议栈实战之前,建议先阅读小T之前有关Watchdog协议栈的两篇文章《Watchdog协议栈上》与《Watchdog协议栈下》先了解下在AUTOSAR框架下的Watchdog协议栈到底存在哪些概念与内容,有哪些需要注意的点。
为了便于大家针对实战内容的理解,小T将之前协议栈的基础内容介绍在本文中做个总体的介绍与总结,方便大家抓住重点,快速完成实战配置的理解。
Watchdog协议栈总体介绍
本文以AUTOSAR标准4.2.2为例,如下图1所示,整个Watchdog协议栈可以分为如下三个主要的模块:
- WdgM模块:全称“Watchdog Manager”,首先它是一项BSW Service, 该Service提供的就是从硬件看门狗实体监控的过程抽象出来完成软件程序执行监控抽象;
- WdgIf模块:全称“Watchdog Interface”,它属于ECU抽象层,能够允许上层WdgM模块来同时处理多个看门狗实体,比如外部看门狗或者内部看门狗等;
- Wdg模块:全称“Watchdog Driver”,它属于MCAL的一部分,用于完成看门狗初始化,模式设置以及喂狗设置等。
对于上述三个模块,其中整个Watchdog协议栈最为关键的部分就是WdgM模块,由于其存在十分重要的监控类别,监控对象按照AUTOSAR概念将其称为Supervised Entities,俗称"监控实体"。
我们可以通过针对不同的应用场景需要设置不同的监控类别,从而完成整个软件执行过程中偶发的异常状态。
Watchdog监控类别
针对Watchdog Manager模块的监控类别,我们可以将其分为如下三种:
- Alive Supervision:用于需要监控周期性任务调度周期是否稳定的场景;
- Deadline Supervision:用于需要监控非周期性任务某段代码区间执行时间是否在预期内的场景;
- Logical Supervision:用于需要监控程序执行顺序是否符合代码设计的场景。
典型的对于一个监控实体就是一个SWC或者一个runnable,它们在其内部存在一个或者多个Checkpoint来完成彼此之间的Transition,这种迁移变化就被称为Graph,接下来我们将更为细致的分析下上述三种监控方式的特点。
- Alive Supervision: 用于检查某一个监控实体是否执行时间过快或者过慢,通过参数设定固定的一个时间段,检查下期望调用Checkpoint函数的次数是否在预期设定的阈值范围内,如果在范围内则监控结果为correct,否则监控结果则为incorrect;
- Deadline Supervision:检查两个checkpoint之间的执行时间是否在设置的阈值范围内,如果在范围内则监控结果为correct,否则监控结果则为incorrect,其中最为关键的两个参数就是监控阈值的最小值与最大值;
- Logical Supervision: 检查程序的执行时序是否在预期的设定范围内,本质上来讲就是看这些checkpoint之间的Transition是否在预期的Transition列表中,如果在列表中则监控结果为correct,否则监控结果则为incorrect。
Watchdog协议栈状态机
WdgM模块能够及时处理多个监控实体的多个监控类别以及多个看门狗,正因如此,因为需要针对每一个监控实体都需要通过唯一的状态进行表示,我们将其称为Local Status,每一个监控实体均有唯一的Local Status来进行表示,其状态可以分为监控OK,监控失败,监控超时,如下图2是AUTOSAR标准文档中的监控实体的Local Status状态机图: