在AUTOSAR方式设计车载ECU软件的初期,很多项目团队都采用“基础软件外协开发”的模式。即委托第三方软件公司搭建一个AUTOSAR工程并给出各主要模块的设计示例,再在此基础上去做自己的项目。这样的开发模式有助于快速适应全新的设计方法,缩短项目周期,但也会带来“过于依赖项目组外部资源,一旦出现错误难于解决”等问题。
本文针对上述痛点,讲述了在ETAS工具链环境下进行工程创建和常用模块集成的全过程,目的是让读者对AUTOSAR工程的产生过程有一个大致的了解,从整体上理清AUTOSAR方式设计车载嵌入式软件的思路。
本文所述设计集成过程除MCAL部分采用Infineon和EB联合开发的“EB Tresos”工具外,其余模块均采用ETAS工具链开发,如表2-1所列。
表2-1: AUTOSAR工具链汇总
序号 | 集成开发环境 | 子工具 | 功用 |
1 | EB Tresos | EB Tresos | MCAL模块设计 |
2 | ISOLAR-AB | ISOLAR-A | 系统级架构设计 |
RTA-RTE | 接口设计 | ||
RTA-BSW | BSW模块设计 | ||
3 | RTA-OS | RTA-OS | 操作系统设计 |
对于ETAS工具链使用者而言,AUTOSAR工程主要是在ISOLAR-AB中创建、设计和集成的。
下面以VCU项目为例讲解AUTOSAR工程创建过程,其它车载ECU软件可在此基础上做相应改动。
AUTOSAR工程创建在ISOLAR-A中进行。
按照表3-1创建工程文件夹。
表3-1: 工程文件夹创建
序号 | 一级文件夹 | 二级文件夹 | 三级文件夹 |
1 | hightec_vcu | - | - |
2 | isolar_ab_vcu | - | - |
3 | mcal_vcu | - | - |
4 | vcu | src | ASW、BSW、CDD、INFRA、IOHWAB、RTE、Target |
双击“ISOLAR-AB V 4.0”图标,弹出图3-1所示的界面,按照图示步骤操作进入ISOLAR-AB工具的主界面。
图3-1: ISOLAR-AB工作空间选择
在主界面中点击“File->New->AUTOSAR Project”新建工程,弹出图3-2所示的界面,按照图中步骤完成工程创建。
图3-2: AUTOSAR工程创建界面
AUTOSAR开发方式中的架构设计即软件组件(SWC)的设计,包括创建软件组件、端口接口设计、内部行为设计等步骤,还需将SWC分别加入部件和ECU。具体操作方法详见《RTE入门篇》。
系统创建和配置按照下列步骤进行。
按照图3-3和图3-4所示创建部件。
图3-3: 部件创建启动
图3-4: 部件创建配置
按照图3-5和图3-6所示创建系统。
图3-5: 系统创建启动
图3-6: 系统创建配置
系统配置包括建立对部件的引用、抽取配置和映射创建3部分。
(1)建立系统对部件的引用
为上节创建的“System”生成1个子项“Root Software Compositions | Root Sw Composition Prototype”,并将其“SoftwareComposition”的引用配置为“TopLevelComposition”。
(2)系统抽取配置
配置上节创建“System”的类别。
(3)映射创建
为上节创建的“System”生成1个子项“Mappings | Mapping”,命名为“SwcToEcuMapping”,并配置“Ecu实例”。
通信配置主要包括DBC导入、报文发送周期配置、抽取和生成RTA-BSW等操作,完成这些步骤后,与CAN通信有关的BSW模块将自动生成。
图3-7: 生成RTA-BSW
表3-2: RTA-BSW后自动生成的BSW模块
序号 | 一级文件夹 | 二级文件夹 | BSW模块 |
1 | Com Stack | Can Modules | Can |
2 | CanIf | ||
3 | CanSM | ||
4 | - | Com | |
5 | - | PduR | |
6 | Mode Mgm | - | ComM |
7 | Other Modules | - | ComStack |
8 | - | Ecuc | |
9 | - | rba_ArxmlGen |
依次进行EcuM和BswM模块的配置,具体参见《EcuM应用篇》和《BswM应用篇》。
操作系统配置分为2部分,ISOLAR-AB中的OS模块配置和RTA-OS中的配置。
创建Os模块并完成基础配置。
(1)Os创建
创建Os模块,再依图3-8删除多余项。
图3-8: Os多余项删除
(2)应用模式配置
按照图3-9的步骤进行。
图3-9: Os应用模式配置
(3)计数器配置
为Os应用配置计数器信息,图3-10为其配置方法。
图3-10: Os计数器配置
(4)任务配置
根据项目需要配置OS任务,图3-11为配置方法,表3-3为任务配置示例。
图3-11: Os任务配置
表3-3: Os任务参数配置示例
序号 | 配置项 | 配置值 | 说明 |
1 | ShortName | XXX | 任务名 |
2 | OsTaskActivation | 1 | 定义该任务最大数量的队列激活请求,1表示在任何时刻任务仅允许单次激活 |
3 | OsTaskPriority | 39 | 任务优先级,数值越大优先级越高(对于TC275单片机) |
4 | OsTaskSchedule | FULL | 定义任务的优先处理性 |
5 | OsTaskStackAllocation | - | 任务手动堆栈分配,以字节为单位 |
6 | OsTaskWaitStack | - | 激活等待事件时的任务堆栈使用 |
7 | OsTaskBudget | - | 执行预算,以“浮点数+时基名+单位”表达 |
8 | OsTaskCanCallSchedule | - | 任务调用或可能调用“Schedule()”时配置为TRUE |
9 | OsTraceFilter | - | 描述任务是否被RTA-TRACE跟踪 |
10 | OsTaskAccessingApplication | - | 访问该对象的应用的引用 |
11 | OsTaskEventRef | - | 此引用定义了扩展任务可能会响应的事件列表 |
12 | OsTaskResourceRef | - | 此引用定义了该任务访问的资源列表 |
13 | OsRegSetRef | - | 该任务用到的寄存器集的引用 |
在生成RTE成功后进行。
(1)工程创建
点击“File->New Project”新建工程,按照图3-12所示配置工程属性。
图3-12: OS工程属性配置
(2)文件加载
按照图3-13所示将“...\src\RTE\gen”路径下的osNeeds.arxml文件加载进来。
图3-13: OS工程文件加载
(3)工程保存
将工程创建时自动生成的ARXML文件命名为“RTAOS.arxml”,并将其保存至“...\src\Target\TC275\RTAOS\config”路径下。
(4)通用参数配置
OS通用参数配置按照图3-14进行。
图3-14: OS通用配置
(5)应用模式配置
按照图3-15将OS应用模式配置为OSDEFAULTAPPMODE。
图3-15: OS应用模式配置
(6)中断配置
按照图3-16配置项目中需要的二类中断。
图3-16: OS中断配置
按照下列步骤生成OS代码。
(1)文件夹创建
在“...\src\Target\TC275”路径下创建表3-4所示的文件夹。
表3-4: RTAOS文件夹创建
序号 | 一级文件夹 | 二级文件夹 | 三级文件夹 | 四级文件夹 | 五级文件夹 |
1 | RTAOS | config | |||
2 | generated | inc | |||
3 | lib | ||||
4 | report | ||||
5 | integration | inc | |||
6 | src | ||||
7 | MCAL | modules | general | inc | |
8 | tricore | compiler | |||
9 | inc |
(2)生成配置
按照图3-17、图3-18和图3-19的方法依次进行RTA-OS生成配置。
图3-17: RTA-OS生成选项配置
图3-18: RTA-OS生成输出位置配置
图3-19: RTA-OS生成包含路径配置
(3)生成操作
按照图3-20所示生成OS的代码。
图3-20: OS代码生成
创建Rte模块并完成基础配置。
创建Rte模块,再依图3-21删除多余项。
图3-21: Rte多余项删除
依次进行Rte模块的配置。
(1)Rte生成配置
配置Rte生成参数,图3-22为其配置方法。
图3-22: Rte生成配置
(2)Bsw模块实例配置
在生成RTE成功后进行。
Bsw模块实例大部分由工具自动配置,前提是其存在Runnable。为后续编译不出错,在EcucValueCollection中无运行函数的模块需要手动配置。
图3-23: Bsw模块实例配置
创建Bfx模块并完成配置。
在ISOLAR-B中创建Bfx模块。
依次进行Bfx模块的通用配置和内存定位配置。
图3-24: Bfx通用配置
图3-25: Bfx内存定位配置
创建Ecuc Value Collection并完成配置。
在ISOLAR-B中创建Ecuc Value Collection。
依次进行EcucValueCollection的配置。
(1)模块关联
按照图3-26和图3-27所示进行模块关联。
图3-26: EcucValueCollection配置启动
图3-27: EcucValueCollection配置启动
(2)任务分配
依照图3-28将各模块的函数拖到对应的OS任务中。
图3-28: EcucValueCollection任务分配
创建AUTOSAR_PlatformTypes并完成配置。
按照图3-29创建名为AUTOSAR_PlatformTypes的AR Package,再按照与之类似的方式为AUTOSAR_PlatformTypes创建1个子AR Package,名称为ImplementationDataTypes。
图3-29: AUTOSAR_PlatformTypes AR Package创建
以uint8为例,按照图3-30、图3-31、图3-32的步骤添加数据类型。
图3-30: 数据类型添加启动
图3-31: 数据类型添加配置
图3-32: 数据类型参数配置
按照上述步骤依次添加下列数据类型:boolean、float32、float64、sint16、sint32、sint64、sint8、uint16、uint32、uint64。
创建Det模块并完成配置。
在ISOLAR-B中创建Det模块。
依照图3-33进行Det模块的通用配置。
图3-33: Det通用配置
在执行RTE生成前,须进行抽取、生成RTA-BSW、生成BSW等操作。
RTE生成按照图3-34和图3-35的步骤进行。
“Additional Commands”处输入(该过程不再生成SWC的内存映射文件):--strict-unconnected-rport-check=off -err=xml -nts --os-define-osenv=RTAOS40 --exclusive-area-optimization=disable --os-output-param=all。
图3-34: RTE代码生成启动
图3-35: RTE代码生成配置
下面介绍MCAL的集成步骤。
MCAL静态代码的工程路径为“...\src\Target\TC275\MCAL\modules”,头文件和源文件分别存放在“inc”和“src”文件夹下。
MCAL静态代码从EB Tresos的安装路径下拷贝。
配置文件包括MCAL工程文件和单片机各外设模块参数组成的“.xdm”文件,其路径为“...\src\Target\TC275\MCAL\config”。
配置文件在添加MCAL模块时由工具自动生成。
这里的ECAL主要包括实现模拟量输入和数字量输入输出信号的抽象,工程路径为“...\src\IOHWAB”。
内存映射程序文件采用“xxx_MemMap.h”的命名规范,主要解决将变量、常量和代码放到指定存储空间的问题。
各SWC模块的内存映射文件生成方法如图3-36所示,通常每个新建软件组件仅生成1次即可,之后可删除该命令段。
图3-36: 软件组件内存映射程序文件生成方法
各BSW模块的内存映射文件生成方法如图3-37所示(部分有对应SWC的BSW模块按照图3-36的方法操作),这部分文件通常只生成1次,且生成路径不要在程序工程的路径或子路径下,否则容易带来编译错误。
图3-37: BSW模块内存映射程序文件生成方法
内存映射文件统一存储在“...\src\INFRA\memmap”路径下(其余路径下的内存映射文件须剪切至此),且须在工具生成文件的基础上做相应改动。
复杂驱动包含板级芯片驱动程序和对复杂传感器和执行器进行操作的软件模块,相关的程序文件均为手写代码,工程路径为“...\src\CDD”。
按照下面的步骤进行应用层软件集成。
按照表3-5将应用层程序文件拷贝或更新至工程的指定目录。
表3-5: 应用层程序文件处理
序号 | 类别 | 文件(夹)名 | 文件拷贝位置 |
1 | A2L | XXX.a2l(一个或多个) | ...\tools\A2LGenTool\ASAP\Adr_Files\a2l |
2 | Arxml | XXX.arxml(一个或多个) | ...\src\ASW\VcuApp_SWC\arxml |
3 | 文件夹 | lib(库文件) | ...\src\ASW\VcuApp_SWC |
4 | C | XXX.c(一个或多个) | ...\src\ASW\VcuApp_SWC\src |
5 | H | XXX.h(一个或多个) | ...\src\ASW\VcuApp_SWC\src |
如果是首次操作,须按照图3-38所示进行,再执行刷新操作;后续更新只需要在完成文件拷贝后直接刷新工程即可。
图3-38: 应用层ARXML导入
将应用层的SWC分别添加到部件和ECU中,抽取。
在程序中调用应用层软件的初始化和执行函数。
以上完成了VCU软件的工程创建和必备模块集成的基本工作,表3-6列出了车载ECU软件的一些其它的常用模块,这些将在后续的软文中逐一探讨。
表3-6: 车载ECU软件常用模块
序号 | 模块名称 | 功用 |
1 | BOOTLOADER | 实现ECU程序的更新 |
2 | XCP | 用于参数标定 |
3 | UDS | 用于故障诊断 |
4 | NvM | 用于参数存储 |
5 | 核间通信 | 适用于多核微处理器的主控芯片 |
下面对上一章的操作过程进行几点说明。
(1)本文的内容倾向于“工程实践”,仅讲述了“怎么做”而非“为什么这么做”,其中的概念和原理请参考AUTOSAR规范的相关章节。
(2)前文对软件集成的步骤以模块为单位逐一说明,但在实际操作过程中可能出现“前个模块配置须依赖于后续模块设计到某个步骤”的情况,故在软件设计过程中不必拘泥于文中的次序。
(3)在进行“从无到有创建AUTOSAR工程”的过程中得到了团队内外很多同行的指点和帮助,从尊重大家工作成果和遵守公司保密性要求的角度考虑,部分重要的技术细节不宜公开发表(工具链开发涉及到的内容很多,我在此领域工作3年已经编写了数千页的工作文档,确实也很难通过一篇文章讲清楚整个过程),如果读者在开发过程中遇到问题,欢迎私下里探讨。
end
分享不易,恳请点个【👍】和【在看】