2.AUTOSAR SWC设计概述

1.SWC概述        

        SWC,全称Software Components,运行在RTE之上,属于应用算法逻辑这一层,如下图:

21cdded7be1044a4a0d24390fdeb2c00.png

        由1.AUTOSAR的架构及方法论中我们了解到该框架的提出就是为了减少平台移植成本、加快研发效率;这也就是说在AUTOSAR框架下,SWC作为组件是需要被重用的,意味着一个成熟的软件功能组件可以被打包成一个库,然后哪里需要哪里搬。

        做个类比,把SWC这个东西想象成乐高积木,可以按照我的想法任意使用SWC来构建我想要的系统;我不用管SWC里面具体是什么材料构成的(具体建模细节),只需要知道他有什么功能,就可以用来拼接,这样极大地减轻了开发工作量。(当然,最开始SWC里的建模是必不可少的,具体详见 Create AUTOSAR Software Component in Simulink

        但是光有这个思想和框架还不够,为什么呢?再做个类比,带兵打仗临时东拼西凑一队人马,这一对人想象成SWC,但是有可能他们语言不通呀,怎么办?大家协商一个易于理解并且简单的口令或者手势,这样一有紧急情况,通过这个口令或手势就可以快速行动。这里的口令或手势就引出了我们今天要重点讨论的基于RTE的SWC 通信机制与ports。

2.SWC通信机制和Port详解

        在AUTOSAR_EXP_VFB的Spec 3.1章节,明确提出,每一个SWC都有所谓的“ports”,用于与其他SWC进行交互。

        根据port的输入输出方向,又分为Provide-Port(PPort)、Require-Port(RPort)和PRPort;这么说起来有点抽象,还是以一个图说明:

10d2ffa1988d4715a2897c7d70d1eec6.png

        PPort与RPort相连接,通常是P-Port提供数据或者服务,R-Port接收数据或者请求服务;数据很好理解,这里不讲;关于服务会在后面具体讲解,这里简单说即是一个SWC(Client)通过某种方式去调用另一个SWC(Server)的服务,Server处理完后会返回结果。

        那么,AUTOSAR中定义了多少port类型呢?如下表:

Port类型用途PPortRPortPRPort
Sender-receiver用于数据传输交互,可以一对多,也可以多对一ddcd84c8d4cf44d098150414cf7d3f1d.pngf24f85cafb564696b080b10f842131e2.pngc3cc1dd6abe447fa9aa5fd11694fcca8.png
Client-serverserver提供服务,多个client可以调用其服务22a2371b292241aea99ab927bcf43de1.png2f389c2ef854497e821d76b5138dad80.png9b8898c073444dfba8a53b5367498256.png
Parameter Interface主要是用于标定的接口(实际开发好像没用到)cd6c694788da4c80b12fa1ecc830b895.png80a6003dec35464bad1b4e6d2aef98dc.png 
Non-volatile Data INterface提供NvRam block中元素级别的访问0bcebd26565f4f5899f09a71db0d037e.png3382d3a7f9da4325aba63197f2071ac2.png3c64456662ed4489a26b096c03d8adbf.png
Trigger InterfaceSWC可以触发另一个SWC里的某些功能执行1f4e6edc7fcb4fb0b7741ef3007988e6.png9f95c6488c41479998f86e43b28920df.png6606889c74484ef2a26f9b23db977e57.png
Mode Switch Interface同步当前Ecu的模式,或者更新模式4f752eb1c1bf43d09a5f8e6a5abd0ca8.png026579b9c397433fb275b42e07fccf6e.pngce9e1e74ba644c0e97dcca8f0d918d40.png

       那么一个座椅加热的SWC有可能就长如下这样:

731f77fd2a3e4751a5c1c970a7926906.png

        此外,对于上述每一种类别,在图标上都有很多变体,具体大家可以详见AUTOSAR_EXP_VFB 3.3章节;这里就以sender-receiver为例简单说明:

a2d9f54641e649eb87f0ea18e255275a.pngRPort读取或者使用数据元素的具体值
96182ca5f18a4a06ae880d7eb1de543b.pngPPort提供数据元素的具体值
8bd010bf95da4ca0a8dbc6651ca0aa86.pngRPort从一个AUTOSAR service中获取数据元素的具体值
5c55191fd467454c9c8b88b59f72499e.pngPPort给一个AUTOSAR service提供具体值

        AUTOSAR Sevice就是我们通常意义的BSW这一层的内容,基本上看到图标底色是黑的,多半都是AUTOSAR Sevice。从这里,我们就可以看到AUTOSAR的精细之处,即使数据来源也是进行了分层和解耦,如下:

2e5fa6fc1f324797a12892655c494234.png

        既然数据、服务等都可以通过port来获取,那么我们就要来看看SWC里面是怎么用这些数据和服务的,这又引出了今天的第二个话题 Runnable

3.SWC内部行为--Runnable

        其实,对于做过AUTOSAR基础软件的朋友来讲,Runnable就是由软件开发人员写的代码或者模型生成的代码,需要周期调度或者事件触发,如下:

9d84125aef584b1faf932c686feb3d83.png

         Runnable通常属于一个SWC,但是需要在工具里配置它的RTE触发事件。

bba72cf7dd2748f0a7224f31c4113523.png

        那么具体有哪些方式可以触发Runnable呢?

        通常包含时间周期触发、Data-Received触发、服务调用触发等。

ad8071fc26764d1f9cb184ddb48e6649.png

        到这里其实对于SWC的概述就已经结束了,但是我原来在做Devoloper配置时经常被里面的数据类型搞晕,比如说IDT、ADT等等;所以这里再衍生一节(其实是为了达成3000字目标,哈哈哈)

4.RTE 数据类型解惑

         我们还是以S/R(Sender-Receiver)接口为例,它是用于传输数据元素的具体值的,那么这个值是必有数据类型定义的,如下图:

37a4db15aa8b4847aef6ee57e27e8e88.png

        你看,speed数据类型是SpeedType,odo是DistanceType。这是给应用层看的,但实际它 传到BSW上应该是什么类型呢?这里就引出了AUTOSAR的三种数据类型

  • ApplicationDataType

        用于RTE上设计SWC的应用类型,一个抽象概念,简称ADT。

  • ImplementationDataType

        相当于C代码级别的数据类型,有点类似typedef,简称IDT;

        ADT必须映射到一个IDT上面

  • SwBaseType 

       ImplementationDataType对应的实际平台支持的数据类型

5.SWC定义

        有了上述基本概念,我们现在来看如何定义一个SWC。

        首先我们要有这个思路:SWC开发者应该使用ADT这样抽象概念来定义数据类型;因此很有可能不同供应商的SWC内部使用的数据类型是不一样的,因为有可能A用float类型来定义车速,B却用32bit整形来定义车速。

        有了这个前提,我们来定义ADT。

        如定义ADT:开关状态SwitchSts,值为On/Off;IDT使用Boolean类型;但是这个ADT实际上不会出现在生成的C代码中。

        定义好了开关量,接下来就要使用port将两个SWC连接起来,如下:

8feddfe10c124c65b473566d08db16e2.png

        因为我已经给SWC定义了S/R接口,使用SwitchSts 。我们就可以在arxml里看到如下定义:

c5868bd542cc47bbb82e2ddb5e168a65.png

        最后我们来定义SWC这个组件的属性,包括SWC名字、Port定义、Runnable、触发事件、数据类型映射等,arxml模板如下:

2e9e5389271b41bc9d6d01dd88fb22e0.png

        当然,我们不会使用arxml去编辑,那就太low了,通常配置工具是Vector的DaVinci Develpoer或者ETAS的 RTA-RTE等。但是arxml、SWC和代码的联系我们还是要略懂一二:

b988211e3ef34bbb92b4743a175a6ec9.png

        PS:最后,突然想到我们经常在配置中看到的SR通讯的Implicit\Explicit,总结如下:

1829a58c016d491496c3d120f4a64f33.png

         从具体代码来看:

Implicit:直接给数据的地址

190484a371334128b5a9fb5ee5d867a5.png

 Expllicit:通过API去访问,相当于一个搬运的过程c86ba0d173c0487e8491432e04e59253.png

6.小结

        上面几节,对SWC的通信机制、port类型和数据类型进行描述,有了这些基本概念,基本上在配置RTE的时候我觉得是够用了。

        就这样吧,晚安!

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值