广告

从手写代码到AUTOSAR工具链,EcuM应用篇

2023-05-29 汽车电子与软件 阅读:
EcuM是AUTOSAR中最基本也是最重要的BSW模块之一,其使用方法相对简单,但弄清楚其中的运行机制并不容易。本文依旧从传统的手工编程入手,着重突出EcuM的应用方法。

接上一篇:从手写代码到AUTOSAR工具链 - RTE入门篇EKtednc

1 引言

EcuMAUTOSAR中最基本也是最重要的BSW模块之一,其使用方法相对简单,但弄清楚其中的运行机制并不容易。本文依旧从传统的手工编程入手,着重突出EcuM的应用方法,对模块的内部机理仅做简单介绍,感兴趣的读者可参考相应AUTOSAR规范。EKtednc

 EKtednc

2 EcuM模块简介

EcuM用于ECU状态管理,其主要功用包括:EKtednc

- 初始化(Init)和反向初始化(DeinitOSSchMBswM和一些基础软件驱动模块。EKtednc

- 如果需要,配置ECU进入SLEEPSHUTDOWN状态。EKtednc

- 管理ECU的所有唤醒事件。EKtednc

 EKtednc

2.1 EcuM阶段

2-1绘制了EcuM模块的“阶段(Phases)”,包括STARTUPUPSHUTDOWNSLEEPEKtednc

 EKtednc

EKtednc

2-1: EcuM阶段EKtednc

 EKtednc

2.1.1 STARTUP阶段

STARTUP阶段的目的是初始化基础软件模块直到通用模式管理机制开始运行。EKtednc

在调用EcuM_Init函数后,EcuM接管ECU启动程序的控制;随着StartOS的调用,EcuM临时交出控制权。集成者可通过实现“自动启动和EcuM_StartupTwo作为第1个调用行为”的OS任务使EcuM重新获得控制权。EKtednc

 EKtednc

2.1.2 UP阶段

UP刚开始时,BSW调度器已经启动,BswM_Init已经被调用。但内存管理没有初始化,没有通信栈,RTE没有启动,SWCs没有启动。进程通过相应的运行实体(Runnables)以特定模式(Startup后下一个配置项)启动,如:BSW主函数,然后以模式改变的任意组合启动BswM执行行为,同时触发或禁用相应的运行实体。EKtednc

EcuM模块的角度,ECU已经“起来”。BswM模块启动模式仲裁和更多BSW初始化,通过执行BswM行为列表或驱动模式相关调度启动RTESWCEKtednc

初始化BSW模块和启动SWC可以任意次序进行,直到ECU实现全功能;最后,模式切换停止SWC并反向初始化BSWUP阶段结束,ECU到达可以休眠或下电的状态。EKtednc

 EKtednc

2.1.3 SHUTDOWN阶段

SHUTDOWN阶段处理基础软件模块的关闭,最终导致设备关闭或复位。EKtednc

 EKtednc

2.1.4 SLEEP阶段

ECUSLEEP阶段处于低功耗状态。通常来说,程序代码不再执行,但仍然有供电,ECU可以被唤醒。EcuM模块提供可配置的硬件休眠模式集,通常在功耗和重启时间之间做出权衡。EKtednc

EcuM模块根据有意或无意的唤醒事件唤醒ECU,由于无意的唤醒事件应被忽略,EcuM模块提供了一个验证唤醒事件的协议。该协议规定了在处理唤醒源驱动和EcuM之间如何协作处理。EKtednc

 EKtednc

2.1.5 OFF阶段

ECU当其下电时进入OFF状态,此时它只能被集成电源控制的唤醒源唤醒。在任何情况下ECU必须能被启动(如:复位事件)。EKtednc

 EKtednc

2.2 EcuM结构描述

EcuM模块在大多数情况下仅负责初始化和反向初始化。包括一些基础软件驱动模块的初始化、关闭和唤醒时的重新初始化;OS初始化和关闭。EKtednc

OS初始化之后,控制传递给BswM之前,EcuM模块仍需承担附加的初始化步骤;在OS关闭之前,BswM立即将执行控制权交还给EcuM模块。EKtednc

 EKtednc

2.3 EcuM设计步骤

ETAS公司的ISOLAR-AB工具为例说明EcuM模块的设计步骤。EKtednc

 EKtednc

2.3.1 ARXML创建

ISOLAR-AB中创建EcuM_EcucValues.arxml文件并将其拷贝到相应路径下。EKtednc

 EKtednc

2.3.2 模块配置

ISOLAR-B中创建并配置EcuM模块。EKtednc

 EKtednc

3 控制实例

我们继续以应用在重卡主驾座椅上的ECAS控制器”为例,说明EcuM的实现过程。该控制器的核心功能是“将座椅高度始终保持在设定位置上”,通过控制进气阀和排气阀的开闭调节空气弹簧的充气量,从而实现加载在座椅的重量发生变化时(不坐人或坐不同重量的人)其高度始终不变。表3-1为与之相关的主要部件及其功用。EKtednc

 EKtednc

3-1: 座椅ECAS控制器相关主要部件及其功用EKtednc

序号EKtednc

部件名称EKtednc

功用EKtednc

1EKtednc

高度传感器EKtednc

实时采集座椅当前高度EKtednc

2EKtednc

进气阀和排气阀EKtednc

1)进气阀打开,排气阀关闭:空气弹簧充气,座椅高度上升EKtednc

