Autosar ECUM

基本概念

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先发起

相关推荐
聆风吟º3 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客4 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉6 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力6 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp6 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎7 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力7 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene7 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛7 小时前
Nginx日志切分
服务器·前端·nginx
忧郁的橙子.7 小时前
02-本地部署Ollama、Python
linux·运维·服务器