DEENESPTFRRUARHIKOZHNL

Watchdog Driver (Wdg)

ModulWdg (Watchdog Driver)
BSW-Modul-ID102
Standard-Header#include "Wdg.h"
SWS-SpezifikationAUTOSAR_SWS_WatchdogDriver.pdf
ClusterMicrocontroller Abstraction (MCAL)

模块指南人工智能生成

根据有时间限制的触发条件对看门狗硬件进行服务,并切换其运行模式。
AI 生成 未审核 模型: claude-opus-5-5 · 推理强度: high · 温度: 不可控 · 提示词: 826a1515b822 来源 未决问题(3)
因果锚点:R20-11 自 R20-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

根据有时间限制的触发条件对看门狗硬件进行服务,并切换其运行模式。

看门狗驱动程序代表 Watchdog Manager 控制内部或外部看门狗硬件。后者仅通过 Watchdog Interface 设置有时间限制的触发条件。只要该条件有效,驱动程序就会自行触发硬件;此后看门狗将超时溢出 [SWS_Wdg_00144]。Wdg_Init 从配置中设置默认模式和超时,而 Wdg_SetMode 在 OFF、SLOW 和 FAST 模式之间切换 [SWS_Wdg_00160]。超时时间为 0 会触发近乎立即的复位,并且仅当配置允许时才能关闭看门狗。

看门狗驱动程序 Wdg 通过四个同步服务控制看门狗硬件:Wdg_Init、Wdg_SetMode、Wdg_SetTriggerCondition 和 Wdg_GetVersionInfo([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109])。EcuM 调用 Wdg_Init。Watchdog Manager 仅通过 Watchdog Interface 访问驱动程序,后者通过 DeviceIndex 选择实例(SWS WdgIf 第17页)。内部实例直接访问硬件,外部实例通过 SPI 或 DIO 访问([SWS_Wdg_00161], [SWS_Wdg_00076])。两者提供相同的 API [SWS_Wdg_00077]。

kontext cluster_wdg Wdg-Instanzen (Namen je Instanz erweitert) EcuM EcuM (ECU State Manager) WdgInt Wdg (interner Watchdog) EcuM->WdgInt Wdg_Init WdgExt Wdg (externer Watchdog) EcuM->WdgExt Wdg_Init WdgM WdgM (Watchdog Manager) WdgIf WdgIf (Watchdog Interface) Auswahl per DeviceIndex WdgM->WdgIf WdgIf_SetMode WdgIf_SetTriggerCondition WdgIf->WdgInt Wdg_SetMode Wdg_SetTriggerCondition WdgIf->WdgExt Wdg_SetMode Wdg_SetTriggerCondition HwInt interne Watchdog-Hardware WdgInt->HwInt direkter Zugriff Det Det (optional) WdgInt->Det Det_ReportError Dem Dem (可选) WdgInt->Dem Dem_SetEventStatus SpiDio Spi / Dio (处理程序或驱动程序) WdgExt->SpiDio 处理程序/驱动程序的 API WdgExt->Det Det_ReportError WdgExt->Dem Dem_SetEventStatus HwExt externe Watchdog-Hardware SpiDio->HwExt 总线或引脚访问

上下文图:EcuM 初始化 Wdg 实例,WdgM 通过 WdgIf 对其进行控制。外部实例通过 Spi/Dio 访问硬件。来源:[SWS_Wdg_00076], [SWS_Wdg_00161], SWS WdgM 第86页

该模块的核心是触发条件。它被视为在接下来的 n 毫秒内对看门狗进行服务的许可。只要它有效,驱动程序就会自行触发;此后看门狗将超时溢出 [SWS_Wdg_00144]。Wdg_SetTriggerCondition 重置计数器,并根据模式将毫秒转换为计数器值([SWS_Wdg_00136], [SWS_Wdg_00139])。内部服务例程在计数器大于零时进行触发并递减。计数器为零时不再触发([SWS_Wdg_00134], [SWS_Wdg_00135])。超时时间为 0 会强制执行(近乎)立即的复位,且已过期的计数器无法重新加载 [SWS_Wdg_00140]。