2)进气阀关闭,排气阀打开:空气弹簧放气,座椅高度下降EKtednc

3)进气阀和排气阀都关闭:空气弹簧无动作,座椅高度不变EKtednc

4)进气阀和排气阀都打开:错误状态EKtednc

 EKtednc

从前文的描述可以看出,EcuM主要完成车载嵌入式软件“初始化”和“关闭”阶段,即“一头一尾”的工作,中间部分由BswM完成。“座椅ECAS控制器”由于功能比较简单,并没有用到OS,故只需考虑其初始化阶段的程序段即可,表3-2列出了通常情况下应在EcuM初始化的功能块,主要包括单片机外设驱动和外围芯片驱动的初始化。EKtednc

 EKtednc

3-2: EcuM初始化模块EKtednc

序号EKtednc

分类EKtednc

函数EKtednc

功用EKtednc

1EKtednc

MCALEKtednc

CGC_InitEKtednc

Clock初始化EKtednc

2EKtednc

PORT_InitEKtednc

Port初始化EKtednc

3EKtednc

ADC_InitEKtednc

ADC初始化EKtednc

4EKtednc

TAU0_InitEKtednc

GPT初始化EKtednc

5EKtednc

WDT_InitEKtednc

Wdg初始化EKtednc

6EKtednc

OSEKtednc

Tim_InitEKtednc

时间触发时标初始化EKtednc

7EKtednc

CDDEKtednc

BspKey_InitEKtednc

按键处理初始化EKtednc

8EKtednc

In_InitEKtednc

输入模块初始化EKtednc

9EKtednc

Out_InitEKtednc

输出模块初始化EKtednc

 EKtednc

4 手写代码实现方法

手写代码实现程序初始化的部分,还是比较简单的,图4-1为代码截图。EKtednc

  EKtednc

EKtednc

EKtednc

EKtednc

EKtednc

EKtednc

4-1: EcuM手写代码实现EKtednc

 EKtednc

5 AUTOSAR工具链实现方法

本章介绍在ISOLAR-AB中创建和配置“座椅ECAS控制器”EcuM模块的步骤。EKtednc

 EKtednc

5.1 EcuM模块创建和整体配置

首先需要在ISOLAR-B中创建EcuM模块及其ARXML文件,再对其进行“整体配置”,这是后续一系列配置操作的基础。EKtednc

 EKtednc

5.1.1 EcuM模块创建

按照图5-1和图5-2所示的步骤创建EcuM模块。EKtednc

EKtednc

5-1: EcuM模块创建启动EKtednc

EKtednc

5-2: EcuM模块创建操作EKtednc

 EKtednc

5.1.2 EcuM整体配置

按照图5-3所示进入EcuM整体配置界面,可以在这里根据需要配置EcuM主函数调用周期、包含头文件、运行核等参数。EKtednc

 EKtednc

