详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制(理论篇—41)

2026-11-152
AI 快速预览详细 收起
本文详细解析了AUTOSAR看门狗栈中WdgM、WdgIf和Wdg驱动的工作原理。重点介绍了Wdg_SetTriggerCondition的设计意图及其在软件监督中的作用。通过理解Wdg的状态管理、模式切换和超时授权机制,开发者可以更好地配置和使用看门狗以确保系统的可靠性。文章还涵盖了Wdg_Init、Wdg_SetMode等API的使用方法,并讨论了ASR3兼容性、DET和DEM错误处理等内容。

AUTOSAR 看门狗栈中,WdgM 判断被监督的软件是否按预期运行,WdgIf 负责把多个看门狗实例抽象成统一接口,Wdg 驱动才真正初始化硬件、切换工作模式并产生触发。Wdg 不知道某个 Runnable 是否超时,也不决定何时容忍一次监督失败;它执行的是更窄、更硬的契约:只有在上层授予的超时条件仍有效时,才继续服务看门狗硬件。

这一区分解释了 Wdg_SetTriggerCondition() 的设计。它不是一次立即喂狗操作,而是设置“驱动还可以触发硬件多长时间”。上层不再续期后,授权窗口归零,Wdg 停止维持硬件,最终由物理看门狗触发复位。这样,软件监督结果才能跨过 WdgIf 和驱动,转化成不依赖故障软件继续执行的硬件反应。

通用实现面向 AUTOSAR 4.0.3、预编译配置,Wdg_VENDOR_ID 为 30,WDG_MODULE_ID 为 102。通用接口使用 Wdg_ 名称,实际硬件驱动会加入实现中缀;DIO、SPI、寄存器或 GPT 等控制细节由硬件补充配置决定。Wdg_GetVersionInfo() 作为函数提供,而不是预处理宏;ASR3 兼容能力则是标准之外的扩展。

分层位置与控制链

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_1.webp

图中的 WDGIF 位于系统服务区,WdgDrv 位于 MCAL 区,外部 IO 型看门狗还可以落在外部驱动扩展位置。通用层只定义一致的生命周期、模式和超时语义,具体实现再选择 DIO、SPI、寄存器访问或 GPT 通知。Wdg 使用 DET、DEM 以及 SchM/RTE 服务,硬件实现可以再增加 Gpt、Dio、Spi 等依赖。

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_2.webp

上层请求与底层硬件之间没有隐式恢复路径。Wdg_SetMode() 返回失败时,调用方必须面对模式没有切换的事实;Wdg_SetTriggerCondition(0) 则明确要求尽快触发复位,不应被当作普通的零毫秒周期。

生命周期与三种运行状态

Wdg_StateType 不是硬件的 OFF/SLOW/FAST 模式,而是驱动自身的执行状态:

状态 含义 典型约束
WDG_UNINIT 模块尚未初始化 除初始化外的服务不能正常使用
WDG_IDLE 已初始化且当前不忙 可以接受新的模式或超时条件请求
WDG_BUSY 正在执行受保护操作 并发请求可能触发 WDG_E_DRIVER_STATE

硬件模式由 WdgIf_ModeType 表示:WDGIF_OFF_MODE 关闭看门狗,WDGIF_SLOW_MODE 采用较长超时和较慢触发,WDGIF_FAST_MODE 采用较短超时和较快触发。具体硬件可能不支持 OFF 或 SLOW;通用 API 允许请求三种模式,不等于每个硬件实现都能完成三种转换。

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_3.webp

Wdg_Init() 必须先于其他服务调用。它初始化看门狗硬件,设置配置的默认模式,并建立初始超时。配置结构 Wdg_ConfigType 的具体字段依赖硬件,因此通用层只固定指针契约,不虚构统一的寄存器或引脚字段。

初始超时避免模式切换后的空窗

驱动内部初始模式是 WDGIF_OFF_MODE。初始化时会设置初始超时;之后每次从 OFF 请求进入其他模式,Wdg 都再次装载初始超时。这个动作解决了一个启动时序问题:硬件一旦从 OFF 进入运行模式就开始计时,但 WdgM/WdgIf 的周期续期可能还没到来。若没有初始授权窗口,第一次正常调度前就可能发生看门狗复位。

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_4.webp

初始超时不应被配置成无限掩盖监督故障的长窗口,也不能短到系统启动的最坏路径尚未完成。它需要覆盖从硬件使能到第一轮有效监督续期的最大时延,并考虑调度抖动和初始化依赖。

超时授权与触发回调的协作机制