通过触发条件解耦触发WdgMWdgIfWdgTimer-HardwareWatchdog-HardwareUse Case: Triggerbedingung erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)重置触发计数器返回返回Use Case: 驱动中的服务处理loopje Timer-InterruptInterruptalt触发计数器 > 0递减触发计数器Hardware triggern(必要时附带激活码)触发计数器 = 0未触发:看门狗超时并复位 ECU

时序图:WdgM 仅重新加载计数器,触发操作由驱动程序中的定时器中断发起。当计数器值为 0 时,看门狗超时溢出。来源:SWS Wdg 图 9.2 第31页, [SWS_Wdg_00134], [SWS_Wdg_00135]

Wdg_Init 从配置集 Wdg_ConfigType [SWS_Wdg_00001] 中设置默认模式和超时周期。Wdg_SetMode 在 WDGIF_OFF_MODE、WDGIF_SLOW_MODE 和 WDGIF_FAST_MODE 之间切换,并且仅在完全切换时返回 E_OK([SWS_Wdg_00160], [SWS_Wdg_00103])。不存在去初始化操作。关闭通过 OFF 模式 [SWS_Wdg_00031] 进行,且仅在 WdgDisableAllowed 允许时才能执行 [SWS_Wdg_00025]。

出现错误时,Wdg 会报告开发错误 WDG_E_DRIVER_STATE、WDG_E_PARAM_MODE、WDG_E_PARAM_CONFIG 和 WDG_E_PARAM_TIMEOUT [SWS_Wdg_00010]。此外还有生产错误 WDG_E_MODE_FAILED 和 WDG_E_DISABLE_REJECTED([SWS_Wdg_00016], [SWS_Wdg_00179])。推测这些生产错误通过 Dem_SetEventStatus 报告 [SWS_Wdg_00111]。 问题 Q-f0ec41b842ebbdc9 (未决)

在看门狗协议栈中的角色:自行负责触发操作的驱动程序

看门狗驱动程序 Wdg 通过包含四个服务的紧凑同步 API 控制看门狗硬件,这些服务均可通过 Wdg.h 获得:Wdg_Init(服务 ID 0x00)、Wdg_SetMode(0x01)、Wdg_SetTriggerCondition(0x03)和 Wdg_GetVersionInfo(0x04)。仅 Wdg_GetVersionInfo 是可重入的([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109])。特意未提供用于去初始化的接口。如果硬件和环境允许关闭,则通过带有 OFF 模式的 Wdg_SetMode [SWS_Wdg_00031] 来执行。

这些服务由基础软件调用。ECU State Manager 调用 Wdg_Init(SWS EcuM 第34页)。Watchdog Manager 需要 WdgIf_SetMode 和 WdgIf_SetTriggerCondition(SWS WdgM 第86页)。Watchdog Interface 将这些调用映射到驱动程序,并通过基于零的 uint8 类型的 DeviceIndex 选择实例。如果仅配置了一个驱动程序,则此映射不得引起运行时开销,例如通过宏实现(SWS WdgIf 第17页)。时间触发完全位于驱动程序中。Watchdog Manager 仅设置触发条件(SWS WdgM 第56页;[SWS_Wdg_00144])。

面向硬件端,各实例有所不同。用于内部看门狗的实例直接访问硬件 [SWS_Wdg_00161]。用于外部看门狗的实例使用处理程序或驱动程序的 API,例如 SPI 或 DIO [SWS_Wdg_00076]。可选地,Wdg 将 Det_ReportError 用于开发错误,并将 Dem_SetEventStatus 用于监控状态 [SWS_Wdg_00111]。

