4. 创建第一个 RTA-CAR 工程

在完成 RTA-CAR 工具链安装与工作空间准备之后,真正进入工程实践的第一步,是建立一个可被工具链识别、可承载后续配置与代码生成的 ECU 工程。RTA-CAR 的工程并不是一个简单的文件夹,而是一个由工程元数据、系统描述文件、ECU 提取视图、BSW 配置集和生成器输出共同组成的结构化工作单元。理解这些对象之间的层次与依赖关系,是避免后续“配置改了但代码没变”“导入系统描述后找不到 ECU 实例”等问题的关键。

本节的核心目标可以概括为一条主线:新建 ECU 工程 → 导入系统描述(System Description)→ 提取并绑定目标 ECU → 配置基础属性 → 运行生成器产出初版代码。这条主线中的每一步都会在工程目录中留下可检查的产物,因此判断是否成功并不依赖主观感觉,而是看对应文件与生成结果是否存在、是否一致。

一、工程结构与对象关系

在动手之前,先建立对 RTA-CAR 工程内部对象的整体认识。一个典型的 RTA-CAR 工程包含以下关键对象:

  • 工程文件(Project):记录工程名称、路径、工具版本、生成器选择等元信息,是打开工程的入口。
  • 系统描述(System Description):通常为 ARXML 格式,描述整车或子系统层面的软件组件、通信矩阵、ECU 实例与拓扑关系。
  • ECU 提取视图(ECU Extract):从系统描述中抽取出的、仅属于目标 ECU 的那部分内容,是 ECU 配置的直接输入。
  • BSW 配置集:包括 EcuC、Os、Com、Dcm、Dem 等模块的配置参数,决定生成代码的行为。
  • 生成器输出:由 RTA-CAR 生成器产出的 C 头文件、源文件、模板代码与集成描述文件。

这些对象并非平级,而是存在明确的“上游决定下游”关系:系统描述决定 ECU 提取视图,ECU 提取视图与 BSW 配置共同决定生成代码。下面的 SVG 用结构关系图表达这一层次与数据流向,帮助你在操作时始终知道“当前这一步的输入来自哪里、输出会流向哪里”。

RTA-CAR 工程对象层次与数据流 ECU 工程(Project) 系统描述 System Description *.arxml(整车/子系统) ECU 提取视图 ECU Extract 仅含目标 ECU 内容 BSW 配置集 EcuC / Os / Com / Dcm 参数与容器配置 提取 绑定 RTA-CAR 生成器 Rte / BSW / OS 代码生成 读取 ECU Extract + BSW 配置 生成输出:Rte_*.c/h、EcuC_*.c/h、Os_*.c/h、Com_*.c/h、*.arxml 集成描述 可编译、可集成到 ECU 工程的初版代码 操作顺序 ① 新建 ECU 工程 ② 导入系统描述 ③ 提取并绑定 ECU ④ 配置基础属性

二、新建 ECU 工程

启动 RTA-CAR 后,通过 File → New → RTA-CAR Project 创建工程。此时需要填写几个关键字段,它们会直接影响后续生成器的行为:

  • Project Name:建议使用能体现 ECU 用途的名称,例如 BCM_ECU_Demo,避免空格与中文。
  • Project Location:工程根目录,建议路径中不含空格,例如 D:\RTA_WS\BCM_ECU_Demo。
  • Target / Derivative:选择目标芯片或派生型号,例如某款基于 ARM Cortex-M 的 MCU,这会决定可用驱动与 OS 移植层。
  • Autosar Version:选择与系统描述一致的 AUTOSAR 版本(如 4.2.2 或 4.4.0),版本不一致会导致导入失败或元素无法识别。

创建完成后,工程目录中会出现 .project、config/、input/、generated/ 等结构。其中 input/ 用于存放待导入的系统描述,generated/ 用于存放生成器输出,config/ 保存 BSW 配置。建议在导入前先确认这些目录存在,避免生成器因路径缺失而报错。