Wdg_SetTriggerCondition(uint16 timeout) 由 WdgIf 调用,参数单位为毫秒。它同步、不可重入,可从任意调用上下文进入,作用是更新驱动允许继续触发硬件的剩余时间。timeout 超过最大支持值时报告 WDG_E_PARAM_TIMEOUT;传入 0 时,模块应尽快促成复位。

实际硬件触发可以由 Wdg_Cbk_GptNotificationTrigger(void) 完成。该同步、不可重入回调建议从 ISR 上下文调用,主要动作包括触发看门狗硬件、更新触发条件;若硬件的模式切换是异步的,它还会启动计时复位过程。回调的 Service ID 为 0x05,有些接口表将其简称为 Wdg_CbkGptTrigger,实现入口为 Wdg_Cbk_GptNotificationTrigger。

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_5.webp

这条链路中有两个不同周期:底层触发周期由硬件窗口和 GPT 决定,上层续期周期由监督调度决定。timeout 必须大于正常续期间隔的最坏值,同时不能大到故障反应时间超出安全目标。

API 契约与 Service ID

服务矩阵

服务 Service ID 参数与返回 同步/重入 关键语义
Wdg_Init(Wdg_ConfigType* ConfigPtr) 0x00 配置指针;无返回值 同步、不可重入 初始化硬件、默认模式和初始超时;调用上下文 ANY
Wdg_SetMode(WdgIf_ModeType Mode) 0x01 模式;E_OK/E_NOT_OK 同步、不可重入 切换 OFF/SLOW/FAST 并调整触发时序;调用上下文 ANY
Wdg_SetTriggerCondition(uint16 timeout) 0x03 毫秒超时;无返回值 同步、不可重入 设置允许触发硬件的时间窗口;0 表示尽快复位
Wdg_GetVersionInfo(Std_VersionInfoType* versioninfo) 0x04 输出指针;版本信息 同步、可重入 仅 WDG_VERSION_INFO_API 启用时存在;调用上下文 ANY
Wdg_Cbk_GptNotificationTrigger(void) 0x05 无 同步、不可重入 触发硬件并维护超时,建议 ISR 调用
Wdg_Trigger(void) 0x07 无 同步、不可重入 仅 ASR3 兼容模式存在,周期性续期配置超时

Wdg_SetMode() 的 E_OK 表示模式切换成功,E_NOT_OK 表示失败。失败可能来自硬件不支持目标模式、物理上不能关闭或底层模式设置失败。返回值不是诊断事件的替代:生产错误仍可通过 DEM 报告。

Wdg_GetVersionInfo() 只有 WDG_VERSION_INFO_API 启用时才生成。versioninfo 为 NULL_PTR 时应报告 WDG_E_PARAM_POINTER。该服务可重入,与其他状态修改 API 的不可重入属性不同,集成代码不应把所有 Wdg 服务一概放入同一个调用限制模型。

下层服务

通用 Wdg 使用 Det_ReportError()、Dem_ReportErrorStatus() 以及 SchM_Enter_Wdg_WDG_EXCLUSIVE_AREA_x/SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_x。若项目替换开发错误上报函数,其原型必须与 Det_ReportError() 相同。具体硬件驱动可能额外调用 GPT、DIO 或 SPI,不能仅凭通用依赖表完成底层配置。

两个 Exclusive Area 分别保护什么

WDG_EXCLUSIVE_AREA_0 保护模式切换一致性,WDG_EXCLUSIVE_AREA_1 保护触发条件修改一致性。它们分开存在,是因为两类共享状态的更新频率、调用来源和临界区长度不同:模式切换可能涉及硬件和时序重配置,触发条件则可能由周期性监督服务频繁刷新。

Exclusive Area 保护对象 主要竞争关系
WDG_EXCLUSIVE_AREA_0 当前模式、模式切换中间状态、相关触发时序 Wdg_SetMode() 与触发回调/其他模式请求
WDG_EXCLUSIVE_AREA_1 当前授权 timeout 及其更新 Wdg_SetTriggerCondition() 与 GPT 回调扣减/读取

两个区域通过 SchM/RTE 进入和退出。临界区配置既要防止中断回调观察到半更新数据,也要避免屏蔽中断过久,反过来破坏看门狗触发窗口。WDG_BUSY 和 Exclusive Area 是互补机制:状态用于检测不合法上下文或重入,临界区用于保证共享数据原子一致。

ASR3 兼容桥改变的是触发入口

当配置容器 WdgAsr3Compatibility 存在,或者开关 WDG_ASR3X_COMPATIBILITY 启用时,生成额外的 Wdg_Trigger()。ASR3 栈期望 WdgIf 周期调用该接口直接触发看门狗;ASR4 设计则由驱动内部周期触发,WdgIf 只通过 Wdg_SetTriggerCondition() 续期授权窗口。

