当前位置:网站首页>【AutoSAR 三 RTE概述】
【AutoSAR 三 RTE概述】
2022-07-02 23:49:00 【柯宇谦】
AutoSAR 三 RTE概述
1 RTE 概述
RTE提供了SWC的运行环境。
RTE的作用有点像一个快递中转站或者说是电话接线员(就是上个世界那种要先打电话到接线员那里,然后通过接线员转接电话线到目的地),其作用就是将一个SWC的信息通过RTE连接到其他SWC或者BSW上。且RTE具有管理这些信息的功能,比如接收的SWC正忙(您所拨打的用户正忙),那么RTE负责让发送信息的SWC等待,或者做其他处理;RTE还能触发SWC,就像是这时接收的SWC在睡觉,这时发送的SWC发信息来了,那么RTE就要把接收的SWC叫醒起床。
2 RTE 作用
• 提供跨ECU/ECU内部的通信管理。
• 提供对runnable的管理功能(触发、唤醒等,简单说就是runnable需要映射到Task上运行嘛,而这个映射就是通过RTE具体实现的)。
• 之前我们不是提到了VFB(虚拟功能总线),RTE就是VFB的具体实现。
• 在Vector的工具链中,RTE是自动生成的。
2.1 RTE对Runnables的运行支撑
- 通过RTE给runnable提供出发事件
- 通过RTE给runnable提供所需资源
- 将BSW和SWC做隔绝
2.1.1 runnable 的触发条件
• 初始化事件:初始化自动触发
• 定时器事件:给一个周期定时器,时间到了就触发
• 接收数据事件(S/R):Receiver Port 一旦收到数据,就触发
• 接收数据错误事件(S/R)
• 数据发送完成事件(S/R):Send Port 发送完成,就触发
• 操作调用事件(C/S):当调用到了该函数的时候
• 异步服务返回事件(C/S):之前说过C/S可以在异步下运行,就是说当我调用一个Server函数,但是我是异步调用的。
那么该被掉函数作为一个线程和当前的运行程序并行运行,
当被调函数运行结束返回(Return)的时候,这时触发异步服务返回事件
• 模式切换事件
• 模式切换应答事件
2.2 RTE对Ports的支撑
2.2.1 特征
扮演SWCs和BSW的交流途径
• 作为VFB的具体实现
• 作为S/R接口的通信实现
• 作为C/S接口的通信实现
• ECU内部通信/跨ECU(通过COM)
• 实现AR-COM的回调功能,具体实现是在SWC中完成的,RTE负责完成这个回调机制
其他特征
• 提供了实现数据一致性的机制
• 支持简单和复杂的数据类型
• 对SWC类型的实例化
2.2.2 S/R接口的不同方式
- 直接调用(Direct)
相当于有一个全局变量,runnable可以直接读写这个变量
Std_ReturnType Rte_Read_<port>_<data> (<DataType> *data)
Std_ReturnType Rte_Write_<port>_<data> (<DataType> data)
- 缓存调用(Buffered)
相当于将全局变量先复制到一个runnable的局部变量中,再操作这个局部变量,最后把这个局部变量再赋值到全局变量中。在runnable操作这个局部变量期间,全局变量是不会改变的。
<DataType> Rte_IRead_<r>_<port>_<data> (void)
void Rte_IWrite_<r>_<port>_<data> (<DataType> data)
- 队列调用(Queued)
因为数据不止一个,是一组队列的数据,就像我们常用的串口FIFO。因此,可以设置循环接收或者等待接收,等待的话是有超时管理的。
Std_ReturnType Rte_Receive_<port>_<data> (<DataType> *data)
Std_ReturnType Rte_Send_<port>_<data> (<DataType> data)
2.2.3 跨ECU方式
假如是跨ECU的数据传输。那么,我在runnable中使用Rte_Write__()这样的函数后,会需要走:
runnable(ECU1) ->RTE (ECU1) ->BSW (ECU1) ->外部总线->BSW (ECU2) ->RTE (ECU2)->runnable (ECU2)
Com_SendSignal()
Com_ReceiveSignal()
2.2.4 C/S接口的不同方式
同步调用
同步调用其实就是我们平时调用函数是一样的,就是等同于将被调函数代码嵌入当前调用的函数代码中运行即可
//假如我们的被调函数是:
Std_ReturnType RunnableServer(int *param)
//那我们的客户中应该写的调用函数就是:
Std_ReturnType Rte_Call_<Port>_RunnableServer(int *param)
//这个param就是我们希望被调函数操作的变量
异步调用
异步调用相当于有两个线程,一个线程运行我们的原函数中的内容,另一个执行被调函数的内容。然后可以过一段时间去读取一下被调函数的返回结果
如何知道被调函数是否执行完了呢?有三种方法:
- 循环检测,就是在那一直等,等到返回值为止,这样的话和同步就差不多了,意义不大
- 超时检测,定一个时间,时间到了就去读取,没到的时候继续运行我的程序
- 事件触发,当服务函数运行结束,RTE可以触发原函数,告诉它被调函数运行完了,你可以读取返回值了
//执行下面的函数后就能将参数返回回来了
Std_ReturnType Rte_Result_<Port>_RunnableServer(int *param)
2.3 RTE对数据一致性的管理
数据一致性,就是当多个用户试图同时访问一个数据库,它们的事务同时使用相同的数据时,可能会发生以下四种情况:丢失更新、未确定的相关性、不一致的分析和幻想读。
数据一致性的实现机制:
利用RTE管理
SWC内部变量
• EAs(ExclusiveAreas,专用区域):就是下面两句代码,相当于一个关中断,调用变量的语句放在里面,运行时不能有更高级的Task打断被保护的语句
......
Rte_Enter_<name>();
//这里放置被保护的语句
Rte_Exit_<name>();
......
• IRVs(Inter-runnablevariables,跨函数变量):还是两句代码,上面的EAs是整段代码段都被保护了,而这里的两句就相当于在改变变量的时候被保护,也就是这两句话执行的时候被保护。
Rte_IrvWrite_<re>_<name>()
Rte_IrvRead_<re>_<name>()
2.4 RTE对Interface接口

