重新认识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

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】


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值