3、BSW配置基础:EB tresos Studio与Vector DaVinci Developer简介、配置参数结构(容器、参数、引用)、配置描述文件(ARXML)解析

3.1 两大配置工具:EB tresos Studio 与 Vector DaVinci Developer

做AUTOSAR BSW配置,你绕不开两个工具:EB的tresos Studio和Vector的DaVinci Developer。说实话,这两家几乎垄断了市场。我个人习惯是,项目前期用DaVinci做系统设计和SWC建模,到了BSW配置阶段,反而更常用tresos Studio。为什么?因为tresos在底层MCAL配置上更灵活,颗粒度更细。

先说说EB tresos Studio。它主要面向BSW和MCAL的配置。你想想看,一个典型的ECU项目,底层驱动、通信栈、存储栈、诊断栈,全得靠它来配。它的界面长什么样?左侧是模块树,右侧是参数编辑区。每个模块对应一个配置容器,里面塞满了参数和引用。

我记得第一次用tresos时,被它的“模块依赖图”搞晕过。你配一个Can模块,它可能依赖CanIf、CanTrcv、EcuM好几个模块。如果依赖没配全,生成代码时会报一堆错。嗯,这里要注意:配置顺序很重要。我建议先配MCAL层,再配ECU抽象层,最后配服务层。

核心区别:
  • EB tresos Studio:偏底层,BSW/MCAL配置为主,支持多核、多ECU配置
  • Vector DaVinci Developer:偏上层,SWC架构设计、系统级配置为主

再来看Vector DaVinci Developer。它更擅长做系统级设计。比如你要定义ECU的软件架构、SWC之间的接口、Runnable的触发方式。说白了,它解决的是“软件长什么样”的问题,而tresos解决的是“软件怎么跑在硬件上”的问题。

我在项目中遇到过一种情况:客户用DaVinci Developer设计好了SWC架构,但到了BSW配置阶段,发现某些信号路由不对。后来排查发现,是DaVinci里定义的Port和tresos里配置的CanIf通道没对应上。所以,两个工具的配置必须保持同步,否则后面联调会非常痛苦。

3.2 配置参数结构:容器、参数、引用

BSW配置的核心,说白了就是三个东西:容器(Container)、参数(Parameter)、引用(Reference)。你打开任何一个ARXML文件,看到的都是这三者的组合。

3.2.1 容器(Container)

容器就是参数的“文件夹”。一个容器可以包含多个子容器,也可以包含参数和引用。比如Can模块的配置,最顶层是一个CanConfigSet容器,里面包含CanController、CanHardwareObject等子容器。

<CONTAINER>
  <SHORT-NAME>CanConfigSet</SHORT-NAME>
  <SUB-CONTAINERS>
    <CONTAINER>
      <SHORT-NAME>CanController_0</SHORT-NAME>
      <PARAMETERS>...</PARAMETERS>
    </CONTAINER>
  </SUB-CONTAINERS>
</CONTAINER>

我曾经犯过一个低级错误:在tresos里复制了一个CanController容器,改了名字但没改里面的波特率参数。结果两个控制器跑在不同的波特率上,通信时断时续。排查了两天才发现。所以,复制容器后一定要检查所有参数。

3.2.2 参数(Parameter)

参数就是具体的配置值。它可以是整数、浮点数、枚举、字符串等。比如Can控制器的波特率、Can邮箱的ID类型(标准帧/扩展帧)、调度周期等。

参数类型 示例 说明
整数 CanBaudrate = 500000 波特率,单位bps
枚举 CanIdType = STANDARD 标准帧还是扩展帧
浮点 SamplePoint = 0.875 采样点位置
字符串 CanControllerName = "CAN0" 控制器名称

这里有个坑:参数的取值范围。有些参数在ARXML里定义了最小值、最大值和步长。比如某个定时器参数,范围是0~65535,步长是1。如果你配了个65536,生成代码时不会报错,但运行时定时器会溢出。我建议配完参数后,用工具自带的“验证”功能跑一遍。

3.2.3 引用(Reference)

引用是BSW配置里最容易被忽视的东西。它用来建立模块之间的关联。比如CanIf模块要引用Can模块的某个控制器,或者EcuM要引用某个唤醒源。