kontext cluster_wdg Wdg-Instanzen (Namen je Instanz erweitert) EcuM EcuM (ECU State Manager) WdgInt Wdg (interner Watchdog) EcuM->WdgInt Wdg_Init WdgExt Wdg (externer Watchdog) EcuM->WdgExt Wdg_Init WdgM WdgM (Watchdog Manager) WdgIf WdgIf (Watchdog Interface) Auswahl per DeviceIndex WdgM->WdgIf WdgIf_SetMode WdgIf_SetTriggerCondition WdgIf->WdgInt Wdg_SetMode Wdg_SetTriggerCondition WdgIf->WdgExt Wdg_SetMode Wdg_SetTriggerCondition HwInt interne Watchdog-Hardware WdgInt->HwInt direkter Zugriff Det Det (optional) WdgInt->Det Det_ReportError Dem Dem (可选) WdgInt->Dem Dem_SetEventStatus SpiDio Spi / Dio (处理程序或驱动程序) WdgExt->SpiDio 处理程序/驱动程序的 API WdgExt->Det Det_ReportError WdgExt->Dem Dem_SetEventStatus HwExt externe Watchdog-Hardware SpiDio->HwExt 总线或引脚访问

上下文图:Wdg 由 EcuM 初始化,且仅由 WdgM 通过 WdgIf 间接控制。内部实例直接访问硬件,外部实例通过 Spi/Dio 访问。来源:[SWS_Wdg_00076], [SWS_Wdg_00161], [SWS_Wdg_00111], SWS WdgM 第86页

从系统启动到受监控运行

Wdg_Init 接收指向类型为 Wdg_ConfigType 的配置集的指针。该结构是硬件相关的([SWS_Wdg_00106], [SWS_Wdg_00171])。该函数初始化驱动程序和硬件,并从该集合中设置默认模式和超时周期 [SWS_Wdg_00001]。此外,它还初始化所有全局变量 [SWS_Wdg_00100]。它仅写入既不影响其他硬件模块、也不依赖于其他硬件模块的控制器寄存器。共享寄存器由上层系统模块初始化 [SWS_Wdg_00101]。在启用开发错误检测的情况下,初始化成功后内部状态从 WDG_UNINIT 切换到 WDG_IDLE [SWS_Wdg_00019]。

规范的图 9.1 展示了分工:EcuM 直接初始化 Wdg,此后 WdgM 通过 WdgIf 控制触发条件和模式(SWS Wdg 图 9.1 第34页)。对集成商而言重要的是:自 Wdg_Init 起,配置的默认模式和初始超时周期生效 [SWS_Wdg_00001]。如果此模式不是 OFF,控制实例必须在时间窗口内刷新触发条件,否则看门狗将超时溢出 [SWS_Wdg_00144]。

初始化、触发条件和模式切换EcuMWdgMWdgIfWdgUse Case: InitialisierungWdg_Init(ConfigPtr)初始化全局变量和寄存器设置默认模式和超时周期带开发错误检测:WDG_UNINIT -> WDG_IDLE返回Use Case: Triggerbedingung setzenloop在时间窗口到期前更新WdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)将 ms 换算为计数器值(考虑当前模式)返回返回Use Case: ModuswechselWdgIf_SetMode(DeviceIndex, WdgMode)Wdg_SetMode(Mode)E_OK / E_NOT_OKWdg_SetMode 的返回值

时序图:在 EcuM 初始化之后,由 WdgM 通过 WdgIf 设置触发条件并切换模式。来源:SWS Wdg 图 9.1 第34页, [SWS_Wdg_00001], [SWS_Wdg_00019], [SWS_Wdg_00139], SWS WdgIf 第18页

触发条件:有时间限制的服务许可

硬件不会通过来自外部的单个触发调用进行服务。取而代之的是采用触发条件:只要它有效,驱动程序就会自行对硬件进行服务。如果它失效,驱动程序将停止触发,看门狗超时溢出 [SWS_Wdg_00144]。规范将该条件描述为“在接下来的 n 毫秒内对看门狗进行服务的许可”。控制实例必须在此窗口内对其进行刷新 [SWS_Wdg_00144]。

