嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > [Classic AUTOSAR学习] SWC设计与应用(二)-- Port and Interface

[Classic AUTOSAR学习] SWC设计与应用(二)-- Port and Interface

VFB的概念解释了不同SWC之间的通信范式:基于操作通信的client/server,以及基于数据通信的sender/receiver。由此需要定义不同的PortInterface,例如SenderReceiverInterface和ClientServerInterface。

什么是Port Interface

如果你对面向对象的编程语言有了解,Interface在PHP,JAVA等中都有类似的概念。

在AUTOSAR中,PortInterface描述了交换信息的静态结构,当然,你看到静态这两个字,可能会问还有动态数据可以交换吗?你说的没错,只是这个动态数据并不由PortInterface来定义,而是需要定义在PortPrototype当中。

当isService属性设置为false时,PortInterface中对信息交换所支持的编码格式如下:

  • 2C: Two’s complement

  • IEEE754: floating point numbers

  • ISO-8859-1: single-byte coded character

  • ISO-8859-2: single-byte coded character

  • WINDOWS-1252: single-byte coded character

  • UTF-8: UCS Transformation Format 8

  • UTF-16: Character encoding for Unicode code points based on 16 bit code units [16]

  • UCS-2: Universal Character Set 2

  • NONE: Unsigned Integer

  • BOOLEAN: This represents an integer to be interpreted as boolean

Sender-Receiver

SenderReceiverInterface一般用于典型的异步通信,有一个发送方和一个或多个接收方。

在SenderReceiver Interface中,可以定义一个或多个data element:

Type就是这个data element的data type reference。

Impl Policy用来指定接收方如何处理接收到的数据,例如,Queued---队列方式接收,STANDARD---以最后收到的为准mNEASYRENEBT-POINT---仅用作校准,不会由SWC直接读取。

Invalidation Policy指定数据非法时如何处理:KEEP---继续交给SWC处理,REPLACE---用初始值替换,DONT-INVALIDATE---不做检测,EXTERNAL-REPLACEMENT---使用外部变量进行替换。

Init Value就是初始值。

Addressing Method用来定义存储分区,例如数据或者代码存在哪个段(section)当中。

Sw Calibration Access指定数据是否能被标定工具访问。

对于Sender-Receiver Interface,是可以1:n或者n:1的,即可以多个接收者,或者多个发送方,但是,无法做到m:n,即多对多是不允许的。

Client-Server

在C-S通信中,客户端可以请求支持这一操作的服务端进行执行,当服务都执行结束后,既可以将结果发送回客户端(同步操作调用),也可以客户端主动检查操作是否结束(异步操作调用)。

一个客户端不允许连接到多个服务端,也即同一个操作不应当可以出现多个服务都都能完成的情况。

不同于S-R定义了传输数据的每一个部分,C/S Interface定义的是一组ClientServerOperation集合。

需要注意的是,同一个Operation不能同时存在于不同的C/S Interface当中。

在Operation当中,可以有0个或多个Arguments,可以为他们设置方向,in代表需要输入参数,out代表操作会有返回值:

在ABuilder中设计Interface时,添加的Operation是顺序无关的,而在一个operation中添加的Arguments则有相应的顺序。

同时,你也可以给PortInterface定义ApplicationError,可以定义一组宏定义,用来作为操作调用的返回值或需要返回的信息。除了E_OK应当定义为0,其他的error code应当在1~63的范围之内。

Trigger Interface

使用Trigger Interface进行外部触发事件通信,也就是说,触发源会触发相连的触发接收器执行相应的Runnable Entity,典型的应用场景是一系列Runnable Entity按照顺序执行。

Trigger Interface中可以定义一组Trigger,在SWC之间通信,每一个Trigger代表了触发接收器讲以何种方式动作。

如果希望根据时间周期或者角度(例如每次经过360达到100度时),那么需要设置Trigger Period。

实际运行时可能一个动作还没执行完,就再次收到trigger,这个时候可以设置Implementation Policy为QUEUED,队列处理。至于队列长度需要在RTE中完成配置。

模式通信

在两种典型情况下,需要用port来传递模式信息:

实际模式转换信息由模式管理模块发送给它对应的客户端组件来完成模式转换。

模式转换请求由任一组件发送给模式管理模块

首先需要注意的是,模式转换通信只存在于本地,不能连接不同ECU上的port。

想要进行模式转换通信,SWC需要定义ModeDeclarationGroupPrototype,而这个需要在ModeSwitchInterface中选中reference。

参数通信 Parameter Communication

ParameterInterface并不会传输实际的数据,它一般用于SWC的标定。

NvData Interface

非易失型数据一般由一个特殊的SWC---NvBlockSwComponentType来提供,

在这个SWC中,需要实现对应的NvDataInterface。

这里暂不展开介绍NvBlockSwComponentType,待之后再来专项讲解。

六种Interface的关系

这张图可以很好的解释几种Interface的类别及关系。

PortGroup

在一个SWC中,可以定义一个逻辑意义上的PortGroup,它包含一些其他的PortPrototype,可以用于模式管理的输入,例如在某些模式下PortGroup相关的总线信号通信可能会被抑制。

虽然PortGroup的声明和RTE并没有关系,但PortGroup需要定义在VFB这一层,这是因为PortGroup代表的含义是在VFB这一层做的设计决定并产生影响。

PortPrototype可以属于多个PortGroup,PortGroup可以有ServiceNeeds用来生成对应BSW中的配置。

MODEMANAGEMENT和PARTIAL_NETWORKING这两个类型的PortGroup是AUTOSAR标准保留的两个种类。

点赞催更

"阅读原文"关注作者知乎