重新认识AUTOSAR Interface

核心:

  • 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_1/ mode_2 可以看作是enum(就很像是state machine),但之后仍需声明对应的implementation data type】 

 

mode switch interface的创建流程:

1 新建mode group,并声明下面有哪几种mode

在desired arxml 文件中右键创建mode group

重新认识AUTOSAR Interface_第1张图片

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

重新认识AUTOSAR Interface_第2张图片

3 DataType Mapping 里面 声明该 mode group 下面的mode 是什么implementation data type

重新认识AUTOSAR Interface_第3张图片

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即可

重新认识AUTOSAR Interface_第4张图片

至此: 任何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

重新认识AUTOSAR Interface_第5张图片

至此: 任何module都可以通过声明一个port,通过该 sender receiver interface对 DataElements_VariableDataPrototype_0 /DataElements_VariableDataPrototype_1 进行读写

3 DataType Mapping 里面 声明application data type 对应什么implementation data type

重新认识AUTOSAR Interface_第6张图片

举例:

当BswM想读取 DCM的 EcuReset 的mode,然后传递/通知给SWC的时候,具体流程是:

重新认识AUTOSAR Interface_第7张图片

1 当DCM模块里面配置了相应的0x11 EcuReset service之后,就会在DCM_BSWMD.arxml文件内自动生成对应mode group数据类型,并且在DCM_Cfg_SWCD.arxml生成相应的mode switch interface,以及实例化的ModeGroupPrototype_DcmEcuReset,以及相应的Pport

重新认识AUTOSAR Interface_第8张图片

重新认识AUTOSAR Interface_第9张图片

而且DCM的mainfunction里面会去对ModeGroupPrototype_DcmEcuReset进行赋值

【也就是说,DCM模块自己在通过ModeSwitchPoint不断的更新ModeGroupPrototype_DcmEcuReset这个全局变量,别的模块想得知该消息的话,通过该port去查询即可】

重新认识AUTOSAR Interface_第10张图片

重新认识AUTOSAR Interface_第11张图片

 

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】


 

你可能感兴趣的:(C语言+OS面试,开发语言)