2.4.1 AutoSAR接口
之前说的S/R和C/S接口就是AutoSAR接口
特点:
接口函数名可变,例如之前说过的Std_ReturnType Rte_Read__ (
*data)这中形式的S/R函数,其中的 就是用户自己配置的名字,因此,这些接口的函数名都是可以改变的,但大体的形式是不变的。
位置:
SWC<>RTE、RTE<>CDD、RTE<>ECU AB
- (这里提一句,ECU AB之前没有讲到,其实很多的传感器、执行器都放在这里,是ECU的抽象,也是可以看作是SWC的,IoHwAb就在这里面)。说明白一点,就是只要能看成是SWC处理的,就是AutoSAR接口
2.4.2 标准接口

AutoSAR规定的C语言API
特点:
接口函数名是固定不变的,是AutoSAR规定好的。
比如:Com_SendSignal() WaitEvent()这类都是API函数名,可以有上层调用,
但是一般是使用工具配置生成的,做上层应用的一般是不用关心其具体实现的
位置:
图中棕色的就是标准接口,说白了就是对函数API的调用。
需要特殊说明一点的是:下图中两个红圈中的箭头,OS和COM是唯一的两个标准接口允许直接和RTE相连的。
因为RTE的很多功能是需要基于这两个模块来实现的 ```
2.4.3 标准AutoSAR接口
AutoSAR接口,不过名称是由AutoSAR官方规定不能修改
特点:
就是标准接口和AutoSAR接口的特征它都有一部分。
首先是和AutoSAR接口一样,提供的是C/S、S/R接口;然后又和标准接口一样,函数名是不可变的。
说白了就是官方规定好的C/S、S/R接口,咱们就当成是AutoSAR接口就行了,函数名字什么不用管它
位置:
RTE<>Services,就这么一个地方
边栏推荐
- Introduction and use of ftrace tool
- 【单片机项目实训】八路抢答器
- cordova-plugin-device获取设备信息插件导致华为审核不通过
- mm中的GAN模型架构
- 2022中国3D视觉企业(引导定位、分拣场景)厂商名单
- Kubernetes simple introduction to writing YML
- pageoffice-之bug修改之旅
- Automated defect analysis in electron microscopic images-论文阅读笔记
- 使用jenkins之二Job
- [pulsar document] concepts and architecture
猜你喜欢
【AutoSAR 五 方法论】

AttributeError: ‘tuple‘ object has no attribute ‘layer‘问题解决

antv x6节点拖拽到画布上后的回调事件(踩大坑记录)

redis21道经典面试题,极限拉扯面试官
![[shutter] image component (the placeholder | transparent_image transparent image plug-in is loaded into the memory)](/img/73/19e2e0fc5ea6f05e34584ba40a452d.jpg)
[shutter] image component (the placeholder | transparent_image transparent image plug-in is loaded into the memory)

Use Jenkins II job

字符设备注册常用的两种方法和步骤

Rust ownership (very important)

Win10 多种方式解决无法安装.Net3.5的问题

Attributeerror: 'tuple' object has no attribute 'layer' problem solving
随机推荐
DotNet圈里一个优秀的ORM——FreeSql
FAQ | FAQ for building applications for large screen devices
Confluence的PDF导出中文文档异常显示问题解决
Introduction of UART, RS232, RS485, I2C and SPI
Multiprocess programming (II): Pipeline
Callback event after the antv X6 node is dragged onto the canvas (stepping on a big hole record)
【Pulsar文档】概念和架构/Concepts and Architecture
Bigder: how to deal with the bugs found in the 32/100 test if they are not bugs
[jetcache] jetcache configuration description and annotation attribute description
百度智能云牵头打造智能云综合标准化平台
Free we media essential tools sharing
Attributeerror: 'tuple' object has no attribute 'layer' problem solving
免费自媒体必备工具分享
Andorid gets the system title bar height
腾讯云免费SSL证书扩展文件含义
图解网络:什么是虚拟路由器冗余协议 VRRP?
NC50965 Largest Rectangle in a Histogram
How to find out the currently running version of Solr- How do I find out version of currently running Solr?
UART、RS232、RS485、I2C和SPI的介绍
Unity learns from spaceshooter to record the difference between fixedupdate and update in unity for the second time