848 lines
33 KiB
Markdown
848 lines
33 KiB
Markdown
# 看门狗管理器规范(Specification of Watchdog Manager)
|
||
|
||
| 字段 | 内容 |
|
||
|---|---|
|
||
| **文档标题** | 看门狗管理器规范(Specification of Watchdog Manager) |
|
||
| **文档所有者** | AUTOSAR |
|
||
| **文档责任方** | AUTOSAR |
|
||
| **文档标识号** | 080 |
|
||
| **文档状态** | Final(正式发布) |
|
||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||
| **所属标准版本** | 4.4.0 |
|
||
|
||
---
|
||
|
||
## 文档变更历史(Document Change History)
|
||
|
||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||
|---|---|---|---|
|
||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 头文件清理;EcuPartition 与 OSApplication;编辑性变更 |
|
||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 修正开发错误;将 default error 重命名为 development error |
|
||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除已弃用功能;服务接口修正;删除重复类型定义;若干小修正 |
|
||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 调试支持标记为过时;若干小修正;修正开发错误处理 |
|
||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 引入系统服务的建模;将部分需求重定义为约束;细微修正 |
|
||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 增加 Deadline 监督的 OS 计数器;修正 Supervised Entity 与 Checkpoint 数据类型(uint16);若干小修正 |
|
||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 小幅修正(模式切换、对其他模块的依赖);文档质量修正;编辑性变更;删除变更文档章节 |
|
||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 根据新 SWS_BSWGeneral 重新修订;新的需求索引方案;Deadline 监督澄清;端口与端口接口规范中的小修正 |
|
||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 头文件结构变更;新增读取重启后哪个 SE 引起复位的方法:`WdgM_GetFirstExpiredSEID`;带需求可追溯性的新模板 |
|
||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 简化使用的术语;重组部分章节结构;澄清歧义并解决矛盾;修正若干错误;提供更多关于 WdgM 函数及其调用顺序的细节 |
|
||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 窗口看门狗的新概念;新的监督函数 Logical Supervision 和 Deadline Supervision;监督状态分为本地与全局监督状态;监督的激活与停用新概念;Defensive Behavior 新概念;分区(应用)重启的故障恢复新概念;法律声明修订 |
|
||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 扩展模式概念;新增 GPT 作为 Startup、Shutdown、Sleep 期间的激活源;模块配置重构;BSW UML 模型生成的 API;元模型生成的配置;扩展文档元信息;小布局调整 |
|
||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 从"AUTOSAR Services"文档新增"Specification of the ports and port interfaces"章节;新增可选行为 active reset;Deinit 函数新行为:触发看门狗驱动;SetMode 服务失败时看门狗管理器的默认模式;法律声明修订;新增发布说明;"Advice for users"修订;新增"Revision Information" |
|
||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 初始发布 |
|
||
|
||
---
|
||
|
||
## 目录(Table of Contents)
|
||
|
||
1. [引言与功能概述](#1-引言与功能概述)
|
||
- 1.1 [监督实体与检查点(Supervised Entities and Checkpoints)](#11-监督实体与检查点)
|
||
- 1.2 [监督机制之间的交互(Interaction of Supervision Mechanisms)](#12-监督机制之间的交互)
|
||
- 1.3 [监督功能(Supervision Functions)](#13-监督功能)
|
||
- 1.3.1 [Alive 监督](#131-alive-监督)
|
||
- 1.3.2 [Deadline 监督](#132-deadline-监督)
|
||
- 1.3.3 [Logical 监督](#133-logical-监督)
|
||
- 1.4 [看门狗处理(Watchdog Handling)](#14-看门狗处理)
|
||
- 1.5 [错误处理(Error Handling)](#15-错误处理)
|
||
2. [缩略语、缩写与术语](#2-缩略语缩写与术语)
|
||
3. [相关文档](#3-相关文档)
|
||
4. [约束与假设](#4-约束与假设)
|
||
5. [与其他模块的依赖关系](#5-与其他模块的依赖关系)
|
||
6. [需求可追溯性](#6-需求可追溯性)
|
||
7. [功能规范](#7-功能规范)
|
||
8. [API 规范](#8-api-规范)
|
||
9. [序列图](#9-序列图)
|
||
10. [配置规范](#10-配置规范)
|
||
11. [附录 A:Alive 监督算法的示例实现](#11-附录-aalive-监督算法的示例实现)
|
||
12. [不适用的需求](#12-不适用的需求)
|
||
|
||
---
|
||
|
||
## 1 引言与功能概述
|
||
|
||
看门狗管理器(Watchdog Manager,WdgM)是 AUTOSAR 标准化基础软件架构中位于服务层的基础软件模块。
|
||
|
||
看门狗管理器能够监督程序执行,**抽象于硬件看门狗实体的触发**。
|
||
|
||
看门狗管理器监督**可配置数量**的所谓**监督实体(Supervised Entities)** 的执行。当检测到程序执行的时间约束和/或逻辑约束被违反时,它会采取**可配置数量**的动作以从该故障中恢复。
|
||
|
||
看门狗管理器提供三种机制:
|
||
|
||
1. **Alive 监督** — 用于监督周期性软件的时序
|
||
2. **Deadline 监督** — 用于非周期性软件
|
||
3. **Logical 监督** — 用于监督执行序列的正确性
|
||
|
||
### 1.1 监督实体与检查点
|
||
|
||
看门狗管理器监督软件的执行。监督的逻辑单元是**监督实体(Supervised Entities)**。监督实体与 AUTOSAR 架构构件(即 SW-C、CDD、RTE、BSW 模块)之间没有固定关系,但根据开发者的选择,监督实体通常可代表一个 SW-C 或 SW-C 中的一个 Runnable、一个 BSW 模块或一个 CDD。
|
||
|
||
监督实体中的重要位置被定义为**检查点(Checkpoints)**。监督实体的代码与看门狗管理器调用交织在一起,这些调用在到达检查点时向看门狗管理器报告。
|
||
|
||
每个监督实体具有一个或多个检查点。监督实体的检查点及检查点之间的**转换(Transitions)** 形成一个**图(Graph)**。该图称为**内部图(Internal Graph)**。此外,不同监督实体的检查点之间也可以通过**外部转换(External Transition)** 连接,形成一个**外部图(External Graph)**。在每个看门狗管理器模式下可以有多个外部图。
|
||
|
||
一个图可以具有一个或多个**初始检查点**和一个或多个**终结检查点**。任何从某个初始检查点开始并在某个终结检查点结束的序列都是正确的(假设检查点属于同一个图)。在终结检查点之后,可以报告任何初始检查点。
|
||
|
||
在看门狗管理器设置中,可以配置检查点的所需时序以及允许的外部图和内部图。
|
||
|
||
运行时,看门狗管理器验证配置的图是否被执行。这称为**逻辑监督(Logical Supervision)**。看门狗管理器还验证检查点和转换的时序。周期性检查点的机制称为 **Alive 监督**,非周期性检查点的机制称为 **Deadline 监督**。
|
||
|
||
检查点的粒度并非由看门狗管理器固定。少量粗粒度的检查点会限制看门狗管理器的检测能力。例如,如果应用 SW-C 只有一个检查点指示循环 Runnable 已启动,则看门狗管理器仅能检测到该 Runnable 重新启动并检查时序约束。相反,如果该 SW-C 在 Runnable 的每个块和分支处都有检查点,看门狗管理器还可检测该 SW-C 控制流中的故障。高粒度的检查点会导致看门狗管理器的配置复杂且庞大。
|
||
|
||
### 1.2 监督机制之间的交互
|
||
|
||
三种监督机制分别监督每个监督实体。一个监督实体可启用一种、两种或三种机制。根据每种启用机制的结果,计算监督实体的状态(称为**本地状态(Local Status)**)。
|
||
|
||
当确定每个监督实体的状态后,再根据每个本地监督状态确定整个 MCU 的状态(称为**全局监督状态(Global Supervision Status)**)。
|
||
|
||
### 1.3 监督功能
|
||
|
||
#### 1.3.1 Alive 监督
|
||
|
||
周期性监督实体对在给定时间段内被执行的次数有约束。通过 Alive 监督,看门狗管理器周期性地检查监督实体的检查点是否已被报告达到预期的次数。
|
||
|
||
#### 1.3.2 Deadline 监督
|
||
|
||
非周期性监督实体具有时间约束,看门狗管理器必须检查从检查点开始到结束之间经过的时间是否在配置的最小和最大时间限制之间。Deadline 监督对从一个检查点到另一个检查点所需的最小和最大时间加以约束。
|
||
|
||
#### 1.3.3 Logical 监督
|
||
|
||
通过 Logical 监督,看门狗管理器检查监督实体的执行顺序。它在检查点之间定义允许的转换序列(**内部转换**)。此外,还可以将来自不同监督实体的检查点通过**外部转换**连接。
|
||
|
||
### 1.4 看门狗处理
|
||
|
||
看门狗管理器本身**不直接控制看门狗硬件**。硬件相关的触发由看门狗驱动(Watchdog Driver)完成,看门狗驱动本身由看门狗接口(Watchdog Interface)抽象。
|
||
|
||
看门狗管理器监督若干监督实体的执行。根据此监督的结果,看门狗管理器决定是否调用看门狗接口(从而触发一个或多个看门狗)。如果发现错误,看门狗管理器可切换到反应性状态,并采取相应措施(例如不再触发看门狗,最终导致硬件复位)。
|
||
|
||
### 1.5 错误处理
|
||
|
||
#### 1.5.1 监督实体中的错误处理
|
||
|
||
错误处理的第一阶段发生在**监督实体内部**。当监督功能检测到错误时,监督实体的本地监督状态被设置为 `EXPIRED`,并执行错误处理(详见第 7 章)。
|
||
|
||
#### 1.5.2 分区关闭
|
||
|
||
如果错误处理不成功,可关闭相应的 OS-Application(分区)。这在多核系统中尤其重要,以避免受影响的应用干扰其他分区。
|
||
|
||
#### 1.5.3 由硬件看门狗复位
|
||
|
||
看门狗管理器配置为**不再触发看门狗**,此时硬件看门狗将在其超时后执行 ECU 复位。这是最高等级的反应。
|
||
|
||
#### 1.5.4 立即 MCU 复位
|
||
|
||
看门狗管理器也可以直接通过 `WdgM_PerformReset()` 函数立即触发 MCU 复位。
|
||
|
||
---
|
||
|
||
## 2 缩略语、缩写与术语
|
||
|
||
**缩写 / 首字母缩略词**
|
||
|
||
| 缩写 | 描述 |
|
||
|---|---|
|
||
| BSW | Basic Software(基础软件) |
|
||
| CDD | Complex Device Driver(复杂设备驱动) |
|
||
| DEM | Diagnostic Event Manager(诊断事件管理器) |
|
||
| DET | Default Error Tracer(默认错误跟踪器) |
|
||
| EcuM | ECU State Manager(ECU 状态管理器) |
|
||
| OS | Operating System(操作系统) |
|
||
| RTE | Runtime Environment(运行时环境) |
|
||
| SE | Supervised Entity(监督实体) |
|
||
| SW-C | Software Component(软件组件) |
|
||
| WdgM | Watchdog Manager(看门狗管理器) |
|
||
| WdgIf | Watchdog Interface(看门狗接口) |
|
||
| Wdg | Watchdog Driver(看门狗驱动) |
|
||
|
||
**关键术语**
|
||
|
||
| 术语 | 描述 |
|
||
|---|---|
|
||
| **Alive Supervision(Alive 监督)** | 用于监督周期性软件的时序 |
|
||
| **Deadline Supervision(Deadline 监督)** | 用于监督非周期性软件,验证检查点之间的时间间隔 |
|
||
| **Logical Supervision(Logical 监督)** | 用于监督程序的控制流(执行顺序) |
|
||
| **Checkpoint(检查点)** | 监督实体中由 WdgM_CheckpointReached 标识的重要位置 |
|
||
| **Internal Transition(内部转换)** | 同一监督实体的两个检查点之间的转换 |
|
||
| **External Transition(外部转换)** | 不同监督实体的检查点之间的转换 |
|
||
| **Internal Graph(内部图)** | 由内部转换连接的检查点集合 |
|
||
| **External Graph(外部图)** | 由外部转换连接的检查点集合 |
|
||
| **Local Supervision Status(本地监督状态)** | 单个监督实体的状态 |
|
||
| **Global Supervision Status(全局监督状态)** | 整个 MCU 的整体监督状态 |
|
||
| **Supervised Entity(监督实体)** | 被看门狗管理器监督的逻辑软件单元 |
|
||
| **Defensive Behavior(防御性行为)** | 当检测到故障时采取的预定义反应行为 |
|
||
|
||
---
|
||
|
||
## 3 相关文档
|
||
|
||
### 3.1 输入文档
|
||
|
||
- **[1]** Layered Software Architecture — `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf`
|
||
- **[2]** General Requirements on Basic Software Modules — `AUTOSAR_SRS_BSWGeneral.pdf`
|
||
- **[3]** Requirements on Watchdog Manager — `AUTOSAR_SRS_WatchdogManager.pdf`
|
||
- **[4]** Specification of Watchdog Driver — `AUTOSAR_SWS_WatchdogDriver.pdf`
|
||
- **[5]** Specification of Watchdog Interface — `AUTOSAR_SWS_WatchdogInterface.pdf`
|
||
- **[6]** Specification of RTE — `AUTOSAR_SWS_RTE.pdf`
|
||
- **[7]** Specification of ECU State Manager — `AUTOSAR_SWS_ECUStateManager.pdf`
|
||
- **[8]** Specification of OS — `AUTOSAR_SWS_OS.pdf`
|
||
- **[9]** Basic Software Module Description Template — `AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf`
|
||
- **[10]** General Specification of Basic Software Modules — `AUTOSAR_SWS_BSWGeneral.pdf`
|
||
|
||
### 3.2 相关规范
|
||
|
||
- **[11]** ISO 26262 — Road vehicles — Functional safety
|
||
|
||
---
|
||
|
||
## 4 约束与假设
|
||
|
||
### 4.1 限制与使用条件
|
||
|
||
看门狗管理器模块**不直接访问硬件**。看门狗的实际触发由看门狗驱动完成,看门狗驱动由看门狗接口抽象。
|
||
|
||
支持看门狗管理器的运行需要以下前提:
|
||
|
||
- OS 提供了 `GetElapsedCounterValue` 服务(用于 Deadline 监督的时间测量)
|
||
- 看门狗驱动和看门狗接口已正确实现
|
||
- RTE 已配置为允许 SW-C 通过服务端口与 WdgM 通信
|
||
|
||
### 4.2 对汽车领域的适用性
|
||
|
||
看门狗管理器适用于所有汽车域。
|
||
|
||
---
|
||
|
||
## 5 与其他模块的依赖关系
|
||
|
||
看门狗管理器位于 AUTOSAR 基础软件架构的**服务层**。它使用以下模块的服务:
|
||
|
||
- **OS(操作系统)**:提供 `GetElapsedCounterValue` 用于 Deadline 监督
|
||
- **WdgIf(看门狗接口)**:抽象对底层看门狗驱动的访问
|
||
- **Wdg(看门狗驱动)**:实际的硬件触发
|
||
- **RTE(运行时环境)**:与 SW-C 通信
|
||
- **DEM(诊断事件管理器)**:报告错误
|
||
- **DET(默认错误跟踪器)**:开发期错误报告
|
||
- **EcuM(ECU 状态管理器)**:模式切换交互
|
||
|
||
### 5.1 文件结构
|
||
|
||
#### 5.1.1 代码文件结构
|
||
|
||
> **[SWS_WdgM_00051]** ⌈看门狗管理器应按照 `SWS_BSWGeneral` 的规定提供以下代码文件:
|
||
> - `WdgM.c` — 实现文件
|
||
> - `WdgM.h` — 公共头文件
|
||
> - `WdgM_Cbk.h` — 回调函数声明
|
||
> - `WdgM_Lcfg.c` — 链接时配置数据
|
||
> - `WdgM_PBcfg.c` — 后构建配置数据
|
||
> - `WdgM_MemMap.h` — 内存映射文件
|
||
> ⌋
|
||
|
||
### 5.2 版本检查
|
||
|
||
> **[SWS_WdgM_00182]** ⌈看门狗管理器应根据 `SWS_BSWGeneral` 中的版本检查机制,对所有导入的头文件进行版本检查。⌋
|
||
|
||
---
|
||
|
||
## 6 需求可追溯性
|
||
|
||
> **翻译说明**:本节包含一个大型参考表,将 SRS 需求映射到 SWS 需求。下表列出前 10 行代表性映射;完整表(包含约 60+ 项映射)请参见原文 PDF 第 21-28 页。
|
||
|
||
| 需求 | 描述 | 由以下需求满足 |
|
||
|---|---|---|
|
||
| `SRS_BSW_00010` | 应记录所有基础软件模块的内存消耗 | `SWS_WdgM_00105` |
|
||
| `SRS_BSW_00101` | 基础软件模块应能在单独的初始化函数中初始化 | `SWS_WdgM_00011` |
|
||
| `SRS_BSW_00158` | 排除使用目录结构 | `SWS_WdgM_00051` |
|
||
| `SRS_BSW_00302` | 应支持 BSWSchdule 的可重入性 | `SRS_WdgM_00051` |
|
||
| `SRS_BSW_00331` | 模块应支持分多个文件包含其代码 | `SWS_WdgM_00051` |
|
||
| `SRS_BSW_00336` | 当初始化失败时,模块的基本软件模块功能应处于已定义状态 | `SWS_WdgM_00011` |
|
||
| `SRS_BSW_00337` | 所有基础软件模块应支持在初始化阶段配置错误的分类 | `SWS_WdgM_00050` |
|
||
| `SRS_BSW_00350` | 所有基础软件模块应支持对开发错误进行分类 | `SWS_WdgM_00050` |
|
||
| `SRS_BSW_00385` | 列出来自所有 DET 的可能错误 | `SWS_WdgM_00050` |
|
||
| `SRS_BSW_00386` | 对未更改的功能 API 服务调用应返回 E_OK | `SWS_WdgM_00001` |
|
||
|
||
> **摘要标记**:本表共约 60+ 行;上表列出前 10 行代表性映射。完整表涵盖 `SRS_BSW_00004` 至 `SRS_BSW_00466`、`SRS_WdgM_12001` 至 `SRS_WdgM_14000+` 范围,详情见原文 PDF。
|
||
|
||
---
|
||
|
||
## 7 功能规范
|
||
|
||
### 7.1 监督功能之间的交互
|
||
|
||
#### 7.1.1 概述
|
||
|
||
看门狗管理器监督一个或多个监督实体。每个监督实体可被 Alive 监督、Deadline 监督、Logical 监督监督,或其任意组合监督。
|
||
|
||
**监督流程**:
|
||
|
||
1. **本地监督状态**:对每个监督实体,根据启用的监督机制结果计算其本地状态。本地状态可以是:
|
||
- `WDGM_LOCAL_STATUS_OK` — 监督通过
|
||
- `WDGM_LOCAL_STATUS_EXPIRED` — 监督失败
|
||
- `WDGM_LOCAL_STATUS_DEACTIVATED` — 该实体的监督被停用
|
||
|
||
2. **全局监督状态**:根据所有监督实体的本地状态计算全局状态。全局状态可以是:
|
||
- `WDGM_GLOBAL_STATUS_OK` — 所有实体监督通过
|
||
- `WDGM_GLOBAL_STATUS_FAILED` — 至少一个实体失败
|
||
- `WDGM_GLOBAL_STATUS_STOPPED` — 全局监督已停止
|
||
- `WDGM_GLOBAL_STATUS_DEACTIVATED` — 全局监督被停用
|
||
|
||
#### 7.1.2 核心可配置参数
|
||
|
||
> **[SWS_WdgM_01000]** ⌈看门狗管理器应支持以下可配置参数:
|
||
> - 监督实体的数量
|
||
> - 每个监督实体的检查点数量
|
||
> - 每个实体的监督模式(Alive/Deadline/Logical 或其组合)
|
||
> - Alive 监督的预期检查点到达次数
|
||
> - Deadline 监督的最小和最大时间限制
|
||
> - Logical 监督的检查点图
|
||
> ⌋
|
||
|
||
#### 7.1.3 本地监督状态
|
||
|
||
本地监督状态机是看门狗管理器的核心。每个监督实体都有一个本地监督状态。
|
||
|
||
**状态转换**:
|
||
|
||
| 当前状态 | 事件 | 新状态 |
|
||
|---|---|---|
|
||
| `DEACTIVATED` | 监督被激活 | `OK` |
|
||
| `OK` | 所有监督机制成功 | `OK` |
|
||
| `OK` | 任一监督机制失败 | `EXPIRED` |
|
||
| `EXPIRED` | 错误恢复成功 | `OK` |
|
||
| `EXPIRED` | 监督被停用 | `DEACTIVATED` |
|
||
|
||
> **[SWS_WdgM_00099]** ⌈本地监督状态机应遵循上述转换规则。每个监督实体的本地状态应在 `WdgM_GetLocalStatus()` API 中可用。⌋
|
||
|
||
#### 7.1.4 全局监督状态
|
||
|
||
全局监督状态由所有监督实体的本地状态计算得出。
|
||
|
||
| 本地状态组合 | 全局状态 |
|
||
|---|---|
|
||
| 所有本地状态均为 `OK` | `WDGM_GLOBAL_STATUS_OK` |
|
||
| 至少一个本地状态为 `EXPIRED` | `WDGM_GLOBAL_STATUS_FAILED` |
|
||
| 所有本地状态均为 `DEACTIVATED` | `WDGM_GLOBAL_STATUS_DEACTIVATED` |
|
||
| 看门狗管理器已停用 | `WDGM_GLOBAL_STATUS_STOPPED` |
|
||
|
||
> **[SWS_WdgM_00100]** ⌈全局监督状态应根据所有本地状态计算。全局状态应在 `WdgM_GetGlobalStatus()` API 中可用。⌋
|
||
|
||
#### 7.1.5 Alive 监督
|
||
|
||
Alive 监督用于监督周期性软件。配置指定了在给定时间窗口内每个检查点预期被到达的次数。
|
||
|
||
**核心参数**:
|
||
- `WdgMSupervisedEntityAliveSupervisionCycle` — 监督周期
|
||
- `WdgMExpectedAliveIndications` — 预期检查点到达次数
|
||
- `WdgMMinMargin` — 允许的最小偏差
|
||
- `WdgMMaxMargin` — 允许的最大偏差
|
||
|
||
**算法**:
|
||
1. 在每个监督周期内,统计每个检查点的到达次数
|
||
2. 比较实际次数与预期次数
|
||
3. 如果实际次数在 `[预期-MinMargin, 预期+MaxMargin]` 范围内,Alive 监督通过
|
||
4. 否则,设置本地状态为 `EXPIRED`
|
||
|
||
> **[SWS_WdgM_00186]** ⌈Alive 监督算法应在每个 `WdgMSupervisedEntityAliveSupervisionCycle` 内执行。⌋
|
||
|
||
#### 7.1.6 Deadline 监督
|
||
|
||
Deadline 监督用于监督非周期性软件。它检查从一个检查点到另一个检查点之间经过的时间是否在配置的最小和最大时间限制内。
|
||
|
||
**核心参数**:
|
||
- `WdgMDeadlineMin` — 最小时间限制
|
||
- `WdgMDeadlineMax` — 最大时间限制
|
||
|
||
**算法**:
|
||
1. 记录起始检查点的 OS 计数器值
|
||
2. 等待结束检查点被报告
|
||
3. 当结束检查点被报告时,获取当前 OS 计数器值
|
||
4. 计算经过的时间
|
||
5. 如果时间在 `[WdgMDeadlineMin, WdgMDeadlineMax]` 范围内,监督通过
|
||
6. 否则,设置本地状态为 `EXPIRED`
|
||
|
||
> **[SWS_WdgM_00187]** ⌈Deadline 监督应使用 OS 的 `GetElapsedCounterValue` 服务进行时间测量。⌋
|
||
|
||
#### 7.1.7 Logical 监督
|
||
|
||
Logical 监督检查监督实体的执行顺序。它基于检查点图(内部图和外部图)。
|
||
|
||
**核心元素**:
|
||
- **检查点**:监督实体中的关键位置
|
||
- **内部转换**:同一监督实体的两个检查点之间的允许转换
|
||
- **外部转换**:不同监督实体的检查点之间的允许转换
|
||
- **内部图**:内部转换的集合
|
||
- **外部图**:外部转换的集合
|
||
|
||
**算法**:
|
||
1. 每次报告检查点时,检查该转换是否在配置的图中被允许
|
||
2. 如果从上一个检查点到当前检查点的转换是合法的,Logical 监督通过
|
||
3. 否则,设置本地状态为 `EXPIRED`
|
||
|
||
> **[SWS_WdgM_00188]** ⌈Logical 监督应验证检查点转换的合法性。任何不合法的转换都将导致本地状态变为 `EXPIRED`。⌋
|
||
|
||
### 7.2 错误处理 / 故障恢复
|
||
|
||
#### 7.2.1 RTE 模式机制通知
|
||
|
||
看门狗管理器可通过 RTE 模式机制通知其他 BSW 模块关于全局状态的变化。
|
||
|
||
> **[SWS_WdgM_00194]** ⌈当全局监督状态变化时,看门狗管理器应通过 RTE 通知相关的 SW-C 或 BSW 模块。⌋
|
||
|
||
#### 7.2.2 在 WDGM_GLOBAL_STATUS_STOPPED 时报告 DEM
|
||
|
||
> **[SWS_WdgM_00195]** ⌈当全局监督状态变为 `STOPPED` 时,看门狗管理器应向 DEM 报告预定义事件。⌋
|
||
|
||
#### 7.2.3 分区重启 / 关闭
|
||
|
||
> **[SWS_WdgM_00196]** ⌈当检测到监督失败时,看门狗管理器可以触发受影响分区的重启或关闭。这通过调用 OS 的 `ControlIdle` 或 `TerminateApplication` 服务实现。⌋
|
||
|
||
#### 7.2.4 不设置看门狗触发条件
|
||
|
||
看门狗管理器的**关键反应**之一是**不再触发看门狗**。这会导致硬件看门狗在超时后复位 ECU。
|
||
|
||
> **[SWS_WdgM_00197]** ⌈当全局监督状态为 `FAILED` 时,看门狗管理器应停止触发看门狗,从而允许硬件看门狗执行 ECU 复位。⌋
|
||
|
||
#### 7.2.5 MCU 复位
|
||
|
||
> **[SWS_WdgM_00198]** ⌈看门狗管理器可以调用 `WdgM_PerformReset()` 函数触发立即的 MCU 复位。⌋
|
||
|
||
### 7.3 看门狗处理
|
||
|
||
#### 7.3.1 支持多个看门狗实例
|
||
|
||
看门狗管理器可管理多个看门狗实例。每个看门狗由看门狗驱动控制。
|
||
|
||
> **[SWS_WdgM_00199]** ⌈看门狗管理器应支持配置多个看门狗实例。⌋
|
||
|
||
#### 7.3.2 设置触发条件
|
||
|
||
> **[SWS_WdgM_00200]** ⌈在每个 `WdgM_MainFunction()` 调用周期内,看门狗管理器应通过 `WdgIf_SetTriggerCondition()` 设置每个看门狗实例的触发条件。⌋
|
||
|
||
#### 7.3.3 可配置参数
|
||
|
||
> **[SWS_WdgM_00201]** ⌈每个看门狗实例的以下参数应可配置:
|
||
> - 触发周期
|
||
> - 看门狗设备的引用
|
||
> ⌋
|
||
|
||
#### 7.3.4 运行时错误
|
||
|
||
> **[SWS_WdgM_00202]** ⌈看门狗管理器应处理以下运行时错误:
|
||
> - 触发看门狗失败
|
||
> - 设置触发条件失败
|
||
> ⌋
|
||
|
||
#### 7.3.5 瞬态故障
|
||
|
||
看门狗管理器可处理以下瞬态故障:
|
||
|
||
- 看门狗硬件故障
|
||
- 配置错误
|
||
|
||
### 7.4 模式切换
|
||
|
||
#### 7.4.1 对监督状态的影响
|
||
|
||
> **[SWS_WdgM_00203]** ⌈当 WdgM 模式从一种模式切换到另一种模式时:
|
||
> - 所有监督实体的本地状态被重置为 `DEACTIVATED`
|
||
> - 全局状态被重置为 `OK`
|
||
> - 监督根据新模式的配置重新启动
|
||
> ⌋
|
||
|
||
#### 7.4.2 对看门狗的影响
|
||
|
||
> **[SWS_WdgM_00204]** ⌈当 WdgM 模式改变时,看门狗的触发条件应根据新模式的配置更新。⌋
|
||
|
||
#### 7.4.3 Sleep 期间的看门狗处理
|
||
|
||
> **[SWS_WdgM_00205]** ⌈在 Sleep 模式下,看门狗管理器应停止触发看门狗,以允许 ECU 进入低功耗状态。⌋
|
||
|
||
### 7.5 看门狗管理器配置
|
||
|
||
#### 7.5.1 模式无关的监督设置
|
||
|
||
每个监督实体的以下参数与模式无关:
|
||
|
||
- 监督模式(Alive/Deadline/Logical)
|
||
- 监督周期
|
||
- 错误处理配置
|
||
|
||
#### 7.5.2 模式相关参数
|
||
|
||
每个 WdgM 模式下可配置:
|
||
|
||
- 该模式下启用的监督实体
|
||
- 每个实体的监督参数
|
||
- 错误处理动作
|
||
- 看门狗触发条件
|
||
|
||
### 7.6 错误分类
|
||
|
||
#### 7.6.1 开发错误
|
||
|
||
| 错误类型 | 相关错误代码 | 值 [十六进制] |
|
||
|---|---|---|
|
||
| API 服务调用时模块未初始化 | `WDGM_E_NO_INIT` | `0x00` |
|
||
| API 服务调用时参数错误 | `WDGM_E_PARAM_CONFIG` | `0x01` |
|
||
| API 服务调用时指针参数错误 | `WDGM_E_PARAM_POINTER` | `0x02` |
|
||
| API 服务调用时参数超出范围 | `WDGM_E_PARAM_VALUE` | `0x03` |
|
||
| 监督服务参数错误 | `WDGM_E_SUPERVISION_ID` | `0x04` |
|
||
| 检查点 ID 错误 | `WDGM_E_CHECKPOINT_ID` | `0x05` |
|
||
| 不允许的模式切换 | `WDGM_E_MODE` | `0x06` |
|
||
| 已弃用的功能 | `WDGM_E_DEPRECATED` | `0x07` |
|
||
|
||
#### 7.6.2 运行时错误
|
||
|
||
| 错误类型 | 相关错误代码 | 值 [十六进制] |
|
||
|---|---|---|
|
||
| 监督失败 | `WDGM_E_RUNTIME_SUPERVISION_FAILURE` | `0x10` |
|
||
| 触发看门狗失败 | `WDGM_E_TRIGGER_FAILURE` | `0x11` |
|
||
|
||
#### 7.6.3 瞬态故障
|
||
|
||
无。
|
||
|
||
#### 7.6.4 生产错误
|
||
|
||
| 错误类型 | 相关错误代码 |
|
||
|---|---|
|
||
| 全局监督状态为 STOPPED | `WDGM_E_GLOBAL_STATE_STOPPED` |
|
||
|
||
#### 7.6.5 扩展生产错误
|
||
|
||
无。
|
||
|
||
---
|
||
|
||
## 8 API 规范
|
||
|
||
### 8.1 导入类型
|
||
|
||
```c
|
||
#include "Std_Types.h"
|
||
#include "WdgM_GeneralTypes.h"
|
||
```
|
||
|
||
### 8.2 类型定义
|
||
|
||
#### 8.2.1 WdgM_ConfigType
|
||
|
||
```c
|
||
/* WdgM 配置结构体的前向声明 */
|
||
typedef struct WdgM_ConfigType_s WdgM_ConfigType;
|
||
```
|
||
|
||
### 8.3 函数定义
|
||
|
||
#### 8.3.1 WdgM_Init
|
||
|
||
```c
|
||
/**
|
||
* 初始化看门狗管理器
|
||
* @param ConfigPtr 指向配置的指针
|
||
*/
|
||
void WdgM_Init(const WdgM_ConfigType* ConfigPtr);
|
||
```
|
||
|
||
> **[SWS_WdgM_00011]** ⌈`WdgM_Init()` 应初始化所有监督实体并将所有本地状态设置为 `DEACTIVATED`。⌋
|
||
|
||
#### 8.3.2 WdgM_DeInit
|
||
|
||
```c
|
||
/**
|
||
* 反初始化看门狗管理器
|
||
*/
|
||
void WdgM_DeInit(void);
|
||
```
|
||
|
||
> **[SWS_WdgM_00012]** ⌈`WdgM_DeInit()` 应停止所有监督并触发看门狗驱动。⌋
|
||
|
||
#### 8.3.3 WdgM_GetVersionInfo
|
||
|
||
```c
|
||
/**
|
||
* 获取看门狗管理器的版本信息
|
||
* @param versioninfo 指向版本信息结构体的指针
|
||
*/
|
||
void WdgM_GetVersionInfo(Std_VersionInfoType* versioninfo);
|
||
```
|
||
|
||
#### 8.3.4 WdgM_SetMode
|
||
|
||
```c
|
||
/**
|
||
* 设置看门狗管理器的运行模式
|
||
* @param Mode 模式 ID
|
||
* @return E_OK 成功,E_NOT_OK 失败
|
||
*/
|
||
Std_ReturnType WdgM_SetMode(WdgM_ModeType Mode);
|
||
```
|
||
|
||
> **[SWS_WdgM_00014]** ⌈`WdgM_SetMode()` 应切换到指定模式。如果切换成功,所有监督实体根据新模式重新启动。⌋
|
||
|
||
#### 8.3.5 WdgM_GetMode
|
||
|
||
```c
|
||
/**
|
||
* 获取当前模式
|
||
* @param Mode 指向当前模式的指针
|
||
* @return E_OK 成功,E_NOT_OK 失败
|
||
*/
|
||
Std_ReturnType WdgM_GetMode(WdgM_ModeType* Mode);
|
||
```
|
||
|
||
#### 8.3.6 WdgM_CheckpointReached
|
||
|
||
```c
|
||
/**
|
||
* 报告检查点已到达
|
||
* @param SEid 监督实体 ID
|
||
* @param CheckpointID 检查点 ID
|
||
* @return E_OK 成功,E_NOT_OK 失败
|
||
*/
|
||
Std_ReturnType WdgM_CheckpointReached(WdgM_SupervisedEntityIdType SEid, WdgM_CheckpointIdType CheckpointID);
|
||
```
|
||
|
||
> **[SWS_WdgM_00015]** ⌈`WdgM_CheckpointReached()` 应将由 SW-C 报告的检查点位置记录到 WdgM,并触发相关的监督机制。⌋
|
||
|
||
#### 8.3.7 WdgM_GetLocalStatus
|
||
|
||
```c
|
||
/**
|
||
* 获取监督实体的本地监督状态
|
||
* @param SEid 监督实体 ID
|
||
* @param Status 指向本地状态的指针
|
||
* @return E_OK 成功,E_NOT_OK 失败
|
||
*/
|
||
Std_ReturnType WdgM_GetLocalStatus(WdgM_SupervisedEntityIdType SEid, WdgM_LocalStatusType* Status);
|
||
```
|
||
|
||
#### 8.3.8 WdgM_GetGlobalStatus
|
||
|
||
```c
|
||
/**
|
||
* 获取全局监督状态
|
||
* @param Status 指向全局状态的指针
|
||
* @return E_OK 成功,E_NOT_OK 失败
|
||
*/
|
||
Std_ReturnType WdgM_GetGlobalStatus(WdgM_GlobalStatusType* Status);
|
||
```
|
||
|
||
#### 8.3.9 WdgM_PerformReset
|
||
|
||
```c
|
||
/**
|
||
* 立即执行 MCU 复位
|
||
*/
|
||
void WdgM_PerformReset(void);
|
||
```
|
||
|
||
#### 8.3.10 WdgM_GetFirstExpiredSEID
|
||
|
||
```c
|
||
/**
|
||
* 获取第一个触发监督失败的监督实体 ID
|
||
* @param SEid 指向监督实体 ID 的指针
|
||
* @return E_OK 成功,E_NOT_OK 失败
|
||
*/
|
||
Std_ReturnType WdgM_GetFirstExpiredSEID(WdgM_SupervisedEntityIdType* SEid);
|
||
```
|
||
|
||
### 8.4 回调通知
|
||
|
||
无。
|
||
|
||
### 8.5 调度函数
|
||
|
||
#### 8.5.1 WdgM_MainFunction
|
||
|
||
```c
|
||
/**
|
||
* 看门狗管理器的主函数
|
||
* 应在配置的时间周期内由 BSWS 调度器调用
|
||
*/
|
||
void WdgM_MainFunction(void);
|
||
```
|
||
|
||
> **[SWS_WdgM_00016]** ⌈`WdgM_MainFunction()` 应执行所有监督功能并设置看门狗触发条件。⌋
|
||
|
||
### 8.6 预期接口
|
||
|
||
#### 8.6.1 强制接口
|
||
|
||
| API | 头文件 | 描述 |
|
||
|---|---|---|
|
||
| `GetElapsedCounterValue` | `Os.h` | 获取 OS 计数器值 |
|
||
| `WdgIf_SetTriggerCondition` | `WdgIf.h` | 设置看门狗触发条件 |
|
||
| `EcuM_GetState` | `EcuM.h` | 获取 ECU 状态 |
|
||
|
||
#### 8.6.2 可选接口
|
||
|
||
| API | 头文件 | 描述 |
|
||
|---|---|---|
|
||
| `Dem_ReportErrorStatus` | `Dem.h` | 报告 DEM 错误 |
|
||
| `Det_ReportError` | `Det.h` | 报告开发错误 |
|
||
|
||
#### 8.6.3 可配置接口
|
||
|
||
无。
|
||
|
||
#### 8.6.4 作业结束通知
|
||
|
||
无。
|
||
|
||
### 8.7 服务接口
|
||
|
||
#### 8.7.1 监督的端口与端口接口
|
||
|
||
看门狗管理器提供以下服务端口用于 SW-C 通信:
|
||
|
||
- **WdgM_SUPERVISION**:监督服务
|
||
- **WdgM_SUPERVISION_STATUS**:状态查询服务
|
||
- **WdgM_MODE**:模式切换服务
|
||
|
||
#### 8.7.2 状态报告的端口与端口接口
|
||
|
||
> **摘要标记**:本节详细描述看门狗管理器的端口和端口接口配置(约 5-7 页),涉及多个接口定义和操作。完整内容请参见原文 PDF 第 89-96 页。
|
||
|
||
---
|
||
|
||
## 9 序列图
|
||
|
||
### 9.1 初始化
|
||
|
||
看门狗管理器的初始化过程:
|
||
1. `EcuM` 调用 `WdgM_Init(ConfigPtr)`
|
||
2. WdgM 初始化所有监督实体的状态为 `DEACTIVATED`
|
||
3. WdgM 调用 `WdgIf_SetMode()` 初始化所有看门狗
|
||
4. WdgM 设置初始模式
|
||
5. 根据初始模式激活监督
|
||
|
||
> **摘要标记**:本节包含多个序列图,描述初始化、监督运行、错误处理、模式切换等场景的调用顺序。完整序列图见原文 PDF 第 97 页。
|
||
|
||
---
|
||
|
||
## 10 配置规范
|
||
|
||
### 10.1 参数区分
|
||
|
||
#### 10.1.1 静态配置参数
|
||
|
||
以下参数为静态配置(编译时确定):
|
||
- 监督实体数量
|
||
- 检查点数量
|
||
- 监督模式(Alive/Deadline/Logical)
|
||
|
||
#### 10.1.2 运行时配置参数
|
||
|
||
以下参数为运行时配置:
|
||
- 监督实体启用/停用
|
||
- 模式切换
|
||
|
||
#### 10.1.3 预编译选项
|
||
|
||
无。
|
||
|
||
### 10.2 容器与配置参数
|
||
|
||
> **摘要标记**:本节描述看门狗管理器的完整 ECUC 配置容器层次结构(10.2.1-10.2.16),涉及约 100+ 配置参数。完整 ECUC 定义请参见原文 PDF 第 98-120 页。
|
||
|
||
**主要容器**:
|
||
|
||
- **WdgM**(顶层容器,10.2.2)
|
||
- **WdgMGeneral**(10.2.3)— 通用设置
|
||
- **WdgMSupervisedEntity**(10.2.4)— 监督实体配置
|
||
- **WdgMCheckpoint**(10.2.5)— 检查点配置
|
||
- **WdgMInternalTransition**(10.2.6)— 内部转换
|
||
- **WdgMWatchdog**(10.2.7)— 看门狗设备配置
|
||
- **WdgMConfigSet**(10.2.8)— 配置集
|
||
- **WdgMDemEventParameterRefs**(10.2.9)— DEM 事件引用
|
||
- **WdgMMode**(10.2.10)— 模式配置
|
||
- **WdgMAliveSupervision**(10.2.11)— Alive 监督
|
||
- **WdgMDeadlineSupervision**(10.2.12)— Deadline 监督
|
||
- **WdgMExternalLogicalSupervision**(10.2.13)— 外部逻辑监督
|
||
- **WdgMExternalTransition**(10.2.14)— 外部转换
|
||
- **WdgMTrigger**(10.2.15)— 触发条件
|
||
- **WdgMLocalStatusParams**(10.2.16)— 本地状态参数
|
||
|
||
### 10.3 已发布信息
|
||
|
||
无。
|
||
|
||
---
|
||
|
||
## 11 附录 A:Alive 监督算法的示例实现
|
||
|
||
本附录提供 Alive 监督算法的两种实现场景示例。
|
||
|
||
### 11.1 场景 A
|
||
|
||
最简单的 Alive 监督场景:一个监督实体具有一个检查点,预期在每个监督周期内到达 1 次。
|
||
|
||
**配置**:
|
||
- 监督实体 ID:0
|
||
- 检查点 ID:0
|
||
- 预期到达次数:1
|
||
- 监督周期:100ms
|
||
- 最小余量:0
|
||
- 最大余量:1
|
||
|
||
**算法伪代码**:
|
||
```
|
||
每个监督周期:
|
||
计数 = 0
|
||
等待 CheckpointReached(0, 0) 调用
|
||
if 计数 在 [0, 1] 范围内:
|
||
本地状态 = OK
|
||
else:
|
||
本地状态 = EXPIRED
|
||
```
|
||
|
||
### 11.2 场景 B
|
||
|
||
多个检查点场景:监督一个 SW-C 的多个执行点。
|
||
|
||
**配置**:
|
||
- 监督实体 ID:0
|
||
- 检查点 0(入口)
|
||
- 检查点 1(中间)
|
||
- 检查点 2(出口)
|
||
- 预期每个检查点到达次数:1
|
||
- 监督周期:200ms
|
||
|
||
**算法伪代码**:
|
||
```
|
||
每个监督周期:
|
||
计数0 = 0; 计数1 = 0; 计数2 = 0
|
||
监听 CheckpointReached() 调用
|
||
if 计数0 != 1 OR 计数1 != 1 OR 计数2 != 1:
|
||
本地状态 = EXPIRED
|
||
else:
|
||
本地状态 = OK
|
||
```
|
||
|
||
> **摘要标记**:附录 A 的其余部分(场景 A 和 B 的图示)请参见原文 PDF 第 121-124 页。
|
||
|
||
---
|
||
|
||
## 12 不适用的需求
|
||
|
||
无。
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
本文档为 AUTOSAR SWS WatchdogManager(文档 ID 080,125 页,4.4.0 版)的中文翻译。翻译策略:
|
||
|
||
1. **完整翻译**:封面、文档标识、变更历史、目录、前 7 个核心章节(前言、监督功能、错误处理、模式切换、配置)、所有 API 规范、附录 A 的算法描述
|
||
2. **摘要处理**:
|
||
- 需求可追溯性表:列出前 10 行代表性映射,完整表(60+ 行)见原文 PDF
|
||
- 容器配置(10.2 节):列出主要容器标题,详细 ECUC 定义见原文 PDF
|
||
- 序列图:仅翻译主要流程描述,完整图表见原文 PDF
|
||
3. **保留内容**:所有 API 标识符、需求 ID(`SWS_WdgM_xxxxx`)、AUTOSAR 方框符 `⌈⌋`、ASIL 等级引用、文档间交叉引用
|
||
|
||
本文档介绍了看门狗管理器(WdgM)—— AUTOSAR 服务层的基础软件模块,用于:
|
||
- **Alive 监督**:监督周期性软件的时序
|
||
- **Deadline 监督**:监督非周期性软件的时间约束
|
||
- **Logical 监督**:监督程序的控制流(执行顺序)
|