Wdg_SetTriggerCondition(uint16 timeout) 根据传入的值重置超时计数器([SWS_Wdg_00155], [SWS_Wdg_00136])。该值被解释为毫秒。驱动程序在内部将其转换为计数器值 [SWS_Wdg_00138],并在此过程中考虑当前模式 [SWS_Wdg_00139]。值 0 是允许的:它会(近乎)立即终止触发,从而引发(近乎)立即的看门狗复位。如果保存的计数器已处于 0,该函数将忽略任何新值 [SWS_Wdg_00140]。因此,已过期的计数器无法再重新加载。

实际的触发操作由驱动程序内部服务例程完成。如果触发计数器大于零,它将对计数器递减并触发硬件 [SWS_Wdg_00134]。当计数器归零时,它不执行任何操作,看门狗超时溢出 [SWS_Wdg_00135]。如果服务例程实现为中断例程,则中断框架属于 Wdg_Irq.c [SWS_Wdg_00079]。图 9.2 展示了一个定时器中断,该中断在时间上独立于经由 WdgIf 的调用来触发看门狗(SWS Wdg 图 9.2 第31页)。

通过触发条件解耦触发WdgMWdgIfWdgTimer-HardwareWatchdog-HardwareUse Case: Triggerbedingung erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)重置触发计数器返回返回Use Case: 驱动中的服务处理loopje Timer-InterruptInterruptalt触发计数器 > 0递减触发计数器Hardware triggern(必要时附带激活码)触发计数器 = 0未触发:看门狗超时并复位 ECU

时序图:WdgM 仅重新加载触发计数器,触发本身由驱动程序中的定时器中断发起。计数器值为 0 时不进行触发,看门狗超时溢出。来源:SWS Wdg 图 9.2 第31页, [SWS_Wdg_00134], [SWS_Wdg_00135], [SWS_Wdg_00136], [SWS_Wdg_00093]

triggerbedingung start Wdg_SetTriggerCondition(timeout) pruefMax 开发错误检测已激活 且 timeout > WdgMaxTimeout? start->pruefMax fehler 报告 WDG_E_PARAM_TIMEOUT 不重新加载计数器 pruefMax->fehler 是 pruefNull 存储的计数器 = 0? pruefMax->pruefNull 不 ende 返回调用方 fehler->ende ignorieren 不执行任何操作 (忽略传入的值) pruefNull->ignorieren 是 umrechnen 将毫秒换算为计数器值 (考虑当前模式) pruefNull->umrechnen 不 ignorieren->ende laden 重置超时计数器 umrechnen->laden pruefT0 timeout = 0? laden->pruefT0 reset 触发(几乎)立即终止 -> ECU 看门狗复位 pruefT0->reset 是 weiter 服务例程持续触发, 只要计数器 > 0 pruefT0->weiter 不 reset->ende weiter->ende

活动图:Wdg_SetTriggerCondition 丢弃过大的超时时间,在计数器已过期时忽略新值,否则根据模式转换为计数器值。解释:规范未定义这两个检查的顺序。来源:[SWS_Wdg_00146], [SWS_Wdg_00140], [SWS_Wdg_00138], [SWS_Wdg_00139], SWS Wdg 第29页

运行模式 OFF、SLOW 和 FAST

Wdg_SetMode 将驱动程序和硬件从当前模式切换到 WDGIF_OFF_MODE、WDGIF_SLOW_MODE 或 WDGIF_FAST_MODE。每种模式对应于静态配置的设置,例如具有不同超时周期的翻转或窗口式看门狗 [SWS_Wdg_00160]。每种模式的硬件特定参数包含在传递给 Wdg_Init 的配置集中 [SWS_Wdg_00051]。Wdg 从 WdgIf.h 导入类型 WdgIf_ModeType [SWS_Wdg_00105]。较早的配置模型为此展示了容器 WdgSettingsFast、WdgSettingsSlow 和 WdgSettingsOff 以及 WdgDefaultMode(ECUC-Parameter 图 5.21 第377页)。

