基本概念
EcuM(ECU State Manager)模块属于系统服务层,由于设计固定,配置好之后基本不用怎么修改。
初始化和反初始化OS、SchM和BswM以及一些基本的软件驱动模块。
在请求休眠和下电的时候对ECU进行操作
管理员ECU的唤醒事件
ECUM提供了唤醒验证协议,用于区分"真实"的唤醒事件与"异常"的唤醒事件。
处理PB(post build)的配置地址。
EcuM Flex
AUTOSAR ECU模式管理分为Fixed和Flexible两种方式
Fixed有如下确定的模式:
①STARTUP;
②RUN;
③POST_RUN;
④SLEEP;
⑤WAKE_SLEEP;
⑥SHUTDOWN。
Flexible模式则允许其他的情况,如快速/分部(Fast/Partial)启动、多核管理(Multicore Management)等。
EcuM模块还可以配置ECU睡眠模式(Sleep Modes)、下电原因(Shutdown Causes)、复位模式(Reset Modes),管理所有ECU唤醒源(Wakeup Sources)。
状态图
1、上电进入STARTUP状态,执行StartPreOS步骤,一般是先在EcuM_Init里面调用EcuM_AL_DriverInitOne接口,将ADC之类的外设进行初始化。调用StartOS接口,等待OS起来之后,ECUM重新获得控制权,执行StartPostOs,执行OS里面的启动任务,在EcuM_StartupTwo接口里面调用SchM_Init、BswM_Init接口。
2、各个模块都完成初始化之后,进入到UP状态,相当于RUN状态,执行正常的任务。
3、当需要休眠的时候,跳转到sleep模式,在gosleep的时候使能唤醒源和唤醒验证,防止休眠后无法唤醒,然后进入poll或者halt的休眠状态。如果要进入reset的话就要失能唤醒源。
4、下电的时候执行下电流程,跳转到shutdown状态,执行OffPreOs动作调用ShutdownOS函数,将各个模块进行逆初始化。然后执行OffPostOS动作,将OS shutdown。
5、在shutdown状态执行reset的时候就会跳转到STARTUP状态重新启动初始化

Startup sequence
EcuM模块需要初始化一些BSW模块,所以需要定义一系列初始化列表。对于Fixed模式,可以定义四个初始化列表:
①初始化列表0(Driver Init List Zero);
②初始化列表1(Driver Init List One);
③初始化列表2(Driver Init List Two);
④初始化列表3(Driver Init List Three)。
列表0和1在操作系统OS启动之前完成,而列表2和3则需要操作系统OS支持,故在其启动之后完成。对于Flexible模式,EcuM只需要完成列表0和1中各模块的初始化,而后两个列表中的模块初始化需要由BswM模块来实现。这里给出一个推荐的模块初始化顺序列表。
在boot当中跳转到C语言代码,就会立即调用EcuM_Init接口,执行ECUM的初始化序列。然后执行StartupHook钩子函数,激活task,再去执行StartPostOS序列。

Startup Pre Os
在这里细讲Startup Pre Os的流程。EcuM_AL_DriverInitZero接口基本没做啥。EcuM_DeterminePbConfiguration接口确定配置信息。检查配置信息一致性。执行StartupHook钩子函数。EcuM_AL_DriverInitOne才是主要的,会初始化各种外设,包括启动OS。Mcu_GetResetReason获取复位原因。EcuM_SelectShutdownTarget和EcuM_LoopDetection也没啥用。最后就调用StartOS把OS启动起来。

Startup Post Os
执行StartOS之后的启动序列,ECUM按照顺序调用下面四个接口。初始化BswM之后,从EcuM的角度来看,启动序列结束,因此必须使用BswM设置所有额外的启动步骤,譬如NvM_ReadAll,Rte_Start......

Shutdown
由BSWM先发起,调用ECUM接口,也是按照顺序调用下面几个序列。关闭OS和ECUM,执行OS下电钩子函数。

Off Pre OS
具体流程如下图

Off Post OS
调用ShutdownOS之后,继续执行

SLEEP
休眠的流程也是BSWM先发起
