文章目录
前言
Autosar启动和下电过程由EcuM控制,本文介绍EcuM中的初始化和下电前的执行函数
Autosar标准
EcuM启动时的初始化
在标准中,主核启动流程如下:
从核启动流程如下:
EcuM_AL_DriverInitZero 和EcuM_AL_DriverInitOne 函数是在EcuM_Init 中调用的,对应规范中的需求:
但目前ETAS的代码,InirtZero只在主核 中调用。
EcuM_AL_DriverInitZero主要是初始化跟硬件相关的模块,是在校验EcuM的配置 之前进行初始化的(通过调用EcuM_Prv_PBPointerConsistencyCheck函数)。目前项目中没有配置。
EcuM_AL_DriverInitOne也是初始化跟硬件相关的模块,只是在校验完EcuM的配置之后。
EcuM下电执行过程
在标准中,主核的下电流程如下:
OS关闭前:
OS关闭后:
从核的下电流程如下:
OS关闭前:
OS关闭后:
由上图可知,EcuM_OnGoOffOne和EcuM_OnGoOffTwo 的主要区别 在于OffOne在OS关闭前而OffTwo在OS关闭后 。
EcuM_OnGoOffOne 函数由EcuM_Prv_ProceedShutdown函数调用,而EcuM_Prv_ProceedShutdown函数运行需要GoDown Flag置true,这个置位是在BswM中完成的(实际调用EcuM_GoDown 函数),标准中描述如下:
EcuM_OnGoOffOne的函数原型如下:
EcuM_OnGoOffTwo 函数由EcuM_Shutdown函数调用,EcuM_Shutdown在OS shutdown hook中运行。也就是在OS关闭之后运行,规范中描述如下:
EcuM_OnGoOffTwo的函数原型如下:
一般在这个阶段,进行Nvm_WriteAll函数调用。也就是说不管是复位还是正常下电 ,都会走Nvm_WriteAll
在正常下电的最后一个阶段,会调用EcuM_AL_SwitchOff
在这个函数中,需要实现使MCU休眠的逻辑
总结
EcuM还有很多细节,有空可以再研究,后面会介绍EcuM中的配置