Wdg_SetMode 仅在切换完全执行且驱动程序和硬件的所有参数均具有新值时才返回 E_OK [SWS_Wdg_00103]。WdgIf 不做修改地透传此返回值(SWS WdgIf 第18页)。预编译参数 WdgDisableAllowed 决定是否允许关闭看门狗。如果其设置为 OFF,则带有关闭默认模式的初始化将被拒绝 [SWS_Wdg_00025]。根据其描述,错误 WDG_E_DISABLE_REJECTED 也涵盖了相应的模式切换 [SWS_Wdg_00179]。

modi start OFF WDGIF_OFF_MODE start->OFF Wdg_Init(默认模式) 仅当 WdgDisableAllowed != OFF 时 SLOW WDGIF_SLOW_MODE start->SLOW Wdg_Init (Standardmodus) FAST WDGIF_FAST_MODE start->FAST Wdg_Init (Standardmodus) OFF->SLOW Wdg_SetMode OFF->FAST Wdg_SetMode SLOW->OFF Wdg_SetMode 仅当允许关闭时 SLOW->FAST Wdg_SetMode FAST->OFF Wdg_SetMode 仅当允许关闭时 FAST->SLOW Wdg_SetMode

状态图:Wdg_Init 设置配置的默认模式,随后 Wdg_SetMode 在三种模式之间切换。仅当 WdgDisableAllowed 允许时才能达到 OFF 模式。来源:[SWS_Wdg_00160], [SWS_Wdg_00001], [SWS_Wdg_00025], [SWS_Wdg_00179], [SWS_Wdg_00031]

内部状态、互斥区和激活代码

在启用开发错误检测时,Wdg 维护一个内部状态:在成功初始化之前为 WDG_UNINIT,之后为 WDG_IDLE [SWS_Wdg_00019]。Wdg_SetMode 和服务例程在执行期间设置 WDG_BUSY。作为返回前的最后一个操作,它们再次设置 WDG_IDLE([SWS_Wdg_00018], [SWS_Wdg_00052])。两者在此之前都会检查状态是否为 WDG_IDLE。否则,模式切换或触发将不予执行,并报告 WDG_E_DRIVER_STATE([SWS_Wdg_00017], [SWS_Wdg_00035])。通过这种方式可以检测到初始化前的调用,以及模式切换与触发之间的交叉重叠。

如果为了数据一致性必须禁止中断(例如在模式切换期间或在触发例程中),则应尽可能通过 BSW 调度器的互斥区来实现。内部驱动程序作为 MCAL 模块也可以直接禁止中断 [SWS_Wdg_00040]。BSW 分布指南解释了背景原因:在 MCAL 驱动程序中,Main Function、服务 API 和 ISR 可以在各自的执行上下文中访问共享的外设寄存器(BSW Distribution Guide 第36页)。

某些硬件需要可配置或可变的激活代码。此时 Wdg 在内部管理该代码并分别传递正确的值。硬件随后使用下一个期望的代码更新内部变量 [SWS_Wdg_00093]。必须选择适当的触发周期,以确保该更新能够可靠进行 [SWS_Wdg_00094]。可配置的初始代码属于配置集。如果代码由硬件固定指定,则不需要此要求 [SWS_Wdg_00095]。

zustaende start UNINIT WDG_UNINIT start->UNINIT UNINIT->UNINIT Wdg_SetMode / Bedienroutine: WDG_E_DRIVER_STATE IDLE WDG_IDLE UNINIT->IDLE Wdg_Init erfolgreich BUSY WDG_BUSY IDLE->BUSY Wdg_SetMode 或 服务例程开始 BUSY->IDLE 返回前的 最后一个操作 BUSY->BUSY weiterer Aufruf: WDG_E_DRIVER_STATE, kein Wechsel/kein Triggern