EKtednc

5-3: EcuM整体配置界面EKtednc

 EKtednc

5.2 EcuM通用配置

该箱包含EcuM的通用配置参数,图5-4为其配置启动界面。EKtednc

EKtednc

5-4: EcuM通用配置EKtednc

 EKtednc

这里面比较重要的配置箱为:EcuM驱动初始化列表〇(EcuMDriverInitListZero)和EcuM驱动初始化列表一(EcuMDriverInitListOne),用于实现表3-2中的初始化函数,AUTOSAR规范还专门对两者的初始化行为给出了建议,如表5-1所列。EKtednc

 EKtednc

5-1: EcuM初始化列表EKtednc

序号EKtednc

配置项EKtednc

初始化行为EKtednc

1EKtednc

EcuMDriverInitListZeroEKtednc

DetEKtednc

DemEKtednc

...EKtednc

2EKtednc

EcuMDriverInitListOneEKtednc

McuEKtednc

PortEKtednc

DioEKtednc

GptEKtednc

WdgEKtednc

AdcEKtednc

IcuEKtednc

PwmEKtednc

OcuEKtednc

...EKtednc

 EKtednc

由于座椅ECAS控制器没有DetDem等模块,这里将初始化行为均配置在“EcuMDriverInitListOne”中,表5-2为“Port初始化”的参数配置,其余模块的初始化与之类似。EKtednc

 EKtednc

5-2: Port初始化参数配置EKtednc

序号EKtednc

配置项EKtednc

配置值EKtednc

说明EKtednc

1EKtednc

ShortNameEKtednc

PORTEKtednc

配置箱名称EKtednc

2EKtednc

EcuMModuleIDEKtednc

PORTEKtednc

初始化模块的短名称EKtednc

3EKtednc

EcuMModuleParameterEKtednc

VOIDEKtednc

函数原型和输入参数定义EKtednc

4EKtednc

EcuMModuleServiceEKtednc

InitEKtednc

模块初始化方式,按照这里配置的初始化函数调用方式为PORT_Init()EKtednc

5EKtednc

EcuMRbDriverInitCoreIdEKtednc

-EKtednc

指定驱动初始化被哪个核调用EKtednc

6EKtednc

EcuMRbMonitoringCapableEKtednc

-EKtednc

指定模块不生成监控服务EKtednc

7EKtednc

EcuMRbSequenceIDEKtednc

-EKtednc

生成的功能桩基于模块配置的顺序EKtednc

8EKtednc

EcuMModuleRefEKtednc

-EKtednc

模块示例的外部引用,不配置EcuMModuleID时有效EKtednc

 EKtednc

5.3 EcuM灵活状态机配置

该箱包含EcuM灵活状态机的配置参数,图5-5为其配置启动界面,在其中可按需配置EcuM复位模式、下电原因等参数。EKtednc

 EKtednc

EKtednc

5-5: EcuM灵活状态机配置EKtednc

 EKtednc

5.4 代码生成

在完成BSW生成操作后,由图5-6的代码截图可以看出,工具链生成的代码与手工编程的代码类似。EKtednc

 EKtednc

EKtednc

5-6: EcuM模块工具链生成代码截图EKtednc

 EKtednc

6 下期预告

 EKtednc

不知道大家是否还记得上期《从手写代码到AUTOSAR工具链_RTE入门篇》中没有说到的算法模块初始化函数Controller_initialize的调用,通过本文讲述的EcuM方式实现当然是可以的,不过对于应用层初始化的调用,更常用的做法是在“ECUM_STATE_RUN”中实现,这就涉及到AUTOSAR的另一个模块 - BswM的使用。EKtednc

  EKtednc

AUTOSAR规范中,BswM是一个重要、有用、又好玩的模块,我研究了3次才想到了一个将其功用描述清楚的办法,我们下期讨论,敬请期待。EKtednc

责编:Ricardo
文章来源及版权属于汽车电子与软件,EDN电子技术设计仅作转载分享,对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。如有疑问,请联系Demi.xia@aspencore.com
汽车电子与软件
汽车电子与软件
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
广告
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了