第二章 工作区与项目创建

好,咱们正式开始动手了。这一章我带你走一遍EB tresos的入门操作——创建工作区、创建新项目、导入现有项目,最后再拆开项目结构看看里面到底装了啥。说白了,就是让你知道怎么“开张干活”。

2.1 创建工作区

打开EB tresos,第一件事就是选工作区。工作区是什么?你可以把它理解成一个“项目收纳盒”。你所有的AUTOSAR项目、配置数据、生成代码,都会放在这个目录下。

我个人习惯把工作区放在一个独立的盘符,比如 D:\AUTOSAR_Workspace。为什么?因为EB tresos在工作区里会产生不少临时文件和元数据,放在C盘容易把系统盘塞满。我曾经遇到过同事C盘爆红,结果EB直接崩溃,项目没保存……嗯,那滋味不好受。

小提示:工作区路径不要带中文,不要带空格。这是很多工具的“潜规则”,EB也不例外。老老实实用英文路径,省得后面出幺蛾子。

操作步骤很简单:

  1. 启动EB tresos,弹出工作区选择对话框
  2. 点击“Browse”,选择或新建一个文件夹
  3. 勾选“Use this as the default and do not ask again”(如果你不想每次启动都选一遍)
  4. 点击“Launch”

第一次进入工作区,EB会初始化一些插件和配置。别急,等右下角的进度条跑完就行。我第一次用的时候还以为卡死了,其实它只是在加载。

2.2 创建新项目

工作区准备好了,接下来创建项目。在EB里,一个项目对应一个ECU的完整配置。比如你做一个BCM(车身控制器),那就建一个BCM项目。

创建步骤:

  1. 菜单栏:File → New → AUTOSAR Project
  2. 输入项目名称,比如 MyBCM_Project
  3. 选择AUTOSAR版本(比如4.2.2或4.4.0)——这个要跟你用的MCAL和BSW模块版本匹配
  4. 选择目标微控制器型号(比如Infineon TC3xx或NXP S32K)
  5. 点击“Finish”

创建完成后,你会看到项目结构树。别急着点来点去,先看看EB自动生成了什么:

  • .project.autosar 文件——项目描述文件,别手贱去改
  • config 文件夹——存放所有BSW模块的配置
  • generate 文件夹——生成代码的输出目录
  • src 文件夹——放你的SWC代码
重点:创建项目时选的AUTOSAR版本,决定了你能用哪些模块和配置选项。选错了版本,后面导入模块时会报一堆“版本不兼容”的错误。我踩过这个坑,折腾了两天才发现是版本没对上。

2.3 导入现有项目

工作中更多的情况是接手别人的项目。导入现有项目,比新建还常用。

导入步骤:

  1. 菜单栏:File → Import → General → Existing Projects into Workspace
  2. 点击“Select root directory”,找到项目所在的文件夹
  3. EB会自动扫描出项目列表,勾选你要导入的项目
  4. 勾选“Copy projects into workspace”(建议勾上,避免污染原始文件)
  5. 点击“Finish”

导入后,如果项目里引用了某些模块的路径(比如MCAL的驱动库),EB可能会报路径错误。这时候需要去 Project → Properties → AUTOSAR → Paths 里重新配置一下。

注意:导入项目时,如果原始项目用了绝对路径(比如 C:\Users\xxx\MCAL),而你电脑上没有这个路径,EB会报“Resource is out of sync”。解决办法就是重新映射路径,或者把相关文件复制到工作区内,改用相对路径。

我曾经从同事那拷了一个项目,导入后报了几十个错误。后来发现他用的MCAL版本跟我装的不一样,模块接口都变了。所以导入项目前,最好先确认一下对方的工具链版本。

2.4 项目结构解析

项目建好了,咱们来拆开看看。一个典型的AUTOSAR项目,在EB里大致长这样:

MyBCM_Project/
├── .project
├── .autosar
├── config/
│   ├── BswM/
│   ├── Can/
│   ├── CanIf/
│   ├── CanTp/
│   ├── Dcm/
│   ├── EcuM/
│   ├── Os/
│   ├── SchM/
│   └── ...
├── generate/
│   ├── BswM/
│   ├── Can/
│   └── ...
├── src/
│   ├── Rte/
│   └── Swc/
└── tools/
    └── ...

这里面最核心的三个部分:BSWRTESWC。我一个个说。

2.4.1 BSW(基础软件层)

BSW就是ECU的“操作系统”和“驱动程序”。它负责管理硬件资源、通信、诊断、存储等底层功能。在EB里,每个BSW模块都是一个独立的配置项。

常见的BSW模块:

模块 功能
EcuM ECU状态管理(启动、休眠、唤醒)
BswM BSW模式管理(协调各模块状态)
Can / CanIf / CanTp CAN通信栈(驱动、接口、传输层)
Dcm 诊断通信管理(UDS协议)
Os 实时操作系统(任务调度、中断管理)
SchM 调度管理器(BSW模块的调度)

每个模块的配置都在 config/ 文件夹下,以 .arxml 文件形式存在。双击就能在EB的图形化界面里编辑。

经验之谈:配置BSW模块时,一定要先配EcuM和BswM。为什么?因为它们是“总管”,其他模块的初始化顺序、模式切换都依赖它们。我见过有人先配Can,结果EcuM没配好,CAN模块根本跑不起来。

2.4.2 RTE(运行时环境)

RTE是BSW和SWC之间的“桥梁”。它负责把SWC的虚拟通信(比如Sender-Receiver、Client-Server)映射到BSW的实际通信机制上。

在EB里,RTE不是一个独立的模块,而是由RTE Generator生成的代码。你配置好SWC的接口和通信关系后,点击“Generate RTE”,EB就会自动生成RTE代码,放在 src/Rte/ 目录下。

生成的RTE代码包括:

  • Rte.h / Rte.c —— 主文件,包含所有接口函数
  • Rte_Type.h —— 数据类型定义
  • Rte_SwcName.h —— 每个SWC对应的头文件

你想想看,如果没有RTE,SWC之间通信就得直接调用BSW的API,那耦合度得多高?RTE的存在,让SWC开发者可以完全不用关心底层硬件。

2.4.3 SWC(应用层软件组件)

SWC就是你的业务逻辑。比如控制车窗升降、处理传感器数据、执行诊断策略等。在EB里,SWC的配置主要在 src/Swc/ 目录下。

每个SWC包含:

  • 端口(Ports) —— 定义输入输出接口
  • 内部行为(Internal Behavior) —— 定义运行实体(Runnable)、触发事件等
  • 实现(Implementation) —— 实际的C代码

配置SWC时,你需要在EB里定义好端口类型(Sender-Receiver还是Client-Server)、数据元素、触发方式(周期性、事件触发等)。然后编写对应的C代码,实现具体的功能。

核心思路:BSW管硬件,SWC管逻辑,RTE管通信。这三层各司其职,互不干扰。你在配置时也要保持这个思维——别在BSW里写业务逻辑,也别在SWC里直接操作寄存器。

2.5 本章小结

这一章我们走了一遍EB tresos的入门操作:

  • 创建工作区——选好路径,别用中文
  • 创建新项目——选对AUTOSAR版本和芯片型号
  • 导入现有项目——注意路径和版本兼容性
  • 项目结构——BSW、RTE、SWC各司其职

下一章,咱们开始真正配置BSW模块。我会从最基础的EcuM讲起,带你一步步搭起一个能跑的项目框架。到时候你会发现,配置这东西,说白了就是“填表”——但填错了表,车可就跑不起来了。