接下来看看这个Port是什么东西?
在Davinchi Developer工具配置AUTOSAR中的Port的时候,遇到了两个概念: Port Prototype和Port Interface。
也许你会潜意识任务Port不就是Interface吗,Prototype是个啥玩意?
之前我也这么天真地认为,好长一段时间被AUTOSAR理解的这几个概念折腾得糊里糊涂。
1 . Port Prototype和Port Interface
对于这个问题,找AUTOSAR官方文档看看:
PortPrototypes also referred as Ports in some places are the well-defined connection points for communication between different software-components. A PortPrototype is either required type or provided type.
这句话的意思是说,PortPrototype可以理解是端口,定义两个不同Component的连接点,用于两者之间通信。PortPrototype可以是Port 提供者(PPortPrototype)或Port的接收者(RPortPrototype)。
AUTOSAR官方对PortPrototype模型是这样的:
看不懂?
没关系!我举个例子,你一定能理解。
假设王家坝的王二狗家是一个Component,李家村的李翠花家是另一个Component,王二狗要娶李翠花,李家丈母娘要彩礼。那么王二狗家提供彩礼,就可以理解是PPortPrototype,而李翠花家接受彩礼,就可以理解为RPortPrototype。
这里引入另一个问题,彩礼怎么给过去呢,是转账还是用个皮箱子装着现金过去,这个就可以理解是彩礼的通信,即PortInterface。
这个好理解吧,那么接着来
其实,AUTOSAR官方是这样定义Port Interface的
The PortInterface defines the kind of information transported between two PortPrototypes. PortInterfaces are used to support a design-by-contract workflow. In other words, PortInterfaces represent a pivotal point in the AUTOSAR concept.
其实,我们可以简单粗暴地理解,Port Interface是将两个Component连接起来的桥梁。
2. SWC和Datatype的Prototype概念
提到Prototype这个概念,其实SWC也有Prototype这个东西,就想上次新建的SWC的例子,在Design窗口创建这个SWC就需要填写这个Prototype的名称。
按Vector支持的说法,这叫将SWC实例化。
上次的文章没有很关注这个概念,直接将这个名称填和Component Type同一个名称了,就看到的名称是CtApMySwc:CtApMySwc了
其实,更严谨地,这个Prototype处的名称,应该填C p ApMySwc,即变成 CpApMySwc : CtApMySwc ,这样就更容易区分了。
除了SWC,Data Type也有个类似Prototype概念,那叫Application Data Type和Implement Data Type。
其实这个也很好理解,前者是在Developer中概念上得东西,后者是具体实现生成具体代码上得东西。
举例,上面讲到的彩礼,就好比是Application Data Type,而彩礼具体是什么,一部豪车、一栋房子或者一大笔钱,都可以是彩礼的具体实现方式,即Implement Data Type。彩礼是大家社会面口头上讲的东西,而钱、房子车等这些是亲家双方表达彩礼的实际的东西。
这个在后面专门将Data Type的时候详细讲解下,当然本次的教程也会用到这两个东西。
好了,搞全套了,SWC、Port和Data Type的这些让人糊里糊涂的概念扯清楚了。
3. Port Interface的种类特点
Prototype,像是一个抽象的象征性的概念,可能是为了便于人理解的,其在代码中却不是一个真是明确的存在,所以以下多讲下Interface,不太多关注这个Prototype的细节了。
一个发一个收,这种叫Send/Receiver Port
还有一种叫Client/Server Port
放在Component上就上这样的
以上这个图可能是大家经常看到的关于SWC Port的图了。
那么,Send/Receiver和Client/Server有啥区别。
继续王二狗和李翠花的例子,在他们两家结为亲家之后,亲戚之间是要走动的,比如李家托人送点礼物为王家,就好像是Send/Receiver,一个发一个收,很好理解。
那么,如果李翠花要回娘家,顺便带点礼物会来给王家,这就像是Client/Server,这个李家就像是提供了“跟李翠花唠唠嗑顺便给点小礼物”的这种服务,姑且叫它Server。
这样的比喻不是很严谨,如果你对这些概念很困惑,请暂且这样理解,如果你已经很理解了,就忽略这个比喻。
问题1:Port Interface的通信方式只能是一对一(1:1)的吗?
并不是,可以是一对多(1:n)或多对一(n:1).
怎么理解呢?就拿送礼物来说,李家可以送礼物给王家,也可以送礼物给孙家等啊,对吧。当然,孙家也可以送礼物给王家啊。
这就是一对多和多对一的概念了。
问题2:Port Interface只能传一个内容吗?
也不是,可以传多个元素,组成队列来传。
比如,李家托人送了一只鸡给王家,突然想了下,地里的大葱挺好的,再送一把大葱过去。对于王家,先收到了鸡,然后有收到了大葱,像一个队列传过来的。
有些读者就会想到了,这个送的礼物,鸡、大葱、钱、房子等等,这些就是Data Type了,在AUTOSAR中,可以是基本的uint8,、uint32等,也可以是自己创建的IdtCaili(彩礼)这样的名称,从C的角度来看就是结构体啊、数组啊等等复杂的数据类型了。这些后面再讲。
问题3:RTE在SWC之间的传输起到什么作用?
好问题,这个就比较深入了,后面具体的配置会讲解。
例如王二狗和李翠花的例子,彩礼是他们直接就给过去吗?并没那么简单,他们是出于中国这种社会风俗中的,这个复杂的社会里面的种种就是这个RTE了,例如送彩礼送钱如果是转账,那要通过银行吧,就算送现金,也得找个皮夹子吧,这些东西都是这个社会RTE提供的,RTE就是这个婚姻风俗的运行环境。
那么实际上他们是这样的。
4. AUTOSAR的多种Interface
我们都讲到社会这个RTE了,有必要讲讲其他的Interface了
这里有三种Interface,其实这个在《 这次我要通过Interface来贯穿整个AUTOSAR架构 》有讲过这个。
1. AUTOSAR Interface
AUTOSAR Interface 定义了软件组件和/或BSW模块之间交换的信息。该描述独立于特定的编程语言,ECU或网络技术。 AUTOSAR Interface 用于定义软件组件和/或BSW模块的端口。通过这些端口,软件组件和/或BSW模块可以彼此通信(发送或接收信息或调用服务)。AUTOSAR使得可以在本地或通过网络在SoftwareComponents和/或BSW模块之间实现这种通信。
2. Standardized AUTOSAR Interface
Standardized AUTOSAR Interface 是其语法和语义在AUTOSAR中标准化的 AUTOSAR Interface 。 Standardized AUTOSAR Interface 通常用于定义AUTOSAR服务,这是AUTOSAR基本软件向应用程序软件组件提供的标准化服务。
3. Standardized Interface
Standardized Interface 是一种在AUTOSAR中标准化的API,无需使用 AUTOSAR Interface 技术。这些 Standardized Interface 通常是为特定的编程语言(如C语言)定义的。因此,通常在始终位于同一ECU上的软件模块之间使用 Standardized Interface 。当软件模块通过 Standardized Interface 进行通信时,将无法再通过网络路由软件模块之间的通信。
|