VECTOR 变种管理(IDM)原理

一、CONFIGURATOR评判准则criterion

评判准则是通过一个变量值判断变种的方法

二、导入多个变种的DBC

在input files里导入DBC,选择变种。

导入以后,工具自动生成变种配置xml文件。

三、查看CAN/CANIF/COM/PDUR模块

在CONFIGURATOR里可以查看CAN 相关模块的配置,RX PDU按照变种生成PDU,所有变种共同接收的消息生成一个PDU,其他不同的按照变种独自生成PDU。

四、各BSW模块的变种使能

4.1 ECUM模块

POST-BUILD LOADABLE配置

如下图它将只生成EcuM_GlobalPBConfig_Ptr此类型包含各个模块的配置类型。

头文件EcuM_Init_cfg.h

POST-LOADABLE配置会同时生成指针变量EcuM_GlobalPBConfig_Ptr  EcuM_GlobalPCConfig_Ptr

EcuM_GlobalPBConfig_Ptr在初始化时,指向EcuM_GlobalConfigRoot并根据变种来选择,这个变量保存了所有变种且所有模块配置成POST-BUILD-LOADABLE的结构体指针。

EcuM_GlobalPCConfig_Ptr在初始化时,指向EcuM_GlobalPcConfig并根据变种来选择,这个变量保存了所有变种且所有模块配置成PRE-COMPILE的结构体指针。

4.2 BSWM模块

    然而BswM模块是PRE-COMPILE属性,它的指针被生成后放在EcuM_GlobalPcConfig里,如下图所示。其中RTE模块只支持PRE-COMPILE模式,不支持POST-BUILD-LOADABLE,一定会生成EcuM_GlobalPcConfig

它将打开以下开关,并生成变种结构体。

#define BSWM_POSTBUILD_VARIANT_SUPPORT STD_ON

        BSWM模块的变种是指模块内部的变种选择,不同的变种的RULE和ACTION 不一样,它的变种信息由BswM_PreInit()在EcuM_AL_DriverInitOne阶段调用,它在ECUM变种选择之后。

        只有BswM_PreInit是真正的初始化此全局变量,作为变种的选择,后续的BswM_Init没有变种选择的操作。将变种信息的配置的地址传递给BSWM的全局变量BswM_ConfigPtr中。

4.3 RTE模块

RTE只支持PRE-COMPILE配置,不支持POST-BUILD LOADABLE

RTE变种全局变量信息保存在Rte_VarCfgPtr里,它在 EcuM_StartupTwo 里会被 SchM_Init()初始化。

4.4 COM模块

     为了支持多个变种,每个模块将把所有的变种信息保存常量结构体中,并同时生成不同变种的结构体宏定义,这些宏定义会被收集到ECUM的总配置结构体中,模块是配置为PRE-COMPILE配置,则放到EcuM_GlobalPcConfig[]的常量里。

     支持POST-BUILD LOADABLE 则放到EcuM_GlobalConfigRoot变量里。

五、初始化变种的选择

5.1 关键变量及初始化流程

变量名

描述

备注

EcuM_GlobalPBConfig_Ptr

ECUM初始化时指向识别的变种指针->EcuM_GlobalConfigRoot[ID]

任意某个模块使能POST-BUILD-LOADABLE,则生成此指针变量。

EcuM_GlobalPCConfig_Ptr

ECUM初始化时指向识别的变种指针->EcuM_GlobalPcConfig [ID]

无论某个模块使能是否POST-BUILD-LOADABLE还是PRE-COMILE,都生成此指针变量。

EcuM_GlobalPcConfig[]

常量,它的元素都是指向配置为PRE-COMIPLE的模块的结构体指针。

保存了RTE的变种信息。

EcuM_GlobalConfigRoot[]

常量,它的元素都是指向配置POST-BUILD-LOADABLE模块的结构体指针。

Rte_VarCfgPtr

指向RTE的变种信息,即变种ID号。

值为0123.。。。

它在 EcuM_StartupTwo 里会被 SchM_Init()初始化当前的变种

EcuM_Init初始化在进入main函数后被调用,它将完成进入OS前所有和硬件相关的初始化。在EcuM_AL_DriverInitZeroEcuM_AL_DriverInitOne之间,使用EcuM_InternalDeterminePbConfiguration完成变种的选择。

    变种选择分为两种方式:

    a.任意一个模块使能了POST-BUILD-LOADABLE,则EcuM_GlobalPBConfig_Ptr初始化EcuM_GlobalConfigRoot[]的变种。EcuM_GlobalPCConfig_Ptr会被初始化为 EcuM_GlobalPcConfig[]变种。

    b.若只有PRE-COMPILE被使能,EcuM_GlobalPBConfig_Ptr不生成;则只有EcuM_GlobalPCConfig_Ptr会被初始化为 EcuM_GlobalPcConfig[]变种

EcuM_DeterminePbConfiguration用户实现变种识别

如果ECUM_CONFIGURATION_VARIANT_POSTBUILD_LOADABLE ==ON,ECUM选择了可加载选项,则初始化使用全局变量EcuM_GlobalPBConfig_Ptr  否则使用EcuM_GlobalPCConfig_Ptr ;无论哪种配置EcuM_GlobalPCConfig_Ptr都会被初始化成PRE-COMPILE的配置,它包含了RTE的配置信息。

 

5.2 初始化方法

模块的初始化分为两种方式:

  1. 手动初始化
  2. BswM负责初始化

两种方式没有本质区别,初始化方法是一样的。模块为PRE-COMPILE配置的,

    传入变种指针EcuM_GlobalPBConfig_Ptr;模块为POST-BUILD LOADABLE配置的,传入变种指针EcuM_GlobalPCConfig_Ptr

手动初化:

以下为例程:

初始化配置根常量EcuM_GlobalConfigRoot"EcuM_Init_PBcfg.h"文件中,它保存了所有变种的配置引用。

COM为例,COM模块会为通用指针映射到PB还是PC

#define Com_Config_Driver_Ptr        &(Com_PBConfig.Config_Driver)

BSWM进行初始化:

六、RTE层的变种选择

使用developer打开工程文件,在data mpping里已经包含所有变种的信号名。

如何根据变种来Mapping通信接口:

a.在developer里把不同的变种信号全部生成接口

   如下图,点击create ports from signals。

使用右键选择从信号创建接口,即可在PORT里增加接口类型,以供其他模块访问调用。创建接口时,选择对应的复合组件里的组件实例。它将会在组件实例里生成对应的接收接口。

在信号创建端口时,选择实例化的SWC。

点击完成后,将会生成对应的接口类型。

完成后可在PORT INTERFACE区域找到新增这些接口。

在SWC里,相应的接收端口也会自动生成,这样就减少了在SWC里手动增加接口的步骤。然后在SWC1里我们可以把接口实例化的名称改成我们想要名称。

b.将两个接口在SWC的函数里引用 ,则可以生成接口的声明定义,在RTE.C里生成接口的函数体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值