核心:
- S/R interface: data element
- C/S interface: operation (with arguement)
- M/S interface: mode group (macro)
其实 data element,operation,mode group 才是核心,他们可以看作是用户自定义的变量类型。当定义了对应的interface以后,他们才实例化【为全局变量】,各个module可以通过该interface去 读/写 这些个data element,operation,mode group
Mode switch interface:
mode switch interface的架构:
-
mode switch interface
- mode group
- mode_1
- mode_2
- mode group
【这里的mode_1/ mode_2 可以看作是enum(就很像是state machine),但之后仍需声明对应的implementation data type】
mode switch interface的创建流程:
1 新建mode group,并声明下面有哪几种mode
在desired arxml 文件中右键创建mode group
2 创建mode switch interface,并把该mode group绑定在该interface下面
在desired arxml 文件中右键打开data dictronary 界面,创建mode switch interface,可以看到会实例化一个modegroup_hao 类型的(全局变量)ModeDeclarationGroupPrototype_Hao
至此: 任何module都可以通过声明一个port,通过该mode switch interface来对该ModeDeclarationGroupPrototype_Hao 赋值为mode_1 / mode_2,或者读取当前ModeDeclarationGroupPrototype_Hao 的值是 mode_1 / mode_2
3 DataType Mapping 里面 声明该 mode group 下面的mode 是什么implementation data type
Client server interface:
Client server interface的架构:
- Client server interface
- operation_1
- operation_2
【这里的operation可以看作是一个macro/flag,所以之后不需要声明implementation data type】
Client server interface的创建流程:
1 直接创建Client server interface,并申明下面有几个operation即可
至此: 任何module都可以通过声明一个port,通过该client server interface设定指定runnable由该operation【event】触发运行,或者触发产生该operation【event】
Sender receiver interface:
Sender receiver interface的架构:
- Sender receiver interface
- data element_1
- data element_2
【这里的data element_1/ data element_2 是靠ADT定义的全局变量,所以之后需声明对应的implementation data type】
Sender receiver interface的创建流程:
1 创建需要使用的application data type
直接创建application data type即可(需要创建compuMethod吗)
2 创建Sender receiver interface,并声明data element
上一步的application data type在这里用上了,而且产生了实例化的DataElements_VariableDataPrototype_0 和 DataElements_VariableDataPrototype_1
至此: 任何module都可以通过声明一个port,通过该 sender receiver interface对 DataElements_VariableDataPrototype_0 /DataElements_VariableDataPrototype_1 进行读写
3 DataType Mapping 里面 声明application data type 对应什么implementation data type
举例:
当BswM想读取 DCM的 EcuReset 的mode,然后传递/通知给SWC的时候,具体流程是:
1 当DCM模块里面配置了相应的0x11 EcuReset service之后,就会在DCM_BSWMD.arxml文件内自动生成对应mode group数据类型,并且在DCM_Cfg_SWCD.arxml生成相应的mode switch interface,以及实例化的ModeGroupPrototype_DcmEcuReset,以及相应的Pport
而且DCM的mainfunction里面会去对ModeGroupPrototype_DcmEcuReset进行赋值
【也就是说,DCM模块自己在通过ModeSwitchPoint不断的更新ModeGroupPrototype_DcmEcuReset这个全局变量,别的模块想得知该消息的话,通过该port去查询即可】
2 因为DCM在DCM_Cfg_SWCD.arxml已经生成了相应的mode switch interface,所以BswM直接查询该实例化的ModeGroupPrototype_DcmEcuReset的值即可
3 SWC是最终的接收端,于是SWC需要自己定义所需的mode group,然后定义相应的mode switch interface。然后BswM先创建一个与该mode switch interface下面mode group所对应的port,然后在action list 里面去对该mode switch interface赋值即可
【从上面的截图可以看出来,BswM对所有的(BSW和SWC)mode group prototype都有直接读取的权力(会自动生成相应的port和interface,user不用管),唯一要做的就是要告诉BswM输出的action 是 switch port 还是 request port】