Autosar BSW 之模式管理(2) EcuM

本文详细介绍了Autosar中的EcuM模块在StartUp和ShutDown阶段的角色和流程,包括StartPreOS和StartPostOS序列,以及OffPreOS和OffPostOS序列。EcuM在上电时初始化驱动和操作系统,下电时负责有序关闭模块并处理唤醒事件。在正常运行时,管理职责交由BswM。
摘要由CSDN通过智能技术生成

        EcuM主要负责Ecu的上下电流程管理,上电时负责各个模块功能开启;下电时负责按顺序关闭各个模块,保存数据;而在Ecu正常运行时,EcuM将不在负责管理Ecu,由BswM接手管理;EcuM还负责Ecu休眠时状态的处理(更多情况是Ecu在没有通信状态时直接下电处理)

        本文主要介绍上下电两个流程。

1. StartUp阶段

1.1 StartPreOS Sequence

StartPreOS序列的目的是准备ECU初始化操作系统,应该尽可能短。如果可能的话,驱动程序应该在UP阶段初始化,并且调用也应该保持简短。在这个序列中不应该使用中断。如果必须使用中断,在StartPreOS序列中只允许I类中断。

  • EcuM_AL_SetProgrammableInterrupts:主要负责关闭芯片的可编程中断,为初始化其他模块和启动操作系统做准备。如果系统启动代码已将中断关闭,则可通过配置参数将该步骤省略,否则需要在该函数中关闭中断。

  • EcuM_AL_DriverInitZero:初始化Init List 0容器里面的驱动。用于初始化一些公共基础模块,以及获取 PB 参数所需要的硬件模块的驱动。主要负责Det或者Dem的初始化,保证在后续的过程中,如果发生初始化的错误,开发集成人员可以确认

  • EcuM_DeterminePbConfiguration:调用将返回一个指向完全初始化的EcuM_ConfigType结构体的指针,该结构体包含ECU管理器模块和所有其他BSW模块的构建后配置数据

  • EcuM_Prv_PBPointerConsistencyCheck:检查配置数据的一致性,数据一致性检查失败后调用 EcuM_ErrorHook

  • EcuM_AL_DriverInitOne:初始化Init List 1容器里面的驱动。用于初始化一些具有多套配置,且不依赖于操作系统的模块。主要是MCU初始化、时钟初始化、内存的初始化、Port、 GPT、WDG、 ADC等初始化

  • EcuM_Prv_SetDefinedMcuWakeupSource:调用MCU模块提供的AUTOSAR标准接口Mcu_GetResetReason获取复位原因,同时调用EcuM_SetWakeupEvent设置唤醒事件

  • 选择默认的shutdown目标

  • EcuM_LoopDetection:如果启用了循环检测,则每次启动时都会调用该调用。如果检测到复位回路,则返回true。否则返回false。

  • EcuM_Prv_StartOS:启动操作系统,入参为在 EcuM 模块配置的 OS 的 AppMode。该函数最终不会返回。

1.2 StartPostOS Sequence

需要配置一个自启动任务在该任务中,需要调用EcuM_StartupTwo(),StartPostOs存在于该函数执行过程中。

  • Start Scheduler Timing:启动BSW调度表,Start periodical events for BSW/SWCs

  • Init BSW Scheduler:初始化BswM模块,SchM_Init() 执行BswM、SchM 初始化后,EcuM控制权转交给BswM,直到SchM deinit或者睡眠后重新获取控制权

  • Init BSW Mode Manager:初始化BSW调度表,BswM_Init()

  • Start BSW Scheduler:开启调度表计时器,SchM_Start()

2. ShutDown阶段

2.1 OffPreOS Sequence

  • 执行 EcuM_OnGoOffOne(),这是一个集成代码,主要负责处理一些关闭前的特殊操作。需要根据芯片特性填充功能。

  • 执行 BswM_Deinit(),反初始化 BswM 模块。

  • 执行 SchM_DeInit(),反初始化 SchM 模块。

  • 检查唤醒事件,如果在关闭过程中发生挂起或确认的唤醒事件,则系统需要响应唤醒。所以若当前 Shutdown Target 为 OFF,EcuM 会将其更改为 RESET,即在执行完后续的关闭动作后将处理器复位,从而再次启动。若没有发生唤醒事件,则正常执行关闭流程。

  • 执行 ShutdownOS(),关闭操作系统。该函数会清理操作系统中的一些资源,最终调用ShutdownHook()。

2.1 OffPostOS Sequence

  • 调用EcuM_OnGoOffTwo()。用户可以在其中调用不依赖于操作系统的模块的反初始化或清理工作。

  • 根据前面设置的 Shutdown Target , 分别调用EcuM_AL_Reset() 或EcuM_AL_SwitchOff()。用户需要在这两个函数中分别调用驱动来实现系统复位或关闭电源等工作,自此ECU完成Shutdown流程。

3. 流程框图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶小破孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值