4. 创建第一个 RTA-CAR 工程
在完成 RTA-CAR 工具链安装与工作空间准备之后,真正进入工程实践的第一步,是建立一个可被工具链识别、可承载后续配置与代码生成的 ECU 工程。RTA-CAR 的工程并不是一个简单的文件夹,而是一个由工程元数据、系统描述文件、ECU 提取视图、BSW 配置集和生成器输出共同组成的结构化工作单元。理解这些对象之间的层次与依赖关系,是避免后续“配置改了但代码没变”“导入系统描述后找不到 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 用结构关系图表达这一层次与数据流向,帮助你在操作时始终知道“当前这一步的输入来自哪里、输出会流向哪里”。
二、新建 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 完成。导入时需要注意两点:
- 文件完整性:ARXML 可能由多个文件组成,需确认是否包含引用文件(如数据类型库、通信矩阵)。缺失引用会导致解析中断。
- 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 配置阶段。
至此,第一个 RTA-CAR 工程已经完成了从新建、导入、提取、配置到生成初版代码的完整闭环。后续所有配置与集成工作,都将在这个基线之上展开;因此,建议在生成成功后对工程做一次完整备份,作为后续迭代的参照点。