状态图:启用开发错误检测时,状态 WDG_UNINIT、WDG_IDLE 和 WDG_BUSY 有效。在 WDG_IDLE 之外的调用将被以 WDG_E_DRIVER_STATE 拒绝。来源:[SWS_Wdg_00019], [SWS_Wdg_00017], [SWS_Wdg_00018], [SWS_Wdg_00035], [SWS_Wdg_00052]

内部和外部看门狗:实例、文件、配置

一个ECU可以拥有多个Wdg实例,例如一个用于内部看门狗,另一个用于外部看门狗。此时,API名称与实例特定类型名称[SWS_Wdg_00172]以及代码和头文件名称将根据SRS_BSW_00347进行扩展([SWS_Wdg_00169]、[SWS_Wdg_00170])。图1显示了包含Wdg<xxx>.h和Wdg_<xxx>PBcfg.c等占位符的文件结构(SWS Wdg 图 1 第11页)。外部Wdg必须提供与内部看门狗相同的完整功能集以及语义相同的API [SWS_Wdg_00077]。其源代码必须独立于微控制器平台[SWS_Wdg_00055]。安全领域的一个示例是通过SPI连接的外部窗口看门狗(EXP SafetyUseCase 图 4.1 第20页)。

代码文件结构未作完全规定。需要时,它包括用于链接时参数的Wdg_Lcfg.c以及用于构建后参数的Wdg_PBcfg.c [SWS_Wdg_00079]。Wdg最迟在编译时静态检查配置[SWS_Wdg_00086]。代码是从ROM还是RAM运行由静态配置决定[SWS_Wdg_00168]。对于外部硬件,Wdg将访问参数(例如SPI通道或DIO端口)纳入其已发布的参数和配置参数中[SWS_Wdg_00078]。较新的Release将其建模为对DIO通道组、SPI序列或I2C序列的选择引用WdgExternalContainerRef。I2C在R20-11中未明确提及(SWS Wdg 第40页)。Wdg_SetTriggerCondition对照最大值WdgMaxTimeout进行检查[SWS_Wdg_00146]。此外,已发布信息模型还包含WdgMinTimeout和WdgResolution(ECUC-Parameter 图 5.22 第380页)。

发生错误时的行为

Wdg将主要仅在启用开发错误检测时才进行检查的开发错误与扩展生产错误区分开来。错误代码已固定[SWS_Wdg_00010]:

  • WDG_E_DRIVER_STATE (0x10)
  • WDG_E_PARAM_MODE (0x11)
  • WDG_E_PARAM_CONFIG (0x12)
  • WDG_E_PARAM_TIMEOUT (0x13)
  • WDG_E_PARAM_POINTER (0x14)
  • WDG_E_INIT_FAILED(0x15,配置集选择无效)

对于开发错误,Wdg可选择请求Det_ReportError [SWS_Wdg_00111]。各个服务的错误情况如下:

  • 初始化:若配置集超出允许的限制,则中止初始化并返回WDG_E_PARAM_CONFIG [SWS_Wdg_00090]。若在WdgDisableAllowed==OFF有效的情况下默认模式仍会关闭看门狗,则中止初始化并返回WDG_E_DISABLE_REJECTED [SWS_Wdg_00025]。
  • 模式切换:错误的状态会导致WDG_E_DRIVER_STATE [SWS_Wdg_00017]。模式超出范围或硬件设置不允许会导致WDG_E_PARAM_MODE([SWS_Wdg_00091]、[SWS_Wdg_00092])。在这全部三种情况下均不发生切换,且函数返回E_NOT_OK。若切换本身失败(例如由于设置不一致或违反时间条件),则函数返回E_NOT_OK并报告WDG_E_MODE_FAILED [SWS_Wdg_00016]。
  • 触发条件:若超时时间超过WdgMaxTimeout,则计数器不会重载,并报告WDG_E_PARAM_TIMEOUT [SWS_Wdg_00146]。
  • 版本查询:无效指针属于WDG_E_PARAM_POINTER [SWS_Wdg_00010]。针对Wdg_GetVersionInfo的空指针检查在较新Release的一处文档中有描述(SWS Wdg 第30页)。

