1.OverView
Autosar看门狗由三部分组成,WdgM, WdgIf, Wdg Driver, 假设系统正常,WdgM周期性调用WdgIf模块中的WdgIf_SetTiggerCondition接口进行喂狗(这个时候并非真正操控硬件去喂狗,只是重置全局变量(假设为Condition Value)的值).实际在中断中进行喂狗,因此在Wdg Driver中会有一个周期性中断,在中断中判断Condition Value的值是否大于0:
Condition Value的值等于0系统异常,停止喂狗
Condition Value的值大于0,Condition Value– 并且操控硬件喂狗
2.WdgM
WdgM(Watchdog Manager,看门狗管理器)是汽车电子系统中用于监控软件运行状态的关键模块,属于AUTOSAR架构中的系统服务层。它的核心任务是确保关键任务按时执行、系统运行可靠,防止程序卡死或跑飞。
|
监控类型 |
作用 |
举例说明 |
|
Alive Supervision(存活监控) |
检查任务是否周期性运行 |
比如每100ms必须调用一次某个函数,若未调用,WdgM报故障 |
|
Deadline Supervision(时限监控) |
检查任务是否在规定时间内完成 |
比如某个计算任务必须在50ms内完成,超时即报错 |
|
Logical Supervision(逻辑监控) |
检查任务是否按正确顺序执行 |
比如状态机必须按 A → B → C 的顺序执行,跳过B就报错 |
|
名称 |
含义 |
|
Supervised Entity(SE) |
被监控的软件模块或任务,比如SE1、SE2 |
|
Checkpoint(CP) |
SE中的“检查点”,WdgM通过它来跟踪执行状态 |
|
Mode |
WdgM支持多种工作模式,如Fast Mode、Slow Mode、OffMode,不同模式下监控策略不同 |
WdgM工作流程如下:
1.每个SE在代码中设置Checkpoint;
2.系统运行时,SE定期“报到”;
3.WdgM根据配置判断:
是否按时报到(Alive);
是否在时限内完成(Deadline);
是否按顺序执行(Logical);
4.若异常,WdgM可触发故障处理,如重启ECU或记录DTC故障码。
2.1 Alive Supervision
AUTOSAR WdgM 的 Alive Supervision(存活监控)用于确保各受监控实体(Supervised Entity,简称 SE)在预定的时间窗口内“按时报到”,从而判断周期性任务是否正常运行。其工作流程可分为“初始化 → 运行期计数 → 周期结算 → 状态切换 → 全局汇总”五大阶段
2.1.1 初始化阶段
ECU 启动后,EcuM 先初始化看门狗驱动(Wdg Driver)。
OS 启动完毕,BswM 调用 WdgM_Init,把每个 SE 的 Local Status 设为 WDGM_LOCAL_STATUS_OK(或被引用模式设为 WDGM_LOCAL_STATUS_DEACTIVATED);
- 内部 Alive Counter 清零;
- 根据配置得到以下 4 个关键参数:
WdgMSupervisionReferenceCycle(结算周期,以 WdgM_MainFunction 周期为单位)
WdgMExpectedAliveIndications(期望报到次数)
WdgMMinMargin / WdgMMaxMargin(允许下浮/上浮裕量)
WdgMFailedAliveSupervisionRefCycleTol(连续结算周期内可容忍的错误次数门限)
2.1.2 运行期 —— SE “心跳”上报
每个被监控的任务/Runnable 按自身周期调用
WdgM_CheckpointReached(SE_ID) 或 WdgM_AliveIndication(SE_ID)
→ 对应 SE 的内部 Alive Counter +1,相当于“打卡”一次 。
2.1.3 周期结算 —— WdgM_MainFunction 巡检
WdgM 以固定周期(通常为 10 ms 或 1 ms,由 WdgMSupervisionCycle 决定)循环执行WdgM_MainFunction;
每经过“WdgMSupervisionReferenceCycle”个 MainFunction 周期,就对对应 SE 进行一次 Alive 结算:
实际值 = Alive Counter 当前值
期望范围 = [Expected – MinMargin, Expected + MaxMargin]
- 若实际值落在范围内 → 本次结算“正确”,错误计数器 FailedCycleCnt = max(0, FailedCycleCnt-1)
- 若低于下限或高于上限 → 本次结算“错误”,FailedCycleCnt++
结算后立即清零 Alive Counter,开始下一参考周期 。
2.1.4 本地状态机切换
根据 FailedCycleCnt 与门限 WdgMFailedAliveSupervisionRefCycleTol 的比较,SE 的 Local Status 在 WdgM_MainFunction 中按下列规则迁移:
OK →(出现错误但 FailedCycleCnt ≤ 门限)→ FAILED
FAILED →(错误次数继续 ≤ 门限且本次正确)→ 保持 FAILED,FailedCycleCnt 递减
FAILED →(FailedCycleCnt 累加到 > 门限 或 本次又错)→ EXPIRED
任何状态都可通过 WdgM_SetMode 被用户切为 DEACTIVATED;从 DEACTIVATED 切回激活时先回到 OK 。

