AUTOSAR WatchdogManager模块详解
目录
1. 概述
看门狗管理器(Watchdog Manager,简称WdgM)是AUTOSAR标准中的一个关键基础软件模块,负责监控软件组件的执行状况,确保系统的安全运行。WdgM通过提供软件监控机制,检测软件组件是否按照预期执行,如果发现异常,则触发相应的错误处理机制,防止系统出现不可预测的行为。
看门狗管理器模块主要提供以下功能:
- 活性监控(Alive Supervision):监控软件组件是否在预期的频率下调用检查点
- 截止时间监控(Deadline Supervision):监控软件组件是否在指定的时间窗口内完成操作
- 逻辑监控(Logical Supervision):监控软件组件的执行顺序是否符合预期
- 状态管理:维护本地和全局监控状态,基于监控结果决定系统行为
- 硬件看门狗控制:通过与看门狗接口层交互,控制硬件看门狗的行为
WdgM模块在AUTOSAR安全关键系统中扮演重要角色,确保系统即使在软件故障的情况下也能维持安全状态。
2. 架构设计
看门狗管理器模块在AUTOSAR分层架构中处于服务层,与其他基础软件模块和应用软件组件进行交互。下图展示了WdgM模块的架构及其在AUTOSAR体系中的位置。
图1:WatchdogManager架构图
从图1可以看出,WdgM模块的架构设计具有以下特点:
-
分层结构:
- 应用层:包含应用软件组件(SWC)和复杂驱动程序(CDD),它们是被监控的对象
- RTE层:运行时环境,负责应用层与基础软件层之间的通信
- 基础软件层:包含服务层、ECU抽象层、微控制器抽象层等
-
模块交互:
- WdgM与开发错误跟踪器(Det)和诊断事件管理器(Dem)交互,报告开发错误和运行时错误
- WdgM与看门狗接口(WdgIf)交互,控制硬件看门狗
- WdgM与操作系统(OS)交互,获取时间戳信息
- WdgM与通信管理器(ComM)交互,通知网络状态
- WdgM与普通定时器(GPT)交互,获取定时器服务
-
调用关系:
- 应用软件组件通过RTE调用WdgM的API
- 复杂驱动程序可以直接调用WdgM的API
- WdgM通过WdgIf控制硬件看门狗
WdgM模块的主要职责包括监控软件模块的执行状况、提供各种监控机制、控制硬件看门狗,以及管理监控模式。通过这种架构设计,WdgM能够有效地监控系统运行状态,及时发现并处理异常情况。
3. 活性监控
3.1 活性监控配置
活性监控(Alive Supervision)是WdgM的基本监控功能之一,用于检查软件组件是否按照预期的频率执行特定的检查点。活性监控的配置可以分为最简配置和多检查点配置两种模式。
图2:WatchdogManager活性监控配置图
从图2可以看出,活性监控配置的核心要素包括:
-
最简活性监控配置:
- 包含一个受监控实体(Supervised Entity,SE)和一个检查点(Checkpoint,CP)
- 每个检查点都有自己的活性监控参数集:
- 预期活性指示(WdgMExpectedAliveIndications):在参考周期内预期的活性指示次数
- 监控参考周期(WdgMSupervisionReferenceCycle):活性监控的周期
- 最大余量(WdgMMaxMargin):允许的最大正偏差
- 最小余量(WdgMMinMargin):允许的最大负偏差
- 这种配置提供了对WatchdogManager模块v2.0.0之前版本的向后兼容性
-
多检查点活性监控配置:
- 一个受监控实体可以包含多个检查点
- 每个检查点都有独立的活性监控参数
- 尽管每个检查点有自己的参数,但受监控实体的状态是基于所有检查点的结果综合决定的
- 在给定模式下,可以配置部分或全部检查点进行活性监控
3.2 活性监控算法
活性监控算法的工作流程如下:
- 受监控实体通过调用
WdgM_CheckpointReached
函数发送活性指示,该函数会增加相应检查点的活性计数器 WdgM_MainFunction
在每个监控参考周期检查各检查点的计数器值- 检查计数器是否在允许的公差范围内:
- 预期值减最小余量(Expected - MinMargin)
- 预期值加最大余量(Expected + MaxMargin)
- 如果任何检查点的检测结果不在允许范围内,则该受监控实体的活性监控结果设置为不正确
- 正确配置活性监控参数对于避免误报和漏报至关重要
可以看出,活性监控是一种基于频率的监控方式,特别适合周期性执行的软件组件。通过检测组件的执行频率是否符合预期,可以及时发现软件运行异常。
4. 截止时间监控
4.1 截止时间监控配置
截止时间监控(Deadline Supervision)用于检查软件组件是否在指定的时间窗口内完成操作。这种监控特别适合非循环性的操作,即某事件发生后,后续事件必须在给定时间范围内发生。
图3:WatchdogManager截止时间监控配置图
从图3可以看出,截止时间监控配置包括以下要素:
-
最简截止时间监控配置:
- 包含一个受监控实体(SE4),两个检查点(CP4-1, CP4-2)和一个转换
- 转换定义了从起始检查点到结束检查点的路径
- 每个转换都有两个时间限制参数:
- 最小截止时间(WdgMDeadlineMin):允许的最小时间
- 最大截止时间(WdgMDeadlineMax):允许的最大时间
-
多转换截止时间监控配置:
- 一个受监控实体可以包含多个检查点和多个转换
- 转换和检查点不必形成封闭图
- 可以有多个独立的转换图
- 截止时间监控只考虑起始和结束检查点,不关心中间路径
4.2 截止时间监控算法
截止时间监控算法的工作流程如下:
- 在初始化阶段,所有截止时间起始检查点的时间戳被清除(设为0)
- 当到达截止时间起始检查点时:
- 调用
WdgM_CheckpointReached
函数 - 记录当前时间戳(通过调用OS函数
GetElapsedTime
获取)
- 调用
- 当到达截止时间结束检查点时:
- 获取当前时间戳
- 如果对应起始检查点时间戳不为0,则测量时间差并清除起始检查点时间戳
- 时间差必须在配置的最小和最大截止时间范围内,否则视为错误
- 如果对应起始检查点时间戳为0,则成功退出(不测量时间差)
- 时间戳以OS计数器的tick为单位,而配置参数以秒为单位,需要进行换算
截止时间监控对于检测操作时序非常有效,例如检测某个操作是否在规定时间内完成,或者检测操作是否过早完成。
5. 逻辑监控
逻辑监控(Logical Supervision)用于检查软件组件的执行流程是否符合预期。WdgM提供了两种类型的逻辑监控:内部图形技术监控和外部逻辑监控。
图4:WatchdogManager逻辑监控配置图
5.1 内部图形技术监控
内部图形技术监控通过定义允许的检查点转换序列来监控程序执行流程。如图4左侧所示:
- 受监控实体(SE5)包含多个检查点(CP5-1, CP5-2, CP5-3, CP5-4)
- 定义了允许的转换路径(绿色实线)和非法的转换路径(红色虚线)
- 每当到达一个检查点时,会检查该转换是否在允许的转换列表中
- 如果发现非法转换,则监控结果设置为不正确
内部图形技术监控适用于具有明确执行路径的软件组件,例如状态机实现。
5.2 外部逻辑监控
外部逻辑监控通过用户定义的外部函数来监控程序执行。如图4右侧所示:
- 受监控实体(SE6)包含多个检查点(CP6-1, CP6-2, CP6-3)
- 外部监控逻辑(WdgMExternalLogicalSupervision)包含多个逻辑条件
- 当到达检查点时,调用相应的外部函数
- 外部函数根据自定义逻辑确定监控结果
外部逻辑监控提供了更大的灵活性,允许实现复杂的监控逻辑,特别适合那些执行路径不固定或需要根据运行时状态动态判断的软件组件。
逻辑监控的算法流程:
- 对于内部图形技术监控:
- 记录上一个到达的检查点
- 当到达新检查点时,检查该转换是否允许
- 如果转换不允许,则监控结果为不正确
- 对于外部逻辑监控:
- 当到达检查点时,调用
WdgM_CheckpointReached
函数 - 如果配置了外部逻辑监控,则调用相应的外部函数
- 外部函数根据自定义逻辑确定监控结果
- 当到达检查点时,调用
6. 监控状态管理
WdgM模块维护两种类型的监控状态:本地监控状态和全局监控状态。这些状态反映了系统的健康状况,并决定了系统的行为。
图5:WatchdogManager监控状态转换图
6.1 本地监控状态
如图5左上所示,每个受监控实体都有自己的本地监控状态,包括:
-
正常(OK):监控结果正常
- 初始状态为OK
- 当活性/截止时间/逻辑监控成功时,保持OK状态
- 当监控失败且失败计数器超过阈值时,转换为FAILED状态
-
不正常(FAILED):监控结果失败
- 当监控仍然失败时,保持FAILED状态
- 当监控恢复正常时,转换为OK状态
- 当经过WdgMFailedSupervisionRefCycleTol周期后仍然不正常,转换为EXPIRED状态
-
过期(EXPIRED):长期失败的状态
- 表示受监控实体长时间未能恢复正常
-
已禁用(DEACTIVATED):监控被禁用
- 可以从OK、FAILED、EXPIRED状态转换到DEACTIVATED状态
- 当激活监控时,转换为OK状态
-
停止(STOPPED):监控被停止
- 从DEACTIVATED状态转换到STOPPED状态
- 当启动监控时,转换回DEACTIVATED状态
本地状态反映了单个受监控实体的健康状况,失败计数器用于确定何时将状态从OK变为FAILED,这有助于避免因暂时性故障导致的误报。
6.2 全局监控状态
如图5中上所示,全局监控状态代表整个WdgM模块的状态,包括:
-
初始化(WDGM_GLOBAL_STATUS_DEACTIVATED):初始状态
- 当调用
WdgM_Start()
时,转换为OK状态 - 当调用
WdgM_Init()
时,从STOPPED状态转换到DEACTIVATED状态
- 当调用
-
正常(WDGM_GLOBAL_STATUS_OK):系统正常运行
- 当所有关键受监控实体都处于OK状态时,保持OK状态
- 当有配置为CRITICAL的受监控实体失败时,转换为FAILED状态
- 当调用
WdgM_Stop()
时,转换为STOPPED状态
-
失败(WDGM_GLOBAL_STATUS_FAILED):系统监控失败
- 当所有触发失败的受监控实体恢复OK状态时,转换回OK状态
- 当达到过期阈值时,转换为EXPIRED状态
- 当调用
WdgM_Stop()
时,转换为STOPPED状态
-
过期(WDGM_GLOBAL_STATUS_EXPIRED):系统长期失败
- 表示系统长时间处于失败状态
- 将触发系统复位或其他故障安全机制
- 当调用
WdgM_Stop()
时,转换为STOPPED状态
-
停止(WDGM_GLOBAL_STATUS_STOPPED):系统监控停止
- 全局监控被显式停止
全局状态由所有受监控实体的状态综合决定,特别是那些配置为CRITICAL的实体。全局状态决定了硬件看门狗的触发行为,是系统安全策略的重要组成部分。
图5右上也展示了监控周期的执行阶段,包括活性监控、截止时间监控、逻辑监控、计算监控实体状态、计算全局状态和触发器行为。这些阶段在WdgM_MainFunction()
中顺序执行。
7. 接口设计
WdgM模块提供了丰富的接口以支持其监控功能,包括API函数和回调函数。
图6:WatchdogManager接口设计图
7.1 API函数
如图6所示,WdgM模块提供了以下几类API函数:
-
初始化和控制接口:
WdgM_Init()
:初始化WdgM模块WdgM_DeInit()
:去初始化WdgM模块WdgM_Start()
:启动监控WdgM_Stop()
:停止监控
-
监控接口:
WdgM_CheckpointReached()
:报告检查点已到达,是监控的核心函数WdgM_MainFunction()
:周期性执行的主函数,处理监控逻辑WdgM_PerformReset()
:执行系统复位
-
状态查询接口:
WdgM_GetLocalStatus()
:获取特定受监控实体的本地状态WdgM_GetGlobalStatus()
:获取全局监控状态WdgM_GetFirstExpiredSEID()
:获取首个过期的受监控实体ID
-
模式控制接口:
WdgM_GetMode()
:获取当前监控模式WdgM_SetMode()
:设置监控模式
-
调试接口:
WdgM_GetVersionInfo()
:获取模块版本信息WdgM_GetLocalStatusCounts()
:获取本地状态计数
7.2 回调函数
WdgM模块支持以下回调函数:
- 监控结果回调:
- 外部逻辑监控回调:由用户实现,用于外部逻辑监控
- 活性监控回调:在活性监控结果改变时调用
- 截止时间监控回调:在截止时间监控结果改变时调用
这些接口函数和回调函数共同构成了WdgM模块的外部接口,使应用软件组件能够与WdgM交互,实现软件监控功能。
8. 监控流程
WdgM模块的监控流程涉及多个阶段,从初始化到正常运行再到关闭。下图展示了WdgM的主要监控流程。
图7:WatchdogManager监控流程序列图
从图7可以看出,WdgM的监控流程包括以下几个主要阶段:
-
初始化阶段:
- 应用软件组件调用
WdgM_Init()
初始化WdgM模块 - WdgM初始化内部变量和状态
- WdgM获取初始时间戳
- WdgM初始化看门狗接口
- 应用软件组件调用
WdgM_Start()
启动监控 - WdgM激活监控并设置看门狗模式
- 应用软件组件调用
-
正常监控流程:
- 应用软件组件在执行过程中调用
WdgM_CheckpointReached()
报告检查点到达 - 根据监控类型的不同,WdgM执行相应的处理:
- 活性监控:增加活性计数器
- 截止时间监控(起始检查点):记录起始时间戳
- 截止时间监控(结束检查点):检查时间差是否在限制范围内
- 逻辑监控:检查检查点转换是否允许
- 应用软件组件在执行过程中调用
-
周期性监控评估:
- 操作系统周期性调用
WdgM_MainFunction()
- WdgM执行活性监控检查
- WdgM计算每个受监控实体的状态
- WdgM计算全局监控状态
- 根据全局状态执行不同操作:
- 全局状态正常:设置慢速模式,正常触发看门狗
- 全局状态失败:设置快速模式,报告错误
- 全局状态过期:准备系统复位
- 操作系统周期性调用
-
模式切换:
- 应用软件组件调用
WdgM_SetMode()
切换监控模式 - WdgM更新监控参数和设置
- 应用软件组件调用
-
错误处理:
- 监控失败时,WdgM报告错误状态
- 非法参数时,WdgM报告开发错误
-
关闭阶段:
- 应用软件组件调用
WdgM_Stop()
停止监控 - WdgM停止监控并设置看门狗为关闭模式
- 应用软件组件调用
WdgM_DeInit()
去初始化WdgM模块 - WdgM清空内部状态并去初始化看门狗接口
- 应用软件组件调用
这个流程展示了WdgM如何与其他组件交互,以及如何在不同情况下处理监控结果,是理解WdgM工作机制的重要参考。
9. 总结
AUTOSAR WatchdogManager模块是一个复杂而强大的基础软件模块,通过提供多种监控机制,确保系统的安全运行。本文详细分析了WdgM的架构设计、监控机制、状态管理、接口设计和监控流程,展示了WdgM如何在AUTOSAR体系中发挥作用。
WdgM的主要优势包括:
-
多样化的监控机制:
- 活性监控:检查软件组件的执行频率
- 截止时间监控:检查时序约束
- 逻辑监控:检查执行顺序
-
灵活的配置选项:
- 支持多种监控模式
- 可配置的监控参数
- 灵活的触发行为
-
全面的状态管理:
- 本地监控状态和全局监控状态
- 状态转换逻辑
- 错误处理机制
-
丰富的接口:
- API函数
- 回调函数
- 与其他模块的交互接口
WdgM在安全关键系统中的应用场景包括:
- 汽车电子控制单元(ECU)的安全监控
- 工业控制系统的故障检测
- 医疗设备的安全机制
- 航空电子设备的软件监控
通过深入理解WdgM模块的工作原理和使用方法,开发者可以更好地利用这一工具构建高可靠性、高安全性的嵌入式系统。