<REFERENCE>
  <SHORT-NAME>CanIfCanControllerRef</SHORT-NAME>
  <DESTINATION>CanController</DESTINATION>
  <VALUE>/Can/CanConfigSet/CanController_0</VALUE>
</REFERENCE>

引用路径写错了,是配置里最常见的错误。我记得有一次,一个同事把引用路径写成了绝对路径,但项目里用了相对路径的配置方式,结果生成代码时引用解析失败。嗯,这里要注意:引用路径的格式必须和项目配置一致。有的项目用绝对路径(以/开头),有的用相对路径。

我的小技巧:在tresos里,引用字段通常有下拉选择框,直接选目标容器就行,别手写路径。手写容易出错。

3.3 配置描述文件(ARXML)解析

ARXML是AUTOSAR的配置描述文件,说白了就是XML格式的配置文件。你看到的tresos界面里的所有配置,最终都会序列化成ARXML文件。反过来,你也可以直接编辑ARXML文件,然后导入到工具里。

ARXML的结构其实不复杂。顶层是AUTOSAR根元素,里面包含AR-PACKAGES,每个包下面有ELEMENTS,元素里就是容器、参数、引用。

<AUTOSAR>
  <AR-PACKAGES>
    <AR-PACKAGE>
      <SHORT-NAME>CanModule</SHORT-NAME>
      <ELEMENTS>
        <ECUC-MODULE-CONFIG>
          <SHORT-NAME>Can</SHORT-NAME>
          <CONTAINERS>
            <ECUC-CONTAINER>
              <SHORT-NAME>CanConfigSet</SHORT-NAME>
              <PARAMETERS>...</PARAMETERS>
            </ECUC-CONTAINER>
          </CONTAINERS>
        </ECUC-MODULE-CONFIG>
      </ELEMENTS>
    </AR-PACKAGE>
  </AR-PACKAGES>
</AUTOSAR>

你可能会问:为什么要直接编辑ARXML?在tresos里配不就行了?说实话,有些场景下直接改ARXML更高效。比如你要批量修改100个邮箱的ID,在界面上点100次鼠标,不如写个脚本改ARXML来得快。

警告:直接编辑ARXML有风险。格式不对、标签不匹配、引用路径错误,都会导致工具无法导入。我建议先备份原始文件,改完后用工具验证一下。

ARXML里还有一个重要的概念:模块定义(Module Definition)。它定义了每个模块有哪些容器、参数、引用。你看到的tresos界面,其实就是根据模块定义动态生成的。所以,如果你要自定义一个模块,就得先写模块定义文件。

我在项目中遇到过一种情况:客户要求增加一个自定义的BSW模块,用来做硬件抽象。我花了三天时间写模块定义,定义好容器结构、参数类型、引用关系。然后导入tresos,界面就自动生成了。嗯,这就是AUTOSAR的灵活性——一切皆可配置,一切皆可扩展。

3.4 本章知识体系

下面这张图,是我自己总结的BSW配置知识体系。你可以看到,工具、参数结构、ARXML文件三者之间的关系。

BSW配置知识体系 配置工具 EB tresos Studio Vector DaVinci Developer BSW/MCAL配置 SWC架构设计 系统级配置 配置参数结构 容器(Container) 参数(Parameter) 引用(Reference) 层级嵌套 类型定义 配置描述文件 ARXML格式 模块定义 配置序列化 导入/导出 批量编辑 三者关系 工具(tresos/DaVinci)读取ARXML文件 ARXML文件定义容器、参数、引用的结构 配置参数结构是ARXML文件的内容骨架 三者共同构成BSW配置的完整闭环 可可精品资料库

这张图里,我把BSW配置分成了三层:工具层、参数结构层、文件层。工具负责展示和编辑,参数结构是逻辑骨架,ARXML是物理载体。三者缺一不可。

好了,这一章的内容就到这里。BSW配置的基础,说白了就是搞懂工具怎么用、参数怎么配、文件怎么改。下一章我们会深入具体的模块配置,比如Can栈、Lin栈、存储栈。到时候再聊。