生产错误WDG_E_MODE_FAILED和WDG_E_DISABLE_REJECTED涉及初始化与模式切换。其监控频率取决于上层([SWS_Wdg_00178]、[SWS_Wdg_00179])。若设置或关闭模式失败,则报告FAILED;若成功,则报告PASSED([SWS_Wdg_00180]、[SWS_Wdg_00181]、[SWS_Wdg_00182]、[SWS_Wdg_00183])。这些报告很可能通过可选请求的Dem_SetEventStatus进行[SWS_Wdg_00111]。 问题 (未决)最严重的情况故意不表现为返回值:若触发条件未执行或被设为0,看门狗将超时,且ECU会被复位([SWS_Wdg_00135]、[SWS_Wdg_00140])。

setmode start Wdg_SetMode(Mode) pruefZustand Entwicklungsfehlererkennung aktiv: Zustand = WDG_IDLE? start->pruefZustand fehlerZustand WDG_E_DRIVER_STATE melden kein Wechsel, E_NOT_OK pruefZustand->fehlerZustand 不 pruefMode 模式是否在允许范围内? pruefZustand->pruefMode 是 ende 返回调用方 fehlerZustand->ende pruefGrenzen 该模式的硬件设置 是否在限制范围内? pruefMode->pruefGrenzen 是 fehlerMode WDG_E_PARAM_MODE melden kein Wechsel, E_NOT_OK pruefMode->fehlerMode 不 pruefGrenzen->fehlerMode 不 busy Zustand WDG_BUSY pruefGrenzen->busy 是 fehlerMode->ende umschalten 将驱动和硬件 切换到新模式 busy->umschalten pruefErfolg 切换是否完整 且成功? umschalten->pruefErfolg ok WDG_E_MODE_FAILED: PASSED 返回 E_OK pruefErfolg->ok 是 nok WDG_E_MODE_FAILED: FAILED 返回 E_NOT_OK pruefErfolg->nok 不 idle Zustand WDG_IDLE (letzte Operation) ok->idle nok->idle idle->ende

活动图:Wdg_SetMode检查状态、模式和硬件限制,进行切换并通过返回值和WDG_E_MODE_FAILED报告结果。Interpretation:检查顺序未作规范性规定。来源:[SWS_Wdg_00017]、[SWS_Wdg_00091]、[SWS_Wdg_00092]、[SWS_Wdg_00016]、[SWS_Wdg_00103]、[SWS_Wdg_00018]、[SWS_Wdg_00180]、[SWS_Wdg_00181]

进一步详细证据

基于AUTOSAR Classic R20-11规范摘录的AI生成模块指南。仅链接的Requirement具有规范效力;标记为Interpretation的表述未被源文档直接覆盖。

Watchdog Driver (Wdg)

Hardware watchdog timer servicing and mode configuration.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

函数 Wdg_Init [SWS_Wdg_00106] 📄 PDF

void Wdg_Init (const Wdg_ConfigType* ConfigPtr);

Initializes the module.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 9b3504b00b97 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用与流程

同步函数 Wdg_Init 用于初始化驱动程序模块 Wdg 以及看门狗硬件 [SWS_Wdg_00106]、[SWS_Wdg_00001]。通过参数 ConfigPtr 传递指向配置集的指针 [SWS_Wdg_00106]。该函数初始化模块的所有全局变量,并设置预配置的默认看门狗模式以及初始超时周期 [SWS_Wdg_00001]、[SWS_Wdg_00100]。

硬件控制与限制

Wdg_Init 仅配置那些不影响其他硬件模块或不受其依赖的看门狗控制控制器寄存器 [SWS_Wdg_00101]。具有跨模块依赖关系的寄存器则由公共系统模块进行初始化 [SWS_Wdg_00101]。该函数不可重入且无返回值 [SWS_Wdg_00106]。

