Vector SIP替换

背景

项目前期开发,正式包还没有拿到,使用的其他项目的代码包。拿到了正式包后,需要做替换。然后,根据具体情况解决报错。

DaVinci工程配置更新

Dpa工程SipId变更

Can模块配置变更

  1. 需要新建一个vCan模块,并引用。按照提示删除无法解析的配置,然后重新加载。

其他说明:

  • 应用报文:一般配置成FULL CAN类型,因为不需要缓存,使用最新接收的数据就行。但是,J1939的Canid有优先级的概念,如果发送方更改了报文的优先级,这个报文仍然是同一报文,不得以不同方式进行解释,所以实际上是一个范围的CanId,只能配BASIC CAN。

  • 诊断报文:配置成BASIC CAN类型,因为诊断报文的请求/响应不能错序,需按照顺序处理,且数据不能覆盖。

  • 网络报文:接收的选择配置成BASIC CAN类型。

vCan模块新增

有一部分配置,从之前的CAN模块分到了vCan。控制器选择MCAN0,其他配置大部分都修改不了,保持默认值。

CanIf配置变更

所有CanIfRxPduType 配置为static。

Dem模块配置变更

  1. 扩展数据记录(ExtendedDataRecords)的存储和更新触发条件配置为TEST_FAILED

  2. DemDebounceAlgorithmClass从DemEventClass容器拆分出来了,需要重新配置Debounce的引用

J1939Tp模块配置变更

配置发送的源地址

Rte模块配置变更

因为该项目不用AUTOSAR OS模块,所以不存在所谓的Rte。下面这个配置是必须勾选的,激活Bre。

Rte出现了三种错误,后面两个错误断开前期创建的swc port连接可以解决,但是第一个错误尝试了只能删swc。

service的swc没问题,app的要在software design删掉实例化对象。

Developer

Developer的代码生成不了,app的swc删了,本来也不用生成了。

BSW

替换所有的静态代码,旧的sip包有部分文件在新的包已经找不到了,而且新的包也添加了一些文件。
所以,将之前所有模块的静态代码文件删掉,再从新的包把对应模块的全部文件复制过去就行了。

BRE介绍

MICROSAR Classic BRE 是 AUTOSAR RTE的一个子集,被称为基础运行环境。由于 RTE 在 AUTOSAR 架构中是强制性的,BRE 提供了 RTE 的基本功能集,简化了不使用AUTOSAR 软件组件(SWC)架构的项目创建。

BRE 基于 MICROSAR Classic RTE,但功能集被限制在了更少的特性上。因此,许多 API 和实现本身继续引用“RTE”。

功能描述

特性

BRE功能概述:为服务SWCs,生成应用程序头文件。

SchM功能概述:

  • SchM负责执行周期性任务和由后台事件触发的任务,这些任务是基础软件层(BSW)的主要功能。

  • SchM提供对BSW模块的独占区域处理,确保在访问共享资源时避免冲突,提供类似互斥锁的保护机制。

  • SchM负责生成操作系统任务体,这涉及到任务的调度和同步,确保任务按照预定的顺序和时间执行。

初始化

BRE是AUTOSAR架构中的一个组件,它通过调用 Rte_Start函数来初始化。

SchM是负责调度任务执行的组件,它通过调用 SchM_Init函数来初始化。

这个初始化过程是由ECU状态管理器(EcuM)负责执行的。

BRE集成

在使用 BRE(基础软件运行环境)时,没有可用的SWC设计,因此应用程序必须直接实现BSW 调用的 RTE API。

注意:BRE生成了由BRE调用且需要应用程序实现的API的空函数体。这些函数体可以在 Rte*.c 文件中找到,并通过 #ifdef BRE_ENABLE_UNCONNECTED_RTE_APIS 从编译中排除。

集成步骤

  1. 配置并启用 BSW modules
  2. 激活BRE
  3. 配置BRE
    Task Mapping of BSW Main-Functions
    Exclusive Area handling
  4. 使用 RTE generator生成 BRE
  5. 在应用程序中实现对BSW的调用
  6. 通过实现BSW所需的RTE API来修复链接错误。Rte*.c 文件可以用作实现的基础。

编译报错

重定义

Com_Unity.c 里面include了一堆的C文件。当使用 #include 包含一个 .c 文件时,实际上是将该文件的内容直接复制到包含它的文件中。这里我的做法是,BSW不包含这个 Com_Unity.c文件。PduR_Unity.c 也是一样的处理。

链接报错

搜索 BRE_ENABLE_UNCONNECTED_RTE_APIS宏定义,可以发现有很多空函数体,如下图。这些函数体需要我们自己实现,原因参见Bre章节。

我的做法是新增了一个 bre.c ,用于实现上述函数。具体做法是

  1. #define RTE_CORE
  2. include之前SWC的头文件
  3. 将以前的Rte.c部分接口复制过来(主要是队列的实现,以及报文收发接口),不需要的部分删掉
  4. 服务类的swc的port,复制之前生成的接口,并传参调用
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2026 wrd
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信