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

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

[Classic AUTOSAR学习] SWC设计与应用(三)-- Communication Specification

SWC之间交换信息的抽象描述,是靠PortInterface来完成的,详细可阅读之前的文章:




但是呢,PortInterface仅仅描述了交换信息的结构,并不保证通信是否可靠,或者数据不可用时是否有(默认)初始值可以用。

什么是Communication Specification

如果想添加可靠通信或者默认初始值等信息,需要在PortPrototype上应用,换个方式说就是,和通讯最相关的属性应当关联在SWC的PortPrototype上。

这样的属性,在AUTOSAR中被称作为communication specification,简称为ComSpec。ComSpec是可选的,不是设计PortPrototype时的必选项。

几种基本类型

以上两张图是ComSpec的关系图,分别是P-Port和R-Port的,其中P-Port有三种:

  • ModeSwitchSenderComSpec

  • ParameterProvideComSpec

  • SenderComSpec

R-Port有五种:

  • ClientComSpec

  • ModeSwitchReceiverComSpec

  • NvRequireComSpec

  • ParameterRequireComSpec

  • ReceiverComSpec

当然,ComSpec不光可以定义在AtomicSwComponentType的PortPrototype上,也可以定义在CompositionComponentType的PortPrototype上。

ComSpec需要指定数据元素(dataElement)或者是操作(operation)的,对于同一dataElement或operation,是不允许在PortPrototype中有多个ComSpec去指定的。

如果是PRPortPrototype,可以同时定义RPortComSpec和PPortComSpec。

不同的Interface对应不同ComSpec:

PortInterfaceComSpec
SenderReceiverInterfaceSenderComSpec, ReceiverComSpec
ClientServerInterfaceClientComSpec, ServerComSpec
ModeSwitchInterfaceModeSwitchSenderComSpec, ModeSwitchReceiverComSpec
ParameterInterfaceParameterProvideComSpec, ParameterRequrieComSpec
NvDataInterfaceNvRequireComSpec, NvProvideComSpec

Sender-Receiver 通信的ComSpec

S/R通信可以是queued或non-queued的,如果对应的dataElement的swImplPolicy设置的是队列方式,那么对应也应该定义QueuedSenderComSpec或者QueuedReceiverComSpec。其他情况则对应地定义非queued的ComSpec。

ReceiverComSpec的dataElement不应当指定为一个ArgumentDataPrototype或ParameterDataPrototype。

如果NonqueuedReceiverComSpec设置了enableUpdate为True,无法做到指定一个dataElement,而这个dataElement的VariableAccess被设置为dataReadAccess。

一般来说,建议在设计SWC时为所有RPortPrototype的dateElement定义初始值,这样在有些时候在RTE层会很有帮助,例如:

  • 未收到dataElement时提供一个默认值

  • RPortPrototype未连接时提供一个默认值

  • 组合数据仅仅部分映射

另一方面,也有情况下是可以不需要设置初始值的:

  • SwAddrMethod的sectionInitializationPolilcy设置为NOINIT

  • SWC仅作partition内部通信(intra partition communication)

此外,你还可以设置DataFilter,用来做数据过滤。可以做数据过滤的类型有:字符,无符号整型,枚举型。

ReceiverComSpec.transformationComSpecProps用来定义当数据传输时,是否需要做对应的transformation,例如E2E transformation。

对应Sender方,以上概念同样适用。

networkRepresentation定义了dataElement在总线上的形式,dataElement的CompuMethod和networkRepresentation都可以用来做转换。

Client-Server 通信的ComSpec

PPortPrototype at Server Side

RPortPrototype和上图一样,只是少了queueLength的设置。

一个Runnable Entity可以实现不止一个ClientServerOperation,对应的OIE也需要设置。

Mode Switch 通信的ComSpec

Mode Switch通信的ComSpec,在PPortPrototype上还能指定ModeSwitchAckRequest,来表示模式转换请求的成功执行。

Parameter的ComSpec

如果你学习过上一节,你可能会觉得奇怪,ParameterInterface本身也不是做通信用的,为什么还能在ParameterDataPrototype上定义ComSpec呢?

虽然不会作实际通信,用不到任何通信总线,但仍可以给ParameterDataPrototype设置ComSpec的默认值。

NV Data的ComSpec

为NV Data定义的ComSpec主要是为了给对应NVData的RAM Block和ROM Block定义初始值。

Data Transformation 数据转换

TransformationComSpecProps可以用来为ECU间的通信指定Transformer,开发人员在添加这个定义之后,配置内容只会在ECU间进行通信的情况下,为data transformation选定了对应的data transformer才会产生效果。

EndToEndTransformationComSpecProps可以应用E2E transformer,而UserDefinedTransformationComSpecProps则可以应用用户自定义的transformer。

点赞催更

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