三、导入系统描述并提取 ECU

系统描述通常由 OEM 或系统架构团队提供,格式为 ARXML。导入操作一般通过 File → Import → System Description 完成。导入时需要注意两点:

  1. 文件完整性:ARXML 可能由多个文件组成,需确认是否包含引用文件(如数据类型库、通信矩阵)。缺失引用会导致解析中断。
  2. ECU 实例选择:导入后工具会列出系统描述中定义的所有 ECU 实例,必须选择与当前工程对应的那一个,例如 ECU_BCM。选错会导致后续提取视图为空或包含无关信号。

选择 ECU 实例后,执行“提取(Extract)”操作,工具会生成 ECU Extract。此时应检查提取结果中是否包含预期的 SWC 实例、端口、信号与通信矩阵条目。一个常见的判断依据是:提取视图中的信号数量应与系统描述中该 ECU 相关的信号数量一致;若明显偏少,通常是 ECU 实例选择错误或引用文件未加载。

导入与提取完成后,建议立即保存工程并查看 input/ 与 config/ 目录下是否出现对应的 ARXML 与提取文件。这一步是后续所有配置的基线,若基线不完整,后面再改配置也无法生成正确代码。

四、配置基础属性

基础属性配置决定了生成代码的“骨架”是否正确。对于第一个工程,建议优先配置以下几类参数,而不是一次性展开所有模块:

配置项 示例值 作用与判断依据
EcuC 通用参数 EcuName = BCM_ECU 决定生成代码中的 ECU 标识,需与系统描述一致
OS 任务与计数器 Task_10ms、Task_100ms 决定调度框架,任务周期应与信号发送周期匹配
Com 信号与 IPDU Signal_BCM_Status → IPDU_BCM_Tx 决定通信代码,需与提取视图中的信号对应
Dcm / Dem 基础开关 Dcm 使能,Dem 事件映射 决定诊断栈是否生成,初期可先关闭以缩小代码规模
生成器选项 输出路径 = generated/ 决定代码落盘位置,需与工程目录结构一致

配置过程中应遵循“先通后全”的原则:先保证 EcuC、Os、Com 三个模块的最小配置可生成,再逐步加入 Dcm、Dem、NvM 等模块。每改完一组参数,建议立即执行一次生成,观察是否出现错误或警告,而不是等所有配置完成后再一次性生成。

五、生成初版代码与结果检查

配置完成后,通过 Generate → Generate All 或对应生成器按钮执行代码生成。生成过程会在控制台输出日志,重点关注三类信息:

  • 错误(Error):如“未找到 ECU 实例”“信号未映射到 IPDU”,必须解决后才能继续。
  • 警告(Warning):如“某参数使用默认值”,可暂时接受,但应记录以便后续确认。
  • 生成文件列表:确认 generated/ 下出现 Rte_*.c/h、EcuC_*.c/h、Os_*.c/h、Com_*.c/h 等文件。

生成成功后,建议做三项快速检查:第一,打开 EcuC_Cfg.h,确认 ECU 名称与配置一致;第二,打开 Os_Cfg.h,确认任务数量与周期与配置一致;第三,检查 Com_Cfg.h 中是否包含预期的信号与 IPDU。若这三项均正确,说明工程基线已经建立,可以进入后续的 SWC 集成与 RTE 配置阶段。

初版代码生成成功并不等于可以直接刷写到 ECU。生成代码仍需与 MCU 驱动、启动代码、链接脚本一起编译,并通过调试器或仿真环境验证任务调度与通信行为。本节的目标是建立可生成、可检查的工程基线,而不是完成最终可运行固件。

至此,第一个 RTA-CAR 工程已经完成了从新建、导入、提取、配置到生成初版代码的完整闭环。后续所有配置与集成工作,都将在这个基线之上展开;因此,建议在生成成功后对工程做一次完整备份,作为后续迭代的参照点。