EcuM 是 ECU 生命周期的底层执行者,负责把 ECU 从复位入口带到 OS 和 BSW 可运行状态,并执行休眠、唤醒、下电和复位等不可逆或强时序约束操作。它解决的核心痛点不是“决定什么时候切换模式”,而是:
- 在 OS 启动前,以确定顺序初始化 MCU 驱动和基础 BSW
- 接收 BswM 已经做出的模式决策,并将其落实为睡眠、关机或复位动作
- 管理唤醒源的 Pending、Validated、Expired 状态
- 在多核系统中同步各核的 Startup、Sleep 和 Shutdown 阶段
- 通过 Callout 将电源控制、复位、低功耗和唤醒验证等硬件相关动作留给集成代码实现
Mechanism
模块边界
EcuM 负责:
- 分阶段初始化驱动和基础 BSW
- 启动 OS,并在 OS 启动后完成 Startup II
- 保存和执行 Shutdown Target
- 进入 Halt 睡眠模式
- 管理和验证唤醒事件
- 触发 ECU 下电或复位
- 多核生命周期同步
EcuM 不负责:
- 不负责业务级模式仲裁,仲裁通常由 BswM 完成
- 不负责网络关闭条件判断,通常由 BswM 结合 ComM、Nm 等状态判断
- 不直接定义芯片低功耗寄存器操作,这些动作位于 MCU 或 EcuM Callout
上下游接口契约
上游模块
- BswM
- 根据系统模式、网络状态和应用条件选择 Shutdown Target
- 调用
EcuM_SelectShutdownCause()、EcuM_SelectShutdownTarget() - 调用
EcuM_GoHalt()进入休眠 - 调用
EcuM_GoDown()进入关机或复位流程 - 契约重点:必须先选择 Target/Mode,再触发执行动作
- 唤醒源所属模块
- 例如 CanIf、CanTrcv、LinIf、Icu 或其他硬件驱动
- 检测到潜在唤醒后,通过
EcuM_SetWakeupEvent()报告 Pending 事件 - 完成真实性验证后,通过
EcuM_ValidateWakeupEvent()报告验证成功 - 契约重点:传入的是 32 bit 唤醒源位图,不是普通枚举值。每一位代表一个唤醒源
- OS
- Reset Handler 或启动代码调用
EcuM_Init() - DefaultTask 必须调用
EcuM_StartupTwo() - Shutdown Hook 必须调用
EcuM_Shutdown() - 周期任务必须调度
EcuM_MainFunction()
- Reset Handler 或启动代码调用
下游模块
- MCU
- 提供正常运行模式、睡眠模式和复位能力
EcuMSleepModeMcuModeRef和EcuMNormalMcuModeRef必须指向有效的McuModeSettingConf- EcuM 负责选择模式,MCU 负责真正修改芯片状态
- OS / SchM / RTE
- EcuM 调用
StartOS()启动 OS EcuM_StartupTwo()完成 BswM 初始化、SchM 初始化和Rte_Start()- 下电流程中停止 RTE、SchM,并调用
ShutdownOS() - OS Shutdown Hook 再将控制权交回
EcuM_Shutdown()
- EcuM 调用
- ComM
- 若唤醒源配置了
EcuMComMChannelRef,有效网络唤醒最终需要通知对应 ComM Channel - 该引用为空通常表示该唤醒源不是网络唤醒源
- 若唤醒源配置了
- Det
- 当
EcuMDevErrorDetect = true时,EcuM 对未初始化调用、空指针、非法参数和未知唤醒源等开发错误进行上报
- 当
- 硬件集成层
- 通过
EcuM_AL_SwitchOff()、EcuM_AL_Reset()、EcuM_EnableWakeupSources()等 Callout 实现 - EcuM 只规定函数名、调用时机和参数语义,硬件动作由系统集成者实现
- 通过
任务模型
EcuM 的执行上下文可分为四类。
OS 启动前同步上下文
入口为 EcuM_Init(),主要完成:
- EcuM 内部变量初始化
- 可选循环复位检测
- 可选可编程中断配置
- 按顺序调用
EcuM_AL_DriverInitZero() - 按顺序调用
EcuM_AL_DriverInitOne() - 调用
StartOS()
这一阶段通常不具备完整 OS 调度能力,因此初始化函数不能隐式依赖尚未启动的周期任务、事件、资源或异步处理。
OS DefaultTask 上下文
OS 启动后,由用户在 DefaultTask 中调用 EcuM_StartupTwo()。该阶段完成 BswM、SchM 和 RTE 相关启动,并把运行期模式控制权交给 BswM。
周期任务上下文
EcuM_MainFunction() 由 OS 周期调度,核心职责是处理唤醒源验证:
- 检查 Pending Wakeup
- 启动唤醒源验证
- 调用集成层验证逻辑
- 更新验证计时
- 将事件归类为 Validated 或 Expired
- 停止失败唤醒源的验证
因此它不是 ECU 主状态机的唯一驱动函数,而主要是唤醒事件验证引擎。
Shutdown Hook 上下文
EcuM_GoDown() 调用 ShutdownOS() 后,OS 通过 Shutdown Hook 调用 EcuM_Shutdown()。此时:
- 正常 OS 服务已经不可假定可用
- EcuM 根据保存的 Shutdown Target 调用
EcuM_AL_SwitchOff()或EcuM_AL_Reset() - Callout 原则上不应返回,或者返回后必须进入明确的故障保护路径
状态机



Sequence
Power Up Sequence

Run Sequence

Shutdown Sequence

Sleep Sequence

Wakeup Sequence

CAN Wakeup