错误处理

在执行初始化之前会进行特定检查:

  • 如果开发错误检测(Development Error Detection)处于激活状态,则检查配置集的硬件特定内容是否在允许的限值范围内;若发生错误,该函数将中止并报告 WDG_E_PARAM_CONFIG [SWS_Wdg_00090]。
  • 如果看门狗的禁用是不允许的(WdgDisableAllowed == OFF),但配置的默认模式会将其禁用,则初始化中止并触发错误 WDG_E_DISABLE_REJECTED [SWS_Wdg_00025]。

此使用说明是基于规范要求自动生成的。

实现者指南即将推出(复杂度 I2)

函数 Wdg_SetMode [SWS_Wdg_00107] 📄 PDF

Std_ReturnType Wdg_SetMode (WdgIf_ModeType Mode);

Switches the watchdog into the mode Mode. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_WatchdogDriver

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: b7aa0ec55f3d 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

同步且不可重入的函数 [SWS_Wdg_00107] 将看门狗驱动程序及底层硬件切换到三种静态配置的模式之一:WDGIF_OFF_MODE、WDGIF_SLOW_MODE 或 WDGIF_FAST_MODE [SWS_Wdg_00160]。由于该模块未提供独立的去初始化接口,因此若硬件支持,看门狗的关闭通过使用模式 WDGIF_OFF_MODE 调用来完成 [SWS_Wdg_00031]。在成功且完整地应用所有参数后,该函数返回 E_OK [SWS_Wdg_00103]。

状态与并发性

由于缺乏可重入性,不得进行并发调用。在错误检测启用的情况下,该函数会检查模块是否处于状态 WDG_IDLE [SWS_Wdg_00017]。在执行期间,它将状态设置为 WDG_BUSY,并且仅在返回前的最后一个操作才重新切换回 WDG_IDLE [SWS_Wdg_00018]。

错误处理

发生错误时返回 E_NOT_OK:

  • 当 Mode 的值无效或硬件特定配置超出界限时,该函数会报告错误 WDG_E_PARAM_MODE [SWS_Wdg_00091]、[SWS_Wdg_00092]。
  • 若模块未处于状态 WDG_IDLE,则切换将中止并返回 WDG_E_DRIVER_STATE [SWS_Wdg_00017]。
  • 若硬件无法进入该模式——例如由于设置不一致或违反了时序规范——则会触发 Extended Production Error WDG_E_MODE_FAILED [SWS_Wdg_00016]。

此文本由 AI 基于 AUTOSAR 规范生成。

实现者指南即将推出(复杂度 I2)

函数 Wdg_SetTriggerCondition [SWS_Wdg_00155] 📄 PDF

void Wdg_SetTriggerCondition (uint16 timeout);

Sets the timeout value for the trigger counter.

类型 Wdg_ConfigType [SWS_Wdg_00171] 📄 PDF

Used for pointers to structures holding configuration data provided to the Wdg module initialization routine for configuration of the module and watchdog hardware.

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_Wdg
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_Wdg@rel:R20-11#a71f2c75
Content hash
a71f2c75
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_WatchdogDriver.pdf#nameddest=SWS_Wdg_00106

主题图

详细视图

请在大纲中选择一个条目。

初始化与状态

Returns the version information of the module.

void Wdg_GetVersionInfo (Std_VersionInfoType* versioninfo);
Wdg_Init 函数

Initializes the module.

void Wdg_Init (const Wdg_ConfigType* ConfigPtr);

服务

Switches the watchdog into the mode Mode. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_WatchdogDriver

Std_ReturnType Wdg_SetMode (WdgIf_ModeType Mode);

Sets the timeout value for the trigger counter.

void Wdg_SetTriggerCondition (uint16 timeout);

类型

Used for pointers to structures holding configuration data provided to the Wdg module initialization routine for configuration of the module and watchdog hardware.