2.1.5 全局状态汇总与故障反应
WdgM 把所有 SE 的 Local Status 汇总成 Global Status:
- 只要有一个 SE 为 EXPIRED → Global = EXPIRED
- 没有 EXPIRED 但有 SE 为 FAILED → Global = FAILED
- 全部 OK 且没有 FAILED/EXPIRED → Global = OK
当 Global 状态变为 FAILED/EXPIRED 时,WdgM 停止“喂”硬件看门狗(不再调用 WdgIf_SetTriggerCondition),于是硬件狗在计数减到 0 后触发 ECU 复位;也可配置成立即强制复位或进入安全状态 。

2.1.6 时序示意(以 10 ms MainFunction、参考周期 100 ms 为例)
WdgM_MainFunction 每 10 ms 进入一次;
第 10 次进入时(100 ms 到点)对某 SE 结算:
期望 Expected = 5,MinMargin = 1,MaxMargin = 1 → 合法范围 [4,6]
若 Alive Counter = 5 → 正确,保持 OK;
若 Alive Counter = 3 → 错误,Local Status → FAILED;
若连续 3 个参考周期都错误且门限为 2 → 第 3 次结算后 Local Status → EXPIRED,同时 Global → EXPIRED,停止喂狗,ECU 将在下一个硬件狗超时(例如 50 ms 后)复位 。
2.2 Deadline Supervision
WdgM 的 Deadline Supervision(时限监控) 用于确保某个关键代码段必须在规定的“最短时间” 与 “最长时间” 之间完成;若提前完成或超时完成,都被视为违反时限,触发故障处理。
下面把整套机制拆开,从配置→运行→判定→故障处理四个层面,按时间轴顺序逐步说明。
2.2.1 配置阶段(静态,ECU 启动前决定)
|
配置项 |
作用 |
举例 |
|
WdgMDeadlineSupervision |
打开/关闭该 SE 的时限监控 |
ON |
|
WdgMCheckpoint |
在代码中插入“起点”和“终点”两个检查点 |
CP_Start, CP_Finish |
|
WdgMDeadlineStartRef |
指明哪一个是“起点”检查点 |
CP_Start |
|
WdgMDeadlineMin |
允许的最短执行时间(ms 或 counter) |
10 ms |
|
WdgMDeadlineMax |
允许的最长执行时间 |
50 ms |
|
WdgMDeadlineFailedRef |
超时时要累加的“故障计数器” |
2(即 2 次违规就认定失败) |
说明:起点与终点可以跨任务、跨中断,只要属于同一个 Supervised Entity(SE)即可。
2.2.2 运行阶段(动态,ECU 实时行为)
0 ms 调用 WdgM_CheckpointReached(SE1, CP_Start) → 记录 Tstart
15 ms 调用 WdgM_CheckpointReached(SE1, CP_Finish) → 记录 Tend
内部动作:
当 CP_Start 到达时
把当前 绝对时基(通常是 WdgMGlobalTime 或 OsCounter)写入 DeadlineStartTime[SE1]
置位 DeadlineActive[SE1] = TRUE(表示该 SE 的时限监控已“打开”)
当 CP_Finish 到达时
读取当前时基 → DeadlineEndTime
计算实际耗时 Δt = DeadlineEndTime – DeadlineStartTime
立即与 Min/Max 比较,给出判定结果
清零 DeadlineActive[SE1] = FALSE(一条时限监控生命周期结束)
2.2.3 判定阶段(WdgM 主函数周期执行)
虽然耗时计算在 CheckpointReached() 里已经完成,但故障是否“升级”由 WdgM_MainFunction() 周期处理:
|
判定结果 |
内部动作 |
|
Δt < Min |
过早完成 → DeadlineFailedCnt++ |
|
Min ≤ Δt ≤ Max |
合法 → DeadlineFailedCnt = 0(可配置为立即清零或递减) |
|
Δt > Max |
超时完成 → DeadlineFailedCnt++ |
当 DeadlineFailedCnt ≥ WdgMDeadlineFailedRef 时,WdgM 认定该 SE Deadline 故障,进入 SE Failed 状态。
2.2.4 故障处理阶段
局部反应
将该 SE 状态置为 WDGM_SE_FAILED
全局反应
若处于 Fast Mode / Slow Mode,WdgM 把 Global Monitoring Status 设为 WDGM_GLOBAL_STATUS_FAILED
根据 Mode Arbitration,触发 Reset 或 降级模式(limp-home)
若处于 OffMode,则仅记录故障,不触发复位


