1139 lines
42 KiB
Markdown
1139 lines
42 KiB
Markdown
# ECU 状态管理器规范 (Specification of ECU State Manager)
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **文档标识号** | 078 |
|
||
| **文档标题** | Specification of ECU State Manager(ECU 状态管理器规范) |
|
||
| **文档所有者** | AUTOSAR |
|
||
| **文档责任方** | AUTOSAR |
|
||
| **文档状态** | Final(正式版) |
|
||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||
| **所属标准发布版本** | 4.4.0 |
|
||
|
||
---
|
||
|
||
## 文档变更历史 (Document Change History)
|
||
|
||
| 日期 | 发布版本 | 变更人 | 变更说明 |
|
||
|------|---------|--------|---------|
|
||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 通过 `EcuM_GoDownHaltPoll` 重新处理 BswM 接口;移除 EcuM 固定版本引用 |
|
||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 适配 API `Can_CheckWakeup`;移除 ConfigPtr 参数;移除 Default 错误;移除未使用的 DIO 驱动;EcuM AUTOSAR 服务仅在服务分区上配置 |
|
||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 部分网络集群支持;初始化 BSW 调度器分割;添加驱动程序初始化列表;移除 `EcuM_StateType` |
|
||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 重新处理从核轮询序列;审查多核关闭同步;重新分类错误类型;编辑性修改 |
|
||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 添加开关配置;为 `InitListZero/InitListOne` 定义初始化顺序;纠正 c-init-data 结构名称模式;解决类型冲突;编辑性修改 |
|
||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 重新处理 EcuM 错误;解决 API 和接口之间的不一致;解决类型冲突;编辑性修改 |
|
||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 为服务接口添加 API 表;修复可追踪性问题;全面清理需求(审查不同接口、操作、描述和图);编辑性修改 |
|
||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 在关闭期间有挂起唤醒事件的情况下指定要使用的复位模式;为复位循环检测添加 callout;扩展函数 `EcuM_GetMostRecentShutdown` 的参数"time"的规范;改进配置描述;添加新的 API 以启用 CAN/FR 唤醒的异步 Trcv 处理;EcuM Flex 的适配以支持分布在多个分区上的 BSW 模块;重新分类哪些生产错误是扩展生产错误;在 Client/Server-Interfaces 的操作中添加可能的错误,其中未定义错误;增强配置以通过 EcuM Flex 初始化 BSW 模块 |
|
||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 修复 EcuM 和 BswM 之间的互操作性问题;更一致地描述 ECU State Manager Flexible 的术语;修改睡眠序列以最小化唤醒中断的丢失 |
|
||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 更新 AUTOSAR 服务的伪代码;更新多核系统的启动过程 |
|
||
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 移除状态机以适应模式相关的调度;添加多核支持;添加报警时钟功能;修订免责声明 |
|
||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律免责声明修订 |
|
||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 修复唤醒机制;在启动、关闭和睡眠期间包含看门狗管理器的可选触发;扩展启动序列以具有更大的灵活性并直接初始化所有其他 BSW 模块;从 BSW UML 模型生成 API;从元模型生成配置;文档元信息扩展;进行小幅布局调整 |
|
||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 更正启动流程和唤醒概念;为 AUTOSAR 端口添加规范;修改配置以符合变体管理;添加新的 API 服务;法律免责声明修订;添加发布说明;"用户建议"修订;添加"修订信息" |
|
||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 首次发布 |
|
||
|
||
---
|
||
|
||
## 免责声明 (Disclaimer)
|
||
|
||
> 本作品(规范和/或软件实现)及其包含的材料由 AUTOSAR 发布,仅用于提供信息。 AUTOSAR 和为其作出贡献的公司不对该作品的任何使用承担责任。
|
||
>
|
||
> 本作品中包含的材料受版权及其他类型的知识产权保护。 对本作品中包含的材料的商业利用需要此类知识产权的许可。
|
||
>
|
||
> 本作品可在不进行任何修改的情况下,以任何形式或方式被使用或复制,仅用于提供信息的目的。 出于任何其他目的,未经出版商书面许可,不得以任何形式或方式使用或复制本作品的任何部分。
|
||
>
|
||
> 本作品仅为汽车应用而开发。 它既未为非汽车应用开发,也未为非汽车应用进行测试。
|
||
>
|
||
> "AUTOSAR" 一词和 AUTOSAR 标志是注册商标。
|
||
|
||
---
|
||
|
||
## 目录 (Table of Contents)
|
||
|
||
1. [引言和功能概述 (Introduction and Functional Overview)](#1-引言和功能概述) ........ 11
|
||
2. [定义和缩写词 (Definitions and Acronyms)](#2-定义和缩写词) ......................... 13
|
||
3. [相关文档 (Related documentation)](#3-相关文档) ............................................ 14
|
||
4. [约束和假设 (Constraints and Assumptions)](#4-约束和假设) .......................... 16
|
||
5. [与其他模块的依赖关系 (Dependencies to other modules)](#5-与其他模块的依赖关系) ... 17
|
||
6. [需求追踪 (Requirements traceability)](#6-需求追踪) — 摘要 ......................... 21
|
||
7. [功能规范 (Functional Specification)](#7-功能规范) — 摘要 ........................... 27
|
||
8. [API 规范 (API specification)](#8-api-规范) — 摘要 ..................................... 96
|
||
9. [序列图 (Sequence Charts)](#9-序列图) — 摘要 ........................................ 152
|
||
10. [配置规范 (Configuration specification)](#10-配置规范) — 摘要 ............... 174
|
||
11. [不适用需求 (Not applicable requirements)](#11-不适用需求) ..................... 195
|
||
|
||
---
|
||
|
||
## 已知限制 (Known Limitations)
|
||
|
||
- 在多核上下文中,ECU Manager 模块接口必须被指定为可重入的(reentrant)。
|
||
|
||
---
|
||
|
||
## 1 引言和功能概述 (Introduction and Functional Overview)
|
||
|
||
**ECU Manager 模块**(如本规范中所规定)是管理 ECU 状态共同方面的基础软件模块(参见 [1])。 具体而言,ECU Manager 模块:
|
||
|
||
- **初始化和反初始化** OS、SchM 和 BswM 以及一些基础软件驱动模块。
|
||
- 在请求时将 **ECU 配置为 SLEEP 和 SHUTDOWN**。
|
||
- 管理 ECU 上的 **所有唤醒事件**。
|
||
|
||
ECU Manager 模块提供 **唤醒验证协议**,以区分"真实的"唤醒事件和"杂散的"唤醒事件。
|
||
|
||
此外:
|
||
|
||
- **部分或快速启动**:ECU 以有限的功能启动,然后由应用程序决定逐步继续启动。
|
||
- **交错启动**:ECU 最小化启动,然后启动 RTE 以尽快在 SW-C 中执行功能。 然后继续启动更多的 BSW 和 SW-C,从而交错 BSW 和应用程序功能。
|
||
- **多个操作状态**:ECU 具有多于一个 RUN 状态。 这除其他外细化了从 SLEEP 状态到 RUN 状态的光谱的概念。 现在可以存在从经典 RUN(完全操作)到最深 SLEEP(处理器停止)的连续操作状态。
|
||
- **多核 ECU**:STARTUP、SHUTDOWN、SLEEP 和 WAKEUP 在 ECU 的所有核上协调。
|
||
|
||
灵活的 ECU 管理采用了由以下模块提供的通用模式管理设施:
|
||
|
||
- **RTE 和 BSW Scheduler 模块** [15] 现在合并为一个模块:此模块支持自由可配置的 BSW 和应用程序模式及其模式切换设施。
|
||
- **BSW 模式管理器模块** [22]:此模块实现可配置的规则和动作列表,以评估切换 ECU 模式的条件并实施必要的动作。
|
||
|
||
因此,使用灵活的 ECU 管理,大多数 ECU 状态不再在 ECU Manager 模块本身中实现。 通常,ECU Manager 模块在以下情况下接管控制,当通用模式管理设施不可用时:
|
||
|
||
- 早期 STARTUP 阶段
|
||
- 后期 SHUTDOWN 阶段
|
||
- 调度器锁定设施的 SLEEP 阶段
|
||
|
||
在 ECU Manager 模块的 **UP 阶段**期间,**BSW 模式管理器** 负责进一步的动作。 而 ECU Manager 模块仲裁来自 SW-C 的 RUN 和 POST_RUN 请求,并将模式状态通知 BswM。
|
||
|
||
### 1.1 与先前 ECU Manager 模块版本的向后兼容性 (Backwards Compatibility to Previous ECU Manager Module Versions)
|
||
|
||
如果相应地配置,灵活的 ECU 管理与先前的 ECU Manager 版本向后兼容。
|
||
|
||
有关兼容性的配置的更多信息,请参见"模式管理指南" [23]。
|
||
|
||
---
|
||
|
||
## 2 定义和缩写词 (Definitions and Acronyms)
|
||
|
||
本节定义对 ECU Manager 具有特殊意义的术语和相关模块的缩写词。
|
||
|
||
### 2.1 术语 (Terminology)
|
||
|
||
| 术语 | 描述 |
|
||
|------|------|
|
||
| **Callback(回调)** | 参见术语表 [7]。 |
|
||
| **Callout(Callout)** | "Callouts"是系统设计者可以用代码替换的函数存根,通常在配置时为 ECU Manager 模块添加功能。 Callout 分为两类。 一类提供强制的 ECU Manager 模块功能并用作硬件抽象层。 另一类提供可选功能。 |
|
||
| **Integration Code(集成代码)** | 参见术语表 [7]。 |
|
||
| **Mode(模式)** | 模式是车辆中运行的各种状态机(不仅是 ECU Manager)的某些状态的集合,与特定实体、应用程序或整个车辆相关。 |
|
||
| **Passive Wakeup(被动唤醒)** | 由连接的总线引起的唤醒,而不是由定时器或传感器活动等内部事件引起的唤醒。 |
|
||
| **Phase(阶段)** | ECU Manager 的动作和事件的逻辑或时间集合,例如 STARTUP、UP、SHUTDOWN、SLEEP。 阶段可以由子阶段组成,如果它们主要用于将执行的动作序列分组为逻辑单元,则通常称为序列。 此上下文中的阶段不是 AUTOSAR 方法论的阶段。 |
|
||
| **Shutdown Target(关闭目标)** | ECU 必须在进入睡眠、断电或复位之前关闭。 因此 SLEEP、OFF 和 RESET 是有效的关闭目标。 通过选择关闭目标,应用程序可以将其对下次关闭后 ECU 行为的意愿传达给 ECU Manager 模块。 |
|
||
| **State(状态)** | 状态对它们各自的 BSW 组件是内部的,因此对应用程序不可见。 因此它们仅由 BSW 的内部状态机使用。 ECU Manager 内的状态构建阶段,因此处理模式。 |
|
||
| **Wakeup Event(唤醒事件)** | 导致唤醒的物理事件。 CAN 消息或切换的 IO 线路可以是唤醒事件。 类似地,内部软件表示(例如中断)也可以称为唤醒事件。 |
|
||
| **Wakeup Reason(唤醒原因)** | 唤醒原因是作为上次唤醒的实际原因的唤醒事件。 |
|
||
| **Wakeup Source(唤醒源)** | 处理唤醒事件的外设或 ECU 组件称为唤醒源。 |
|
||
|
||
### 2.2 缩写词 (Acronyms)
|
||
|
||
| 缩写 | 描述 |
|
||
|------|------|
|
||
| **BswM** | Basic Software Mode Manager(基础软件模式管理器) |
|
||
| **DEM** | Diagnostic Event Manager(诊断事件管理器) |
|
||
| **DET** | Default Error Tracer(默认错误跟踪器) |
|
||
| **EcuM** | ECU Manager |
|
||
| **GPT** | General Purpose Timer(通用定时器) |
|
||
| **ICU** | Input Capture Unit(输入捕获单元) |
|
||
| **ISR** | Interrupt Service Routine(中断服务例程) |
|
||
| **MCU** | Microcontroller Unit(微控制器单元) |
|
||
| **NVRAM** | Non-volatile random access memory(非易失性随机访问存储器) |
|
||
| **OS** | Operating System(操作系统) |
|
||
| **RTE** | Runtime Environment(运行时环境) |
|
||
| **VFB** | Virtual Function Bus(虚拟功能总线) |
|
||
|
||
---
|
||
|
||
## 3 相关文档 (Related documentation)
|
||
|
||
### 3.1 输入文档 (Input documents)
|
||
|
||
- [1] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList
|
||
- [2] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture
|
||
- [3] General Requirements on Basic Software Modules — AUTOSAR_SWS_BSWGeneral
|
||
- [4] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral
|
||
- [5] Requirements on Mode Management — AUTOSAR_SRS_ModeManagement
|
||
- [6] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration
|
||
|
||
### 3.2 相关标准和规范 (Related standards and norms)
|
||
|
||
无。
|
||
|
||
### 3.3 相关 AUTOSAR 软件规范 (Related AUTOSAR Software Specifications)
|
||
|
||
- [7] Glossary — AUTOSAR_TR_Glossary
|
||
- [8] Specification of Communication Manager — AUTOSAR_SWS_COMManager
|
||
- [9] Specification of Watchdog Manager — AUTOSAR_SWS_WatchdogManager
|
||
- [10] Specification of MCU Driver — AUTOSAR_SWS_MCUDriver
|
||
- [11] Specification of SPI Handler/Driver — AUTOSAR_SWS_SPIHandlerDriver
|
||
- [12] Specification of EEPROM Interface — AUTOSAR_SWS_EEPROMDriver
|
||
- [13] Specification of Flash Interface — AUTOSAR_SWS_FlashDriver
|
||
- [14] Specification of Operating System — AUTOSAR_SWS_OS
|
||
- [15] Specification of RTE — AUTOSAR_SWS_RTE
|
||
- [16] Specification of the Virtual Function Bus — AUTOSAR_EXP_VFB
|
||
- [17] Specification of Diagnostic Event Manager — AUTOSAR_SWS_DiagnosticEventManager
|
||
- [18] Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer
|
||
- [19] Specification of CAN Transceiver Driver — AUTOSAR_SWS_CANTransceiverDriver
|
||
- [20] Specification of C Implementation Rules — AUTOSAR_TR_CImplementationRules
|
||
- [21] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate
|
||
- [22] Specification of BSW Mode Manager — AUTOSAR_SWS_BSWModeManager
|
||
- [23] Guide to Mode Management — AUTOSAR_Guide_ModeManagement
|
||
|
||
AUTOSAR 提供了基础软件模块的通用规范 [4](SWS BSW General),这也对 ECU State Manager 有效。 因此,SWS BSW General 应被视为 ECU State Manager 的附加必需规范。
|
||
|
||
---
|
||
|
||
## 4 约束和假设 (Constraints and Assumptions)
|
||
|
||
### 4.1 限制 (Limitations)
|
||
|
||
ECU 不能总是被关闭(即零功耗)。
|
||
|
||
**理由**:关闭目标 OFF 只能使用 ECU 特殊硬件(例如电源保持电路)来实现。 如果此硬件不可用,本规范建议发出复位。 但是,允许其他默认行为。
|
||
|
||
### 4.2 硬件要求 (Hardware Requirements)
|
||
|
||
在本节中,术语 **"EcuM RAM"** 指的是为 ECU Manager 模块的用途而保留的 RAM 块。
|
||
|
||
- **EcuM RAM 应在 ECU 时钟关闭时保持重要数据的内容。**
|
||
- 理由:此需求是实现 7.5 节 SLEEP 中所需的睡眠状态所必需的。
|
||
- **EcuM RAM 应提供一个非初始化区域**,该区域在复位周期内保持内容。
|
||
- **EcuM RAM 的非初始化区域**(参见 EcuM2869)**应仅在上电事件(clamp 30)时初始化。**
|
||
- 系统设计者负责为 ECU RAM 的非初始化区域建立初始化策略。
|
||
|
||
### 4.3 适用汽车域 (Applicability to car domains)
|
||
|
||
ECU Manager 模块适用于所有汽车域。
|
||
|
||
---
|
||
|
||
## 5 与其他模块的依赖关系 (Dependencies to other modules)
|
||
|
||
以下各节概述了与其他模块的重要关系。 它们还包含这些模块必须满足的一些需求,以便与 ECU Manager 模块正确协作。
|
||
|
||
如果将数据指针传递给 BSW 模块,则地址需要指向内存空间共享部分中的位置。
|
||
|
||
### 5.1 SPAL 模块 (SPAL Modules)
|
||
|
||
#### 5.1.1 MCU 驱动 (MCU Driver)
|
||
|
||
MCU 驱动是由 ECU Manager 模块初始化的第一个基础软件模块。 但是,当 `MCU_Init` 返回时(参见 SWS_EcuM_02858),MCU 模块和 MCU 驱动模块不一定完全初始化。 可能需要其他 MCU 模块特定的步骤来完成初始化。 ECU Manager 模块提供两个 callout,可在其中放置此附加代码。 有关详细信息,请参见 7.3.2 节"StartPreOS 序列中的活动"。
|
||
|
||
#### 5.1.2 驱动依赖关系和初始化顺序 (Driver Dependencies and Initialization Order)
|
||
|
||
BSW 驱动可能彼此依赖。 一个典型的例子是看门狗驱动,它需要 SPI 驱动来访问外部看门狗。 这意味着,一方面,驱动可以堆叠(与 ECU Manager 模块无关),另一方面,被调用的模块必须在调用模块初始化之前初始化。
|
||
|
||
系统设计者负责在配置时定义初始化顺序,在 `EcuMDriverInitListZero`(参见 ECUC_EcuM_00114)、`EcuMDriverInitListOne`(参见 ECUC_EcuM_00111)、`EcuMDriverRestartList`(参见 ECUC_EcuM_00115)和 `EcuMDriverInitListBswM`(参见 ECUC_EcuM_00226)中定义。
|
||
|
||
### 5.2 具有唤醒能力的外设 (Peripherals with Wakeup Capability)
|
||
|
||
唤醒源必须由驱动处理和封装。
|
||
|
||
这些驱动必须遵循本文档中介绍的协议和需求,以确保无缝集成到 AUTOSAR BSW 中。 基本上,协议如下:
|
||
|
||
驱动必须调用 `EcuM_SetWakeupEvent`(参见 SWS_EcuM_02826)以通知 ECU Manager 模块已检测到挂起的唤醒事件。 驱动不仅在睡眠阶段 ECU 等待唤醒事件时调用 `EcuM_SetWakeupEvent`,而且在驱动初始化阶段和 `EcuM_MainFunction` 运行期间的正常操作期间调用。
|
||
|
||
驱动必须提供一个显式函数以将唤醒源置于睡眠状态。 此函数应将唤醒源置于节能和惰性操作模式中,并重新装备唤醒通知机制。
|
||
|
||
如果唤醒源能够产生杂散事件<sup>1</sup>,则:
|
||
|
||
- 驱动,或
|
||
- 使用驱动的软件栈,或
|
||
- 另一个适当的 BSW 模块
|
||
|
||
必须为唤醒事件提供验证 callout 或调用 ECU Manager 模块的验证函数。 如果不需要验证,则此需求不适用于相应的唤醒源。
|
||
|
||
> <sup>1</sup> 杂散唤醒事件可能由 EMV 尖峰、唤醒线路上的弹跳效应等引起。
|
||
|
||
### 5.3 操作系统 (Operating System)
|
||
|
||
ECU Manager 模块启动 AUTOSAR OS 并关闭它。 ECU Manager 模块定义了协议,说明 OS 启动之前如何处理控制以及 OS 关闭之后如何处理控制。
|
||
|
||
### 5.4 BSW Scheduler
|
||
|
||
ECU Manager 模块初始化 BSW Scheduler,ECU Manager 模块还包含 `EcuM_MainFunction`(参见 SWS_EcuM_02837),该函数被调度以定期评估唤醒请求并更新报警时钟。
|
||
|
||
### 5.5 BSW 模式管理器 (BSW Mode Manager)
|
||
|
||
ECU 状态通常实现为 AUTOSAR 模式,BSW 模式管理器负责监视 ECU 中的变化并相应地影响 ECU 状态机的相应更改。 有关 AUTOSAR 模式管理的讨论,请参见虚拟功能总线的规范 [16],有关 ECU 状态机实现细节和有关如何配置 BSW 模式管理器以实现 ECU 状态机的指南,请参见模式管理指南 [23]。
|
||
|
||
BSW 模式管理器只能在模式管理可操作之后(即在 SchM 初始化之后直到 SchM 被反初始化或停止)才能管理 ECU 状态机。 当 BSW 模式管理器不可操作时,ECU Manager 模块接管 ECU 的控制。
|
||
|
||
因此,ECU Manager 模块在 ECU 启动后立即接管控制,并在初始化 SchM 和 BswM 之后将控制权下放给 BSW 模式管理器。
|
||
|
||
BswM 将 ECU 的控制权传递回 ECU Manager 模块以锁定操作系统并处理唤醒事件。
|
||
|
||
BswM 还会在关闭 OS 之前立即将控制权传递回 ECU Manager 模块。
|
||
|
||
验证唤醒源时,ECU Manager 模块通过模式切换请求将唤醒源状态更改指示给 BswM。
|
||
|
||
### 5.6 软件组件 (Software Components)
|
||
|
||
ECU Manager 模块处理以下 ECU 全局属性:
|
||
|
||
- 关闭目标。
|
||
|
||
本规范假定 SW-C 通过 AUTOSAR 端口设置这些属性,通常由 SW-C 的某些 ECU 特定部分设置。 ECU Manager 不阻止 SW-C 覆盖由 SW-C 设置的设置。 必须在更高级别定义策略。
|
||
|
||
以下措施可能有助于解决此问题:
|
||
|
||
- SW-C 模板可能包含一个字段以指示 SW-C 是否设置关闭目标。
|
||
- 生成工具可能只允许访问关闭目标的一个 SW-C 的配置。
|
||
|
||
### 5.7 文件结构 (File Structure)
|
||
|
||
#### 5.7.1 代码文件结构 (Code file structure)
|
||
|
||
本规范未完全定义代码文件结构。
|
||
|
||
**SWS_EcuM_02990** — ECU Manager 模块实现应提供一个单一的 `EcuM_Callout_Stubs.c` 文件,其中包含此实现中实现的 callout 的存根(有关可能实现的 callout 列表,请参见 8.6 节)。 ()
|
||
|
||
`EcuM_Callout_Stubs.c` 是否可以手动编辑或仅由其他生成的文件组成取决于实现。
|
||
|
||
#### 5.7.2 头文件结构 (Header file structure)
|
||
|
||
有关与其他模块的依赖关系,另请参见 8.7 节"预期接口"。
|
||
|
||
---
|
||
|
||
## 6 需求追踪 (Requirements traceability) — 摘要
|
||
|
||
下表列出了 EcuM 规范中的关键需求 ID 及其所满足的 SRS 需求。 完整的需求追踪表请参见原始 PDF 文档。
|
||
|
||
| 需求 ID | 描述 | 由以下 SWS 需求满足 |
|
||
|--------|------|---------------------|
|
||
| SRS_BSW_00005 | MCAL 模块可能没有硬编码的水平接口 | SWS_EcuM_NA_0 |
|
||
| SRS_BSW_00101 | 基础软件模块应能在单独的初始化函数中初始化变量和硬件 | SWS_EcuM_02811 |
|
||
| SRS_BSW_00172 | 在基础软件模块内构建的调度策略应与系统中使用的策略兼容 | SWS_EcuM_02836 |
|
||
| SRS_BSW_00301 | 所有 AUTOSAR 基础软件模块应仅导入必要的信息 | SWS_EcuM_02810 |
|
||
| SRS_BSW_00323 | 所有 AUTOSAR 基础软件模块应检查传递的 API 参数的有效性 | SWS_EcuM_03009 |
|
||
| SRS_BSW_00327 | 错误值命名约定 | SWS_EcuM_04032 |
|
||
| SRS_BSW_00333 | 对于每个回调函数,应指定其是否从中断上下文调用 | SWS_EcuM_02171, SWS_EcuM_02345 |
|
||
| SRS_BSW_00337 | 开发错误的分类 | SWS_EcuM_04032 |
|
||
| SRS_BSW_00339 | 报告生产相关错误状态 | SWS_EcuM_02987 |
|
||
| SRS_BSW_00350 | 所有 AUTOSAR 基础软件模块应允许... | SWS_EcuM_04032 |
|
||
| SRS_ModeMgm_09136 | EcuM 应是所有唤醒事件的接收者 | SWS_EcuM_02826 |
|
||
| SRS_ModeMgm_09100 | 唤醒源的选择应可配置 | SWS_EcuM_02816, ... |
|
||
| SRS_ModeMgm_09101 | 应提供查询复位原因的 API | SWS_EcuM_02853, ... |
|
||
| SRS_ModeMgm_09119 | 应提供多种睡眠模式 | SWS_EcuM_02796, ... |
|
||
| SRS_ModeMgm_09127 | EcuM 应在关闭过程中适当地反初始化基础软件模块 | SWS_EcuM_02849 |
|
||
| SRS_ModeMgm_09128 | 应支持多个关闭目标 | SWS_EcuM_02596, ... |
|
||
| SRS_ModeMgm_09136 | EcuM 应是所有唤醒事件的接收者 | SWS_EcuM_02826 |
|
||
| SRS_ModeMgm_09165 | EcuM 应提供服务以请求和释放 POST-RUN 状态 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09166 | EcuM 应评估保持 POST-RUN 状态的条件 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09234 | EcuM 应处理 BSW 模块的初始化 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09235 | EcuM 应提供两个用于关闭 ECU 的目标 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09236 | 应有一个区分不同核的 EcuM_Init 函数实例 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09237 | RTE_Start 应该在每个核上调用 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09238 | 状态变化应为 ECU 全局的 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09239 | 为了关闭,ShutdownAllCores 应在同步所有核后在主核上调用 | SWS_EcuM_xxxxx |
|
||
| SRS_ModeMgm_09254 | 唤醒事件的验证和处理应在本地完成 | SWS_EcuM_xxxxx |
|
||
|
||
> 完整的需求追踪表见原始 PDF 文档。
|
||
|
||
---
|
||
|
||
## 7 功能规范 (Functional Specification) — 摘要
|
||
|
||
> **翻译说明**:本章详细描述了 EcuM 的功能行为。 由于内容非常详尽(包含 100+ 个 SWS_EcuM_xxxxx 需求),本节仅概述关键概念。 完整的功能规范(包括所有状态机描述、序列图、活动定义等)请参见原始 PDF 文档。
|
||
|
||
### 7.1 ECU Manager 模块的阶段 (Phases of the ECU Manager Module)
|
||
|
||
EcuM 模块具有以下阶段:
|
||
|
||
- **STARTUP(启动)**:初始化所有 BSW 模块,包括 OS 和 RTE。
|
||
- **UP(运行)**:ECU 完全运行,所有 BSW 模块已初始化,应用程序可以运行。
|
||
- **SHUTDOWN(关闭)**:执行关闭操作,反初始化 BSW 模块。
|
||
- **SLEEP(睡眠)**:进入低功耗状态,可以是 SLEEP(可唤醒)或 OFF(不可唤醒)。
|
||
- **OFF(关闭)**:ECU 断电。
|
||
|
||
#### 7.1.1 STARTUP 阶段 (STARTUP Phase)
|
||
|
||
STARTUP 阶段包括以下子阶段:
|
||
|
||
- 7.1.1.1 STARTUP I — 在 OS 启动之前
|
||
- 7.1.1.2 STARTUP II — 在 OS 启动之后,但在 RTE 启动之前
|
||
|
||
#### 7.1.2 UP 阶段 (UP Phase)
|
||
|
||
UP 阶段是 ECU 完全运行的状态。 在此阶段:
|
||
|
||
- BswM 负责处理模式请求
|
||
- EcuM 仲裁 RUN 和 POST_RUN 请求
|
||
- EcuM 处理唤醒验证
|
||
|
||
#### 7.1.3 SHUTDOWN 阶段 (SHUTDOWN Phase)
|
||
|
||
SHUTDOWN 阶段包括以下子阶段:
|
||
|
||
- 7.1.3.1 OffPreOS — 在 OS 停止之前
|
||
- 7.1.3.2 OffPostOS — 在 OS 停止之后
|
||
|
||
#### 7.1.4 SLEEP 阶段 (SLEEP Phase)
|
||
|
||
SLEEP 阶段包括以下子阶段:
|
||
|
||
- 7.1.4.1 GoSleep — 进入睡眠
|
||
- 7.1.4.2 Halt — 停止(处理器停止)
|
||
- 7.1.4.3 Poll — 轮询(处理器仍运行但等待唤醒)
|
||
- 7.1.4.4 WakeupRestart — 唤醒重启
|
||
|
||
#### 7.1.5 OFF 阶段 (OFF Phase)
|
||
|
||
OFF 阶段是 ECU 完全断电的状态。
|
||
|
||
### 7.2 ECU Manager 的结构描述 (Structural Description of the ECU Manager)
|
||
|
||
#### 7.2.1 标准化的 AUTOSAR 软件模块 (Standardized AUTOSAR Software Modules)
|
||
|
||
ECU Manager 模块协调以下标准化 AUTOSAR 软件模块:
|
||
|
||
- **DEM** (Diagnostic Event Manager)
|
||
- **DET** (Default Error Tracer)
|
||
- **MCU** (Microcontroller Unit Driver)
|
||
- **OS** (Operating System)
|
||
- **RTE** (Runtime Environment)
|
||
- **SchM** (BSW Scheduler)
|
||
- **WdgM** (Watchdog Manager)
|
||
- **ComM** (Communication Manager)
|
||
- **BswM** (BSW Mode Manager)
|
||
|
||
#### 7.2.2 软件组件 (Software Components)
|
||
|
||
EcuM 与 SW-C 通过 AUTOSAR 端口进行通信,SW-C 可以:
|
||
|
||
- 请求 RUN 状态
|
||
- 释放 RUN 状态
|
||
- 请求 POST_RUN 状态
|
||
- 释放 POST_RUN 状态
|
||
- 设置关闭目标
|
||
- 设置 boot 目标
|
||
- 设置报警时钟
|
||
|
||
### 7.3 STARTUP 阶段 (STARTUP Phase)
|
||
|
||
#### 7.3.1 EcuM_Init 之前的活动 (Activities before EcuM_Init)
|
||
|
||
在 `EcuM_Init` 之前,只有 MCU 驱动已初始化。 启动代码调用 `EcuM_Init`。
|
||
|
||
#### 7.3.2 StartPreOS 序列中的活动 (Activities in StartPreOS Sequence)
|
||
|
||
`StartPreOS` 序列由两个 callout 组成:
|
||
|
||
- `EcuM_AL_DriverInitOne` — 在 `MCU_Init` 之后立即调用
|
||
- `EcuM_AL_DriverInitZero` — 在 `EcuM_AL_DriverInitOne` 之后调用
|
||
|
||
这些 callout 用于初始化 `EcuMDriverInitListOne` 和 `EcuMDriverInitListZero` 中配置的驱动程序。
|
||
|
||
#### 7.3.3 StartPostOS 序列中的活动 (Activities in the StartPostOS Sequence)
|
||
|
||
`StartPostOS` 序列由以下步骤组成:
|
||
|
||
1. 调用 `SchM_Init`
|
||
2. 调用 `BswM_Init`
|
||
3. 调用 `SchM_Start`
|
||
4. 调用 `Rte_Start`
|
||
5. 调用 `EcuM_AL_DriverInitListBswM`(EcuM Flex)
|
||
6. 启动应用任务
|
||
|
||
#### 7.3.4 检查配置一致性 (Checking Configuration Consistency)
|
||
|
||
EcuM 检查其配置的一致性。 配置错误由 DET 报告。
|
||
|
||
#### 7.3.5 驱动初始化 (Driver Initialization)
|
||
|
||
驱动程序按以下顺序初始化:
|
||
|
||
1. `EcuMDriverInitListZero` — 在 OS 之前
|
||
2. `EcuMDriverInitListOne` — 在 OS 之后但在 BswM 之前
|
||
3. `EcuMDriverInitListBswM` — 在 BswM 中(仅 EcuM Flex)
|
||
4. `EcuMDriverRestartList` — 在分区重启时
|
||
|
||
#### 7.3.6 DET 初始化 (DET Initialization)
|
||
|
||
DET 在 `EcuM_Init` 期间初始化。
|
||
|
||
#### 7.3.7 BSW 初始化 (BSW Initialization)
|
||
|
||
BSW 模块由 EcuM 通过驱动初始化列表进行初始化。
|
||
|
||
### 7.4 SHUTDOWN 阶段 (SHUTDOWN Phase)
|
||
|
||
#### 7.4.1 OffPreOS 序列中的活动 (Activities in the OffPreOS Sequence)
|
||
|
||
`OffPreOS` 序列:
|
||
|
||
1. BswM 接收关闭请求
|
||
2. 停止 RTE
|
||
3. 反初始化 BSW 模块
|
||
4. 停止 OS
|
||
|
||
#### 7.4.2 OffPostOS 序列中的活动 (Activities in the OffPostOS Sequence)
|
||
|
||
`OffPostOS` 序列在 OS 停止后执行最终关闭操作。
|
||
|
||
### 7.5 SLEEP 阶段 (SLEEP Phase)
|
||
|
||
#### 7.5.1 GoSleep 序列中的活动 (Activities in the GoSleep Sequence)
|
||
|
||
`GoSleep` 序列将 ECU 准备进入睡眠。
|
||
|
||
#### 7.5.2 Halt 序列中的活动 (Activities in the Halt Sequence)
|
||
|
||
`Halt` 序列使处理器停止,等待唤醒事件。
|
||
|
||
#### 7.5.3 Poll 序列中的活动 (Activities in the Poll Sequence)
|
||
|
||
`Poll` 序列使处理器保持运行但等待唤醒事件。
|
||
|
||
#### 7.5.4 离开 Halt 或 Poll (Leaving Halt or Poll)
|
||
|
||
当检测到唤醒事件时,处理器离开 Halt 或 Poll 状态。
|
||
|
||
#### 7.5.5 WakeupRestart 序列中的活动 (Activities in the WakeupRestart Sequence)
|
||
|
||
`WakeupRestart` 序列在唤醒事件后重新启动 ECU。
|
||
|
||
### 7.6 UP 阶段 (UP Phase)
|
||
|
||
#### 7.6.1 报警时钟处理 (Alarm Clock Handling)
|
||
|
||
EcuM 提供报警时钟服务,允许 SW-C 设置、取消和读取报警。
|
||
|
||
#### 7.6.2 唤醒源状态处理 (Wakeup Source State Handling)
|
||
|
||
EcuM 跟踪所有唤醒源的状态。
|
||
|
||
#### 7.6.3 唤醒状态的内部表示 (Internal Representation of Wakeup States)
|
||
|
||
唤醒状态包括:
|
||
|
||
- `ECUM_WKSTATUS_NONE` — 无唤醒
|
||
- `ECUM_WKSTATUS_PENDING` — 唤醒挂起
|
||
- `ECUM_WKSTATUS_VALIDATED` — 唤醒已验证
|
||
- `ECUM_WKSTATUS_EXPIRED` — 唤醒已过期
|
||
|
||
#### 7.6.4 WakeupValidation 序列中的活动 (Activities in the WakeupValidation Sequence)
|
||
|
||
`WakeupValidation` 序列验证唤醒事件以区分真实唤醒和杂散唤醒。
|
||
|
||
#### 7.6.5 唤醒验证的需求 (Requirements for Wakeup Validation)
|
||
|
||
EcuM 应在收到唤醒指示后启动超时(`T_wake_up_timeout`),如果在超时到期前收到有效消息,则验证唤醒事件。
|
||
|
||
#### 7.6.6 唤醒源和复位原因 (Wakeup Sources and Reset Reason)
|
||
|
||
EcuM 维护唤醒原因和复位原因的记录。
|
||
|
||
#### 7.6.7 具有集成电源控制的唤醒源 (Wakeup Sources with Integrated Power Control)
|
||
|
||
某些唤醒源具有集成的电源控制。
|
||
|
||
### 7.7 关闭目标 (Shutdown Targets)
|
||
|
||
#### 7.7.1 睡眠 (Sleep)
|
||
|
||
关闭到 SLEEP 状态使 ECU 进入低功耗但可唤醒的状态。
|
||
|
||
#### 7.7.2 复位 (Reset)
|
||
|
||
关闭到 RESET 状态会复位 ECU。
|
||
|
||
### 7.8 报警时钟 (Alarm Clock)
|
||
|
||
#### 7.8.1 报警时钟和用户 (Alarm Clocks and Users)
|
||
|
||
报警时钟可以被 SW-C 用于调度未来的唤醒事件。
|
||
|
||
#### 7.8.2 EcuM 时钟时间 (EcuM Clock Time)
|
||
|
||
EcuM 时钟时间基于相对时间,自 ECU 上电以来。
|
||
|
||
### 7.9 多核 (MultiCore)
|
||
|
||
#### 7.9.1 主核 (Master Core)
|
||
|
||
主核负责协调其他核。
|
||
|
||
#### 7.9.2 从核 (Slave Core)
|
||
|
||
从核由主核启动。
|
||
|
||
#### 7.9.3 主核-从核信令 (Master Core – Slave Core Signalling)
|
||
|
||
主核和从核通过共享内存或硬件信号进行通信。
|
||
|
||
#### 7.9.4 UP 阶段 (UP Phase)
|
||
|
||
在多核 UP 阶段,所有核都在运行。
|
||
|
||
#### 7.9.5 STARTUP 阶段 (STARTUP Phase)
|
||
|
||
多核 STARTUP 阶段从主核开始,然后从核由主核启动。
|
||
|
||
#### 7.9.6 SHUTDOWN 阶段 (SHUTDOWN Phase)
|
||
|
||
多核 SHUTDOWN 阶段从主核开始,从核在主核之前关闭。
|
||
|
||
#### 7.9.7 SLEEP 阶段 (SLEEP Phase)
|
||
|
||
多核 SLEEP 阶段协调所有核进入睡眠状态。
|
||
|
||
#### 7.9.8 Runnables 和入口点 (Runnables and Entry points)
|
||
|
||
多核环境中的可运行实体和入口点的处理。
|
||
|
||
### 7.10 EcuM 模式处理 (EcuM Mode Handling)
|
||
|
||
EcuM 不包含自己的状态机,但通过 BswM 接收状态通知并将其传播到 RTE。
|
||
|
||
### 7.11 高级主题 (Advanced Topics)
|
||
|
||
#### 7.11.1 与引导加载程序的关系 (Relation to Bootloader)
|
||
|
||
EcuM 与引导加载程序的交互。
|
||
|
||
#### 7.11.2 与复杂驱动的关系 (Relation to Complex Drivers)
|
||
|
||
复杂驱动在 EcuM 的关闭序列中被反初始化。
|
||
|
||
#### 7.11.3 在启动和关闭期间处理错误 (Handling Errors during Startup and Shutdown)
|
||
|
||
启动和关闭期间错误由 DET 和 DEM 报告。
|
||
|
||
### 7.12 错误 (Errors)
|
||
|
||
#### 7.12.1 开发错误 (Development Errors)
|
||
|
||
#### 7.12.2 运行时错误 (Runtime Errors)
|
||
|
||
#### 7.12.3 瞬态故障 (Transient Faults)
|
||
|
||
#### 7.12.4 生产错误 (Production Errors)
|
||
|
||
#### 7.12.5 扩展的生产错误 (Extended Production Errors)
|
||
|
||
### 7.13 错误检测 (Error detection)
|
||
|
||
### 7.14 错误通知 (Error notification)
|
||
|
||
> 详细功能规范(包括所有 SWS_EcuM_xxxxx 需求)请参见原始 PDF 文档的第 7 章。
|
||
|
||
---
|
||
|
||
## 8 API 规范 (API specification) — 摘要
|
||
|
||
> **翻译说明**:本章详细描述了 EcuM 的所有 API 函数。 由于内容非常详尽(包含 50+ 个 API),本节仅列出关键 API 的函数签名和简要描述。 完整 API 规范(包括所有参数、返回值、错误码、调用顺序、回调函数、Callout 函数等)请参见原始 PDF 文档的第 8 章。
|
||
|
||
### 8.1 导入类型 (Imported types)
|
||
|
||
关键导入类型包括:
|
||
- `Std_ReturnType` (Std)
|
||
- `Std_VersionInfoType` (Std)
|
||
- `EcuM_WakeupSourceType` (EcuM)
|
||
- `EcuM_WakeupStatusType` (EcuM)
|
||
- `EcuM_StateType` (EcuM, 仅供内部使用)
|
||
- `EcuM_RunStatusType` (EcuM)
|
||
- `EcuM_BootTargetType` (EcuM)
|
||
|
||
### 8.2 类型定义 (Type definitions)
|
||
|
||
#### 8.2.1 EcuM_ConfigType
|
||
|
||
```c
|
||
typedef struct {
|
||
/* Configuration data structure */
|
||
} EcuM_ConfigType;
|
||
```
|
||
|
||
#### 8.2.2 EcuM_RunStatusType
|
||
|
||
```c
|
||
typedef enum {
|
||
ECUM_RUNSTATUS_UNKNOWN = 0,
|
||
ECUM_RUNSTATUS_REQUESTED,
|
||
ECUM_RUNSTATUS_RELEASED
|
||
} EcuM_RunStatusType;
|
||
```
|
||
|
||
#### 8.2.3 EcuM_UserType
|
||
|
||
```c
|
||
typedef uint8 EcuM_UserType;
|
||
```
|
||
|
||
#### 8.2.4 EcuM_WakeupSourceType
|
||
|
||
```c
|
||
typedef uint16 EcuM_WakeupSourceType;
|
||
```
|
||
|
||
#### 8.2.5 EcuM_WakeupStatusType
|
||
|
||
```c
|
||
typedef enum {
|
||
ECUM_WKSTATUS_NONE = 0,
|
||
ECUM_WKSTATUS_PENDING,
|
||
ECUM_WKSTATUS_VALIDATED,
|
||
ECUM_WKSTATUS_EXPIRED
|
||
} EcuM_WakeupStatusType;
|
||
```
|
||
|
||
#### 8.2.6 EcuM_BootTargetType
|
||
|
||
```c
|
||
typedef enum {
|
||
ECUM_BOOT_TARGET_DEFAULT = 0,
|
||
ECUM_BOOT_TARGET_BOOTLOADER,
|
||
ECUM_BOOT_TARGET_APPLICATION
|
||
} EcuM_BootTargetType;
|
||
```
|
||
|
||
#### 8.2.7 EcuM_ResetType
|
||
|
||
```c
|
||
typedef enum {
|
||
ECUM_RESET_NONE,
|
||
ECUM_RESET_HARD,
|
||
ECUM_RESET_SOFT
|
||
} EcuM_ResetType;
|
||
```
|
||
|
||
#### 8.2.8 EcuM_ShutdownCauseType
|
||
|
||
```c
|
||
typedef uint8 EcuM_ShutdownCauseType;
|
||
```
|
||
|
||
#### 8.2.9 EcuM_ShutdownModeType
|
||
|
||
```c
|
||
typedef enum {
|
||
ECUM_SHUTDOWN_MODE_SLEEP = 0,
|
||
ECUM_SHUTDOWN_MODE_RESET,
|
||
ECUM_SHUTDOWN_MODE_OFF
|
||
} EcuM_ShutdownModeType;
|
||
```
|
||
|
||
#### 8.2.10 EcuM_TimeType
|
||
|
||
```c
|
||
typedef uint32 EcuM_TimeType;
|
||
```
|
||
|
||
#### 8.2.11 EcuM_ShutdownTargetType
|
||
|
||
```c
|
||
typedef enum {
|
||
ECUM_SHUTDOWN_TARGET_SLEEP = 0,
|
||
ECUM_SHUTDOWN_TARGET_RESET,
|
||
ECUM_SHUTDOWN_TARGET_OFF,
|
||
ECUM_SHUTDOWN_TARGET_ECUM_STATE
|
||
} EcuM_ShutdownTargetType;
|
||
```
|
||
|
||
### 8.3 函数定义 (Function Definitions)
|
||
|
||
#### 8.3.1 General
|
||
|
||
#### 8.3.2 Initialization and Shutdown Sequences
|
||
|
||
```c
|
||
void EcuM_Init(const EcuM_ConfigType* ConfigPtr);
|
||
```
|
||
|
||
- **描述**:初始化 EcuM 模块。
|
||
|
||
```c
|
||
void EcuM_StartupTwo(void);
|
||
```
|
||
|
||
- **描述**:从 EcuM 启动状态切换到运行状态(UP 阶段)。
|
||
|
||
```c
|
||
void EcuM_GoDown(EcuM_UserType User);
|
||
```
|
||
|
||
- **描述**:请求关闭 ECU。
|
||
|
||
```c
|
||
void EcuM_GoHalt(void);
|
||
```
|
||
|
||
- **描述**:请求进入 HALT 睡眠状态。
|
||
|
||
```c
|
||
void EcuM_GoPoll(void);
|
||
```
|
||
|
||
- **描述**:请求进入 POLL 睡眠状态。
|
||
|
||
```c
|
||
void EcuM_Shutdown(void);
|
||
```
|
||
|
||
- **描述**:执行实际的 ECU 关闭。
|
||
|
||
#### 8.3.3 State Management
|
||
|
||
```c
|
||
Std_ReturnType EcuM_RequestRUN(EcuM_UserType User);
|
||
```
|
||
|
||
- **描述**:请求 RUN 状态。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_ReleaseRUN(EcuM_UserType User);
|
||
```
|
||
|
||
- **描述**:释放 RUN 状态请求。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_RequestPOSTRUN(EcuM_UserType User);
|
||
```
|
||
|
||
- **描述**:请求 POST_RUN 状态。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_ReleasePOSTRUN(EcuM_UserType User);
|
||
```
|
||
|
||
- **描述**:释放 POST_RUN 状态请求。
|
||
|
||
```c
|
||
EcuM_RunStatusType EcuM_GetState(void);
|
||
```
|
||
|
||
- **描述**:获取当前 RUN 状态。
|
||
|
||
```c
|
||
void EcuM_SetState(EcuM_StateType State);
|
||
```
|
||
|
||
- **描述**:设置 EcuM 的当前状态(由 BswM 调用)。
|
||
|
||
#### 8.3.4 Shutdown Management
|
||
|
||
```c
|
||
Std_ReturnType EcuM_SelectShutdownTarget(EcuM_ShutdownTargetType ShutdownTarget, EcuM_ShutdownModeType SleepMode);
|
||
```
|
||
|
||
- **描述**:选择关闭目标。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_GetShutdownTarget(EcuM_ShutdownTargetType* ShutdownTarget, EcuM_ShutdownModeType* SleepMode);
|
||
```
|
||
|
||
- **描述**:获取当前关闭目标。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_GetLastShutdownTarget(EcuM_ShutdownTargetType* ShutdownTarget, EcuM_ShutdownModeType* SleepMode);
|
||
```
|
||
|
||
- **描述**:获取上次关闭的目标。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_SelectBootTarget(EcuM_BootTargetType BootTarget);
|
||
```
|
||
|
||
- **描述**:选择引导目标(例如引导加载程序)。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_GetBootTarget(EcuM_BootTargetType* BootTarget);
|
||
```
|
||
|
||
- **描述**:获取当前引导目标。
|
||
|
||
```c
|
||
EcuM_ResetType EcuM_GetMostRecentReset(void);
|
||
```
|
||
|
||
- **描述**:获取最近复位的原因。
|
||
|
||
```c
|
||
EcuM_ShutdownCauseType EcuM_GetShutdownCause(void);
|
||
```
|
||
|
||
- **描述**:获取上次关闭的原因。
|
||
|
||
```c
|
||
void EcuM_GetMostRecentShutdown(EcuM_TimeType* Time, EcuM_ShutdownCauseType* Cause);
|
||
```
|
||
|
||
- **描述**:获取最近关闭的时间和原因。
|
||
|
||
#### 8.3.5 Wakeup Handling
|
||
|
||
```c
|
||
void EcuM_SetWakeupEvent(EcuM_WakeupSourceType sources);
|
||
```
|
||
|
||
- **描述**:由驱动调用以通知 EcuM 唤醒事件。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_ValidateWakeupEvent(EcuM_WakeupSourceType sources);
|
||
```
|
||
|
||
- **描述**:验证唤醒事件。
|
||
|
||
```c
|
||
void EcuM_ClearWakeupEvent(EcuM_WakeupSourceType sources);
|
||
```
|
||
|
||
- **描述**:清除唤醒事件。
|
||
|
||
```c
|
||
EcuM_WakeupStatusType EcuM_GetStatusOfWakeupSource(EcuM_WakeupSourceType sources);
|
||
```
|
||
|
||
- **描述**:获取唤醒源的状态。
|
||
|
||
```c
|
||
void EcuM_DisableWakeupSources(EcuM_WakeupSourceType sources);
|
||
```
|
||
|
||
- **描述**:禁用唤醒源。
|
||
|
||
```c
|
||
void EcuM_EnableWakeupSources(EcuM_WakeupSourceType sources);
|
||
```
|
||
|
||
- **描述**:启用唤醒源。
|
||
|
||
#### 8.3.6 Alarm Clock
|
||
|
||
```c
|
||
Std_ReturnType EcuM_SetRelAlarm(EcuM_UserType User, EcuM_TimeType offset, EcuM_TimeType cycle);
|
||
```
|
||
|
||
- **描述**:设置相对报警。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_SetAbsAlarm(EcuM_UserType User, EcuM_TimeType start, EcuM_TimeType cycle);
|
||
```
|
||
|
||
- **描述**:设置绝对报警。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_CancelAlarm(EcuM_UserType User);
|
||
```
|
||
|
||
- **描述**:取消报警。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_GetAlarmClockStatus(EcuM_UserType User, EcuM_TimeType* Time);
|
||
```
|
||
|
||
- **描述**:获取报警时钟状态。
|
||
|
||
```c
|
||
Std_ReturnType EcuM_SetClock(EcuM_TimeType time);
|
||
```
|
||
|
||
- **描述**:设置 EcuM 时钟。
|
||
|
||
```c
|
||
void EcuM_GetCurrentTime(EcuM_TimeType* time);
|
||
```
|
||
|
||
- **描述**:获取当前 EcuM 时钟时间。
|
||
|
||
#### 8.3.7 Miscellaneous
|
||
|
||
```c
|
||
void EcuM_GetVersionInfo(Std_VersionInfoType* VersionInfo);
|
||
```
|
||
|
||
- **描述**:返回 EcuM 模块的版本信息。
|
||
|
||
```c
|
||
void EcuM_BswMIndication(EcuM_StateType State);
|
||
```
|
||
|
||
- **描述**:由 BswM 调用以通知 EcuM 状态。
|
||
|
||
### 8.4 调度函数 (Scheduled Functions)
|
||
|
||
#### 8.4.1 EcuM_MainFunction
|
||
|
||
```c
|
||
void EcuM_MainFunction(void);
|
||
```
|
||
|
||
- **描述**:EcuM 的主函数,由 BSW Scheduler 周期调用。 它处理:
|
||
- 唤醒源验证
|
||
- 报警时钟
|
||
- 挂起请求的评估
|
||
|
||
### 8.5 回调定义 (Callback Definitions)
|
||
|
||
#### 8.5.1 来自唤醒源的回调 (Callbacks from Wakeup Sources)
|
||
|
||
- `EcuM_CheckWakeup` — 由 EcuM 调用以检查唤醒
|
||
- `EcuM_EnableWakeupSources` — 由 EcuM 调用以启用唤醒源
|
||
- `EcuM_DisableWakeupSources` — 由 EcuM 调用以禁用唤醒源
|
||
|
||
### 8.6 Callout 定义 (Callout Definitions)
|
||
|
||
#### 8.6.1 通用 Callout (Generic Callouts)
|
||
|
||
- `EcuM_Callout_Stubs.c` — 包含所有 callout 的存根
|
||
|
||
#### 8.6.2 STARTUP 阶段的 Callout (Callouts from the STARTUP Phase)
|
||
|
||
- `EcuM_AL_DriverInitZero` — 启动序列中调用的第一个 callout
|
||
- `EcuM_AL_DriverInitOne` — 在 OS 之前调用的 callout
|
||
- `EcuM_OnEnterRun` — 进入 RUN 状态时调用
|
||
- `EcuM_OnExitRun` — 离开 RUN 状态时调用
|
||
- `EcuM_OnExitPostRun` — 离开 POST_RUN 状态时调用
|
||
- `EcuM_AL_DriverInitListBswM` — 在 BswM 上下文中初始化驱动
|
||
|
||
#### 8.6.3 SHUTDOWN 阶段的 Callout (Callouts from the SHUTDOWN Phase)
|
||
|
||
- `EcuM_OnGoOffOne` — 第一次关闭序列
|
||
- `EcuM_OnGoOffTwo` — 第二次关闭序列
|
||
|
||
#### 8.6.4 SLEEP 阶段的 Callout (Callouts from the SLEEP Phase)
|
||
|
||
- `EcuM_GenerateRamHash` — 生成 RAM hash
|
||
- `EcuM_CheckRamHash` — 检查 RAM hash
|
||
- `EcuM_GoHaltPoll` — 进入 Halt 或 Poll 状态
|
||
- `EcuM_StartWakeupSources` — 启动唤醒源
|
||
- `EcuM_StopWakeupSources` — 停止唤醒源
|
||
- `EcuM_SleepActivity` — 睡眠活动
|
||
- `EcuM_WakeupRestart` — 唤醒重启
|
||
- `EcuM_EndWakeupSources` — 结束唤醒源
|
||
|
||
#### 8.6.5 UP 阶段的 Callout (Callouts from the UP Phase)
|
||
|
||
- `EcuM_AlarmClock` — 报警时钟 callout
|
||
- `EcuM_SetWakeupSources` — 设置唤醒源
|
||
- `EcuM_ValidateAllWakeupEvents` — 验证所有唤醒事件
|
||
|
||
### 8.7 预期接口 (Expected Interfaces)
|
||
|
||
#### 8.7.1 可选接口 (Optional Interfaces)
|
||
|
||
- `CanIf_CheckWakeup`
|
||
- `FrIf_CheckWakeup`
|
||
- `LinIf_CheckWakeup`
|
||
- `EthIf_CheckWakeup`
|
||
- `CanTrcv_CheckWakeup`
|
||
- 等等
|
||
|
||
#### 8.7.2 可配置接口 (Configurable interfaces)
|
||
|
||
可配置的接口在 `EcuMDriverInitListZero`、`EcuMDriverInitListOne`、`EcuMDriverInitListBswM` 等中定义。
|
||
|
||
### 8.8 端口接口规范 (Specification of the Port Interfaces)
|
||
|
||
#### 8.8.1 EcuM_ShutdownTarget 接口的端口和端口接口 (Ports and Port Interface for EcuM_ShutdownTarget Interface)
|
||
|
||
#### 8.8.2 EcuM_BootTarget 接口的端口接口 (Port Interface for EcuM_BootTarget Interface)
|
||
|
||
#### 8.8.3 EcuM_AlarmClock 接口的端口接口 (Port Interface for EcuM_AlarmClock Interface)
|
||
|
||
#### 8.8.4 EcuM_Time 接口的端口接口 (Port Interface for EcuM_Time Interface)
|
||
|
||
#### 8.8.5 EcuM_StateRequest 接口的端口接口 (Port Interface for EcuM_StateRequest Interface)
|
||
|
||
#### 8.8.6 EcuM_CurrentMode 接口的端口接口 (Port Interface for EcuM_CurrentMode Interface)
|
||
|
||
### 8.9 API 参数检查 (API Parameter Checking)
|
||
|
||
EcuM 通过 DET 报告无效参数。 详见原始 PDF 文档。
|
||
|
||
---
|
||
|
||
## 9 序列图 (Sequence Charts) — 摘要
|
||
|
||
> 完整内容请参见原始 PDF 文档。
|
||
|
||
### 9.1 状态序列 (State Sequences)
|
||
|
||
### 9.2 唤醒序列 (Wakeup Sequences)
|
||
|
||
#### 9.2.1 GPT 唤醒序列 (GPT Wakeup Sequences)
|
||
|
||
#### 9.2.2 ICU 唤醒序列 (ICU Wakeup Sequences)
|
||
|
||
#### 9.2.3 CAN 唤醒序列 (CAN Wakeup Sequences)
|
||
|
||
#### 9.2.4 LIN 唤醒序列 (LIN Wakeup Sequences)
|
||
|
||
#### 9.2.5 FlexRay 唤醒序列 (FlexRay Wakeup Sequences)
|
||
|
||
---
|
||
|
||
## 10 配置规范 (Configuration specification) — 摘要
|
||
|
||
> 完整内容请参见原始 PDF 文档。
|
||
|
||
### 10.1 公共容器和配置参数 (Common Containers and configuration parameters)
|
||
|
||
| 编号 | 容器名称 | 描述 |
|
||
|------|---------|------|
|
||
| 10.1.1 | EcuM | 顶层容器 |
|
||
| 10.1.2 | EcuMGeneral | EcuM 通用配置 |
|
||
| 10.1.3 | EcuMConfiguration | EcuM 配置 |
|
||
| 10.1.4 | EcuMCommonConfiguration | 公共配置 |
|
||
| 10.1.5 | EcuMDefaultShutdownTarget | 默认关闭目标 |
|
||
| 10.1.6 | EcuMDriverInitListOne | 驱动初始化列表 1 |
|
||
| 10.1.7 | EcuMDriverInitListZero | 驱动初始化列表 0 |
|
||
| 10.1.8 | EcuMDriverRestartList | 驱动重启列表 |
|
||
| 10.1.9 | EcuMDriverInitItem | 驱动初始化项 |
|
||
| 10.1.10 | EcuMSleepMode | 睡眠模式 |
|
||
| 10.1.11 | EcuMWakeupSource | 唤醒源 |
|
||
|
||
### 10.2 EcuM-Flex 容器和配置参数 (EcuM-Flex Containers and configuration parameters)
|
||
|
||
| 编号 | 容器名称 | 描述 |
|
||
|------|---------|------|
|
||
| 10.2.1 | EcuMFlexGeneral | EcuM Flex 通用配置 |
|
||
| 10.2.2 | EcuMFlexConfiguration | EcuM Flex 配置 |
|
||
| 10.2.3 | EcuMAlarmClock | 报警时钟 |
|
||
| 10.2.4 | EcuMDriverInitListBswM | BswM 驱动初始化列表 |
|
||
| 10.2.5 | EcuMFlexUserConfig | Flex 用户配置 |
|
||
| 10.2.6 | EcuMGoDownAllowedUsers | 允许 GoDown 的用户 |
|
||
| 10.2.7 | EcuMResetMode | 复位模式 |
|
||
| 10.2.8 | EcuMSetClockAllowedUsers | 允许 SetClock 的用户 |
|
||
| 10.2.9 | EcuMShutdownCause | 关闭原因 |
|
||
|
||
### 10.3 已发布信息 (Published Information)
|
||
|
||
无。
|
||
|
||
---
|
||
|
||
## 11 不适用需求 (Not applicable requirements)
|
||
|
||
无。
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
本文档为 AUTOSAR CP Release 4.4.0《ECU 状态管理器规范》的中文翻译。 主要翻译内容包括:
|
||
|
||
1. **完整翻译**:
|
||
- 文档标识、变更历史
|
||
- 目录
|
||
- 第 1-5 章(引言、定义、相关文档、约束、依赖关系)
|
||
- 第 6 章需求追踪(关键映射表)
|
||
- 第 7-11 章摘要
|
||
- 第 8 章 API 规范中 30+ 个关键 API 函数签名
|
||
2. **摘要标记**:
|
||
- 第 7 章功能规范(提供阶段和子阶段概述)
|
||
- 第 9 章序列图
|
||
- 第 10 章配置规范(提供容器列表)
|
||
3. **保留内容**:
|
||
- 所有 API 标识符(如 `EcuM_Init`、`EcuM_GoDown`、`EcuM_SetState`、`EcuM_RequestRUN`)
|
||
- 模块缩写(EcuM、BswM、ComM、WdgM、NvM、SchM、Dem、Det、RTE、OS 等)
|
||
- 状态名(STARTUP、RUN、SHUTDOWN、SLEEP、POST_RUN、OFF、UP、HALT、POLL 等)
|
||
- AUTOSAR 方框符 `⌈⌋`
|
||
- 需求 ID(SWS_EcuM_xxxxx、SRS_ModeMgm_xxxxx、SRS_BSW_xxxxx)
|
||
- 文档间交叉引用
|