兼容实现没有把 Wdg_Trigger() 变成一次物理翻转,而是将其映射为使用 WdgTriggerTimeout 的 Wdg_SetTriggerCondition()。只要 WdgIf 按周期调用,授权持续续期;调用停止后,timeout 到期,硬件最终复位。这样保留了 ASR3 的调用表面,同时不破坏 ASR4 驱动内部触发模型。

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_6.webp

ASR3 兼容还涉及 MemMap 区段和引用目标,不能只打开 API 开关。接口是否生成、WdgTriggerTimeout 是否满足周期关系,以及 WdgIf 的实际调用周期必须一起核对。

配置、生成文件与内存映射

静态文件包括 Wdg.c/.h、Wdg_Cbk.h、Wdg_LL.*、Wdg_Mode.*、Wdg_Timer.*、Wdg_TrgCnd.*、Wdg_TrgCnd_Cbk.h 和 Wdg_Types.h;Wdg_Lcfg.c 与 Wdg_Cfg.h 由配置工具生成。文件拆分反映了底层访问、模式、定时和触发条件的责任分离,项目修改应通过配置与规定扩展点完成。

配置/开关 运行或生成影响
Wdg_DEV_ERROR_DETECT == STD_ON 启用 DET 开发错误检查与上报
WDG_VERSION_INFO_API 生成 Wdg_GetVersionInfo()
WDG_ASR3X_COMPATIBILITY / WdgAsr3Compatibility 生成 ASR3 兼容入口并调整相关引用
WdgTriggerTimeout Wdg_Trigger() 每次续期采用的超时值
默认模式与初始 timeout 决定初始化及从 OFF 进入运行模式后的保护窗口

编译器抽象使用 WDG_CODE、WDG_VAR、WDG_CONST;代码放在 WDG_START_SEC_CODE/WDG_STOP_SEC_CODE,变量和常量使用 WDG_START_SEC_VAR_ZERO_INIT_8BIT、WDG_STOP_SEC_VAR_ZERO_INIT_8BIT、WDG_START_SEC_VAR_ZERO_INIT_32BIT、WDG_STOP_SEC_VAR_ZERO_INIT_32BIT、WDG_START_SEC_VAR_ZERO_INIT_UNSPECIFIED、WDG_STOP_SEC_VAR_ZERO_INIT_UNSPECIFIED、WDG_START_SEC_CONST_UNSPECIFIED、WDG_STOP_SEC_CONST_UNSPECIFIED 等区段。生成器输出与项目 MemMap.h 必须保持成对、拼写一致。

DET 与 DEM 错误分流

当开发错误检测开启时,Wdg 通过与 Det_ReportError() 同签名的服务报告模块 ID 102、Service ID 和错误码:

DET 错误 值 触发条件
WDG_E_DRIVER_STATE 0x10 未初始化、忙状态或其他错误调用上下文
WDG_E_PARAM_MODE 0x11 模式参数错误或与配置不一致
WDG_E_PARAM_CONFIG 0x12 初始化配置错误或不一致
WDG_E_PARAM_TIMEOUT 0x13 timeout 超过最大支持值
WDG_E_PARAM_POINTER 0x14 指针非法,例如 NULL_PTR

生产代码错误通过 Dem_ReportErrorStatus() 上报。WDG_DISABLE_REJECTED 表示初始化或模式切换会关闭看门狗,但当前配置不允许关闭;WDG_MODE_FAILED 表示初始化或运行时设置模式失败。DET 主要揭示 API 使用和配置集成错误,DEM 则记录运行时可诊断的硬件或模式失败,两条链不应互相替代。

详解AUTOSAR:Wdg通用状态、超时授权与模式切换机制_image_7.webp

小结:监督窗口、硬件周期与并发必须对齐

Wdg 的核心不是某个喂狗函数,而是三层约束的叠加:Wdg_StateType 限制何时能修改驱动,OFF/SLOW/FAST 描述硬件工作模式,Wdg_SetTriggerCondition() 则限定驱动还能服务硬件多久。初始 timeout 填补启动和模式切换空窗,GPT 回调把授权窗口落到周期触发,两个 Exclusive Area 保证模式与 timeout 更新不会被并发破坏。

集成时应把 WdgM 续期周期、WdgTriggerTimeout、硬件触发周期和硬件复位时间放在同一张时序预算中。随后核对默认模式、硬件支持模式、ASR3/ASR4 入口、DET/DEM 配置及 MemMap 区段。只验证 API 返回 E_OK,不足以证明监督失效时能够按预期停止触发并最终复位。

创作许可协议

本项目采用 CC BY(署名) 进行许可。

评论(0)
- 没有更多了 -