[AUTOSAR 基础入门] - RTE虚拟总线详解

news2025/1/9 10:28:53

文章目录

    • 一、什么是RTE
    • 二、RTE的作用
    • 三、RTE对Runnables的运行支撑
    • 四、RTE与通信
      • 4.1. RTE – ECU之间通信
      • 4.2. RTE - Sender/Receiver 通信
        • 4.2.1 不使用队列(直接访问)
        • 4.2.2 不使用队列(缓存访问)
        • 4.2.3 使用队列
      • 4.3 RTE - Client/Server 通信
      • 4.4 RTE - SWC内部通信
    • 五、RTE对数据一致性的管理
      • 5.1. 数据一致性的概念
      • 5.2. 数据一致性的实现机制
    • 六、RTE与Interface接口
    • 七、RTE生成

返回总目录

在这里插入图片描述

一、什么是RTE

在这里插入图片描述
在 AUTOSAR 架构中,RTE(Runtime Environment)的作用如下:
RTE 类似于餐厅服务员,它在系统中起到桥接作用,负责协调应用层软件组件(好比顾客)与 ECU 中的不同模块(如账台、厨房、清洁工等)之间的信息流转。同时,RTE 也是软件组件(SWC)之间以及 SWC 与基础软件(BSW)之间的中介,像 SWC1、SWC2、SWCn 等不同软件组件通过它进行通信与协作。它具备输入输出管理、通信管理、任务调度和访问底层基础软件等功能,保障系统运行的标准化与模块化。

二、RTE的作用

RTE(运行时环境)具备多方面的功能与特点,它能提供跨ECU以及ECU内部的通信管理,还拥有对runnable的管理功能,像触发、唤醒等,runnable映射到Task上运行就是由它具体实现的。

在这里插入图片描述

RTE通过抽象和接口连接软件组件与底层基础硬件,实现应用软件与硬件平台的分离,像 SWC1、SWC2、SWCn 等软件组件会通过它连接到系统的I/O模块、服务模块、通信栈和操作系统(OS),且它通过硬件抽象层与通信栈支持CAN、LIN、FlexRay等通信协议,借助操作系统实现任务调度和管理。同时,RTE作为中间层屏蔽了硬件细节,提供标准化接口,让软件开发更高效、灵活,保障了软件的可移植性和平台独立性。

RTE是虚拟功能总线(VFB)的具体实现,在Vector的工具链中,它是自动生成的。对相关图示细化后可看清其关联关系,RTE统一管理,具体连接方式不用在RTE中关心,只要应用层配置好,它就会自动生成。

三、RTE对Runnables的运行支撑

  • RTE的配置需要将软件组件中的可运行实体runnables映射到操作系统的任务task中。
  • RTE通过事件机制触发runnables的执行,并自动生成调用runnables的任务代码。
  • 在配置过程中,RTE需要定义操作系统中的任务、事件和警报,确保软件组件之间的通信。每个ECU中的RTE配置会根据不同的软件组件需求进行调整。
  • RTE抽象了操作系统,防止软件组件直接访问操作系统与基础软件,从而实现系统的标准化与模块化。右侧图示展示了软件组件中的runnables通过RTE触发并映射到任务执行的流程,体现了RTE在任务管理与执行中的核心作用。

在这里插入图片描述
SWC(Software Component软件组件)中的runnables通过RTE与操作系统、ECU管理模块和通信模块进行交互。RTE负责任务调度、通信管理以及资源调用,确保SWC的功能执行与数据传输。图中展示了SWC内部的runnable如何与RTE交互,并通过RTE调用操作系统的功能,例如SetRelAlarm、ActivateTask等任务调度接口。SWC通过COM模块实现通信回调函数,通过ECU管理模块实现RTE的启动与停止功能。RTE作为桥梁,连接了应用层的软件组件与底层系统资源,保证了系统的高效运行和功能协同。

在这里插入图片描述
Runnables的触发条件

  • 定时时间
  • 周期性触发 (例如使用OS的Alarm)
  • 数据接收事件(S/R)
  • 当收到数据时触发
  • 异步服务调用返回事件(C/S)
  • 操作调用事件(C/S)
  • 数据接收错误事件(S/R)
  • 数据发送完成事件(S/R)
  • 状态切换事件

在这里插入图片描述

四、RTE与通信

4.1. RTE – ECU之间通信

RTE实现了ECU之间的软件组件通信,具体通过Sender-Receiver机制进行。左侧的ECU 1包含SWC 1与Runnable,通过RTE和BSW通信栈完成数据发送,而右侧ECU 2的SWC 2接收数据。发送端通过Rte_Write函数进行数据写入,而接收端通过Rte_Read函数完成数据读取。此外,BSW中的通信栈通过Com_SendSignal和Com_ReceiveSignal函数进行信号传输,保证数据在ECU之间的正确传递。

在这里插入图片描述

4.2. RTE - Sender/Receiver 通信

4.2.1 不使用队列(直接访问)

RTE在Sender-Receiver通信中提供直接数据访问的机制,即Last is Best原则。RTE可以直接访问数据地址,实现1:n通信,初始值即为默认值,适用于对实时性要求较高的数据。通过Rte_ReadRte_Write 接口提供数据读写功能,同时简化了系统的通信流程。直接访问机制的优势在于数据的实时传输,减少了传输延迟。

Std_ReturnType Rte_Read_<p>_<d> (OUT <DataType> *data)  
Std_ReturnType Rte_Write_<p>_<d> (IN <DataType> data)

在这里插入图片描述

4.2.2 不使用队列(缓存访问)

RTE在进入runnable之前为数据建立副本,runnable运行结束后将副本数据拷贝回实际数据地址。在runnable运行过程中,操作的仅是数据副本,而不会影响实际数据。这种方式适用于数据一致性要求较高的场景,防止数据竞争和不一致问题的发生。Rte_IRead 和 Rte_IWrite 接口提供了数据的读写功能,同时确保数据访问的安全性和一致性。

<DataType> Rte_IRead_<r>_<p>_<d> (void)
void Rte_IWrite_<r>_<p>_<d> (IN <DataType> data)

在这里插入图片描述

4.2.3 使用队列

RTE在使用队列的情况下提供事件触发的Sender-Receiver通信,适用于需要数据排队的场景。RTE通过查询接收或等待接收的方式从队列中读取数据,并提供超时处理机制,保证数据传输的可靠性。通过Rte_Receive 和 Rte_Send 接口,Sender端负责数据发送,Receiver端从队列中获取数据。队列机制确保了数据按顺序传输,适用于有数据缓存需求的应用场景。

Std_ReturnType Rte_Receive_<p>_<d> (OUT <DataType> *data)  
Std_ReturnType Rte_Send_<p>_<d> (IN <DataType> data)

在这里插入图片描述
在 AUTOSAR RTE 的 Sender/Receiver 通信机制中,“无效数据元素” 起着重要作用。它主要应用于表示 sensor 发送的数据无效这一情况。需要注意的是,对于无效数据元素,不能使用队列来进行处理。其具有 “Invalid Value” 这一属性,可以通过Rte_Invalidate_<p><d>()函数 来完成无效值的设置。

在接收方对无效值的处理方面,有多种方式。一方面,可通过回调函数 Rte_Feedback<p><d>() 来进行反馈处理;另一方面,Rte_Read<p>_<d>() 的返回值会变为 RTE_E_INVALID,以此来标识数据无效。此外,还有一种有趣的情况,那就是可以通过收到无效值来激活 runnable 的运行,这为系统的灵活运作提供了一种特殊的触发机制,使得系统在面对无效数据时能够按照预设的逻辑进行相应的处理和响应,保障了整个通信过程的稳定性和可靠性。

4.3 RTE - Client/Server 通信

在 AUTOSAR RTE 的 Client/Server 通信模式中,具有特定的通信方式和服务调用机制。通信方式采用 n:1 的模式,即多个 Client 可以与一个 Server 进行通信。

在服务调用方面,Client 会调用 Server 端的操作。Server 端 SWC(Software Component,软件组件)中的操作通常是 runnables(可运行实体)。这里的调用分为同步和异步两种方式。对于 Server 端的 runnables,存在两种情况:一种是没有分配到 Task 中,可直接被调用;另一种是分配到了 Task 中。

Std_ReturnTypeRte_Call_<p>_<o>([IN | IN/OUT | OUT <param_1>],... [IN | IN/OUT | OUT <param_n>])

例如,在一个汽车电子系统中,多个不同的功能模块(Client)可能需要获取某个传感器的数据或使用某个特定的服务(Server 提供),此时就会通过这种 Client/Server 通信方式来完成交互,保障汽车电子系统的各个部分协同工作。

在这里插入图片描述

在同步通信中,Client端会等待Server端的响应,期间处于阻塞状态,直到服务完成后才继续执行其他任务。下边的时序图展示了Client端通过RTE调用Server端的GetTime服务的过程,包括任务阻塞、信号发送和接收等步骤。Server端的runnable负责提供具体的服务功能,通过GetTime函数实现时间数据的获取,而RTE Client API通过Rte_Call接口完成服务的调用与结果传递。

在这里插入图片描述
在异步通信模式下,Client端不会停止运行,而是通过RTE提供的Rte_Result接口获取Server端的响应。Client可以采用轮询(Polling)或等待(Waiting)机制检查服务是否完成,同时支持超时处理。RTE通过接收到的响应激活Client端的runnable,实现异步操作的调度与执行。异步通信提高了系统的执行效率,确保Client端在不等待结果的情况下继续完成其他任务。

4.4 RTE - SWC内部通信

在 AUTOSAR RTE 架构下,SWC(Software Component,软件组件)内部通信面临着一个关键问题,即同一个 SWC 内运行在不同 Task 上的 runnable 之间的通信。其核心目标是保证数据一致性,确保在复杂的任务调度和数据交互过程中,数据的准确性和可靠性不受影响。为解决这一问题,提供了以下几种办法:

  • 专用区域(Exclusive Areas)
    • 保护范围:整个代码块或由 RTE 进行保护。
    • 相关函数:通过Rte_Enter_()函数来实现进入专用区域的操作。当进入该区域后,能够确保在该区域内的操作不会受到其他任务的干扰,从而保障数据在特定操作过程中的一致性。
  • 内部变量(Inter-runnable variables)
    • 保护特点:仅对变量进行保护。
    • 相关函数:使用Rte_IrvWrite__函数来处理内部变量的写入操作。这种方式专注于对变量的保护,在变量被操作时确保其数据的一致性,避免因多个 runnable 同时访问和修改而导致的数据混乱。

此外,需要注意的是,不同 SWC 之间的通信,无论是在 ECU(Electronic Control Unit,电子控制单元)内部还是 ECU 之间,都不会遇到上述 SWC 内部通信中关于数据一致性的问题,因为 RTE 会负责保证这部分数据的一致性,这体现了 AUTOSAR 架构在设计上对不同层次和场景下数据一致性保障的全面考虑和有效机制。

例如,在汽车电子系统中,某个 SWC 可能包含多个负责不同功能的 runnable,如一个负责传感器数据采集,一个负责数据处理和分析,它们运行在不同的 Task 上。当采集到的数据需要传递给处理分析的 runnable 时,就需要通过上述的 SWC 内部通信机制来确保数据在传递和处理过程中的一致性,以保障汽车电子系统的稳定运行和准确控制。下边的示意图展示了 Task A 和 Task B 与变量 X 之间的交互过程,进一步直观地说明了在不同 Task 操作下如何通过相关机制保证数据一致性的原理和流程。
在这里插入图片描述

五、RTE对数据一致性的管理

5.1. 数据一致性的概念

数据一致性指当多个用户试图同时访问一个数据库,其事务同时使用相同的数据时,可能会出现以下四种情况:丢失更新、未确定的相关性、不一致的分析和幻想读。通俗来讲,就是多个操作同时读写同一个数据时,很可能因优先级问题导致数据被篡改,出现不符合预期的数据结果。

5.2. 数据一致性的实现机制

  • 利用 RTE 管理:通过 RTE 来管理相关数据以防止 bug 出现。例如 IRead,大家操作的是备份数据,并非直接操作原数据。

  • SWC 内部变量:SWC 内部变量比较特殊,能直接在 DaVinci 中配置,runnable 可直接调用,类似在 c 文件中定义的全局变量(未被 extern 出去),在 c 文件内定义的函数可直接使用它。但存在问题,同一个 c 文件中的函数可能放在不同 Task 上运行,就可能出现同一时刻运行并调用该全局变量的情况,进而导致 bug 出现。对此,AutoSAR 提供了以下两种解决方式:

    • EAs(Exclusive Areas,专用区域):通过以下两句代码实现,相当于关中断,把调用变量的语句放在中间,运行时不会有更高级的 Task 打断被保护的语句。
      Rte_Enter_<name>();
      //这里放置被保护的语句
      Rte_Exit_<name>();
      
    • IRVs(Inter-runnable variables,跨函数变量):同样是两句代码,与 EAs 不同的是,EAs 是对整段代码段进行保护,而 IRVs 是在改变变量的时候进行保护,也就是这两句话执行的时候被保护,代码如下:
      Rte_IrvWrite_<re>_<name>()
      Rte_IrvRead_<re>_<name>()
      

六、RTE与Interface接口

AUTOSAR架构中,RTE处于应用软件层与基础软件层之间,起到了数据传输与接口抽象的作用。在应用软件层,包含了多个AUTOSAR软件组件(SWC),如应用软件、执行器软件和传感器软件等,这些组件通过标准化的AUTOSAR接口与RTE交互。RTE向下连接基础软件层,包括操作系统、通信栈、ECU抽象和复杂设备驱动等模块,这些模块通过标准接口提供服务与功能。

整个架构实现了软硬件的分离,通过标准化接口与模块化设计,保证了软件的可移植性和硬件的无关性。RTE作为核心中间层,统一了软件组件与底层功能之间的数据流与功能调用,提升了系统开发的标准化与高效性

在这里插入图片描述
RTE通过标准接口实现对操作系统、通信模块和ECU管理模块的功能访问,确保了软件组件与底层功能的分离与解耦。

  • 在操作系统接口方面,RTE通过Schedule和WaitEvent等API实现任务调度与事件管理;
  • 在通信模块接口方面,RTE通过Com_SendSignal接口管理通信回调与数据发送;
  • 在ECU管理接口方面,RTE通过Rte_Start和Rte_Stop实现ECU的生命周期管理。

RTE通过这些标准接口,确保了上层应用软件与底层基础软件之间的高效通信与功能调用,同时提供了跨平台与模块化的开发环境。

在这里插入图片描述
RTE将I/O硬件接口与软件组件中的端口(Ports)和runnables进行标准化映射,确保了数据传输的准确性与一致性。ECU抽象层作为固件的角色,仅允许传感器和执行器软件组件访问,进一步屏蔽了硬件细节。RTE提供了标准API接口,其中Sender-Receiver模式通过Rte_Write实现数据传输,如Rte_Write_DimmLight_DimmValue,而Client-Server模式通过Rte_Call实现服务调用。

RTE标准接口的实现,使得软件组件在不同硬件平台上可以复用,并提高了接口调用的标准化与可维护性。

在这里插入图片描述

RTE通过向基础软件提供特定的服务端口(Service Ports),实现了应用软件与基础软件的标准化通信与服务访问。在接口调用方面,RTE支持软件组件通过Rte_Call访问基础服务,同时支持DEM模块的事件操作,如SetEventStatus用于设置事件状态。服务端口机制确保了RTE向基础软件提供的标准化功能接口,进一步实现了应用层与底层软件模块的高效协同与功能抽象。通过这种服务调用机制,软件组件能够在标准化的接口框架下访问基础功能,保证了系统通信的灵活性与标准化。

在这里插入图片描述

  • RTE在接口调用中的具体实现过程通过示例展示了软件组件如何与基础软件进行交互。
  • DiagnosticMonitor接口通过Rte_Call访问SetEventStatus函数,完成诊断状态的设置;
  • DoorContact接口通过ReadData函数读取指定的数据类型,实现了数据交互与传输。
  • RTE在调用过程中通过标准接口实现了数据与功能的抽象

在这里插入图片描述

七、RTE生成

RTE的生成阶段包括ECU配置提取、RTE生成和代码生成三个主要步骤。首先,从ECU配置中提取操作系统配置、基础软件模块配置等信息,并通过AUTOSAR RTE生成器生成RTE文件与代码。然后,通过AUTOSAR RTE工具链生成RTE.c文件,最终实现RTE的自动化生成与集成。

右侧示例代码展示了RTE在任务调度中的应用,通过WaitEvent和Schedule等接口,实现了事件等待与任务调度,确保了系统中各个任务的有序执行与调度管理。

在这里插入图片描述

参考文档:
1、AUTOSAR_SWS_RTE.pdf
2、AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下文件操作相关接口

文章目录 一 文件是什么普通数据文件 二 文件是谁打开的进程用户 三 进程打开文件的相关的接口c语言标准库相关文件接口1. fopen 函数2. fread 函数3. fwrite 函数4. fclose 函数5. fseek 函数 linux系统调用接口1. open 系统调用2. creat 系统调用3. read 系统调用4. write 系…

用Python实现简单的任务自动化

目录 1. 自动发送邮件提醒 2. 自动备份文件 3. 自动下载网页内容 总结 在现代工作和生活中,任务自动化可以极大地提高效率和准确性。Python,作为一种功能强大且易于学习的编程语言,是实现任务自动化的理想选择。本文将通过几个简单而实用的案例,展示如何用Python实现任…

小程序开发-页面事件之上拉触底实战案例

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

Docker 服务、镜像、容器之命令(Docker Services, Images, and Container Commands)

Docker 服务、镜像、容器之命令 Docker是一个强大的容器化平台&#xff0c;能够帮助开发者高效地构建、部署和管理应用程序。本文将详细介绍Docker的服务命令、镜像命令和容器命令&#xff0c;帮助你快速上手Docker。 一、Docker的服务相关命令 在使用Docker之前&#xff0c…

STM32内置Flash

一、原理 利用flash存储用户数据需要注意查看&#xff0c;用户数据是否会覆盖芯片运行程序。 IAP&#xff08;在程序中编程&#xff09;利用程序修改程序本身&#xff0c;和OTA是一个原理。IAP在程序中编程支持任意一种通信下载。 ICP&#xff08;在电路中编程&#xff0c;通…

两种方式实现Kepware与PLC之间的心跳检测

两种方式实现Kepware与PLC之间的心跳检测 实现Kepware与PLC之间的心跳检测1.OPCUA 外挂程序2.Kepware Advanced Tag 实现Kepware与PLC之间的心跳检测 1.OPCUA 外挂程序 这是通过上位程序来触发心跳的一种机制&#xff0c;在C#中&#xff0c;可以利用OPC UAOPCAutodll的方式…

英伟达Project Digits赋能医疗大模型:创新应用与未来展望

英伟达Project Digits赋能医疗大模型&#xff1a;创新应用与未来展望 一、引言 1.1 研究背景与意义 在当今数字化时代&#xff0c;医疗行业作为关乎国计民生的关键领域&#xff0c;正面临着前所未有的挑战与机遇。一方面&#xff0c;传统医疗模式在应对海量医疗数据的处理、复…

中国省级产业结构高级化及合理化数据测算(2000-2023年)

一、数据介绍 数据名称&#xff1a;中国省级产业结构高级化、泰尔指数 数据年份&#xff1a;2000-2023年 数据范围&#xff1a;31个省份 数据来源&#xff1a;中国统计年鉴、国家统计局 数据整理&#xff1a;内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xf…

关于Mac使用VSCode连接虚拟机

1. 下载插件 输入Remote - SSH下载下图两个插件。 2. 配置虚拟机信息 按图示步骤点击完成后&#xff0c;进入到虚拟主机的配置页面。 其中Host可以自定义主机名&#xff0c;HostName是虚拟机ip&#xff0c;可以通过ifconfig eth0查看ip&#xff0c;User是虚拟机的用户名。…

GOGOGO 接口

低高耦合?【程序中追求低耦合,所以接口广用】 低耦合:关联依赖性弱(你走了我还在) 高耦合:关联依赖性强(牵一发而动全身) 接口 概念:多个抽象方法的集合,只有结构无具体实现,并交给实现类完成功能操作【接口写功能,实现类写具体实现】 语法结构: 定义接口的关…

nginx反向代理+缓存

1、nginx-LB配置页面缓存 [rootOldboy conf]# vi nginx.conf http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;include proxy.conf; …

React中的合成事件

合成事件与原生事件 区别&#xff1a; 1. 命名不一样&#xff0c;原生用纯小写方式&#xff0c;react用小驼峰的方式 原生&#xff1a;onclick React的&#xff1a;onClick 2. 事件处理函数的写法不一样 原生的是传入一个字符串&#xff0c;react写法传入一个回调函数 3.…

智能安全帽_4G/5G智能安全帽主板方案定制开发

智能安全帽是一种先进的安全防护设备&#xff0c;主要以视频和语音通话为功能&#xff0c;能够全面记录施工现场的作业情况&#xff0c;并支持管理人员与现场工作人员之间的双向语音通话。这一创新设计使得项目管理人员能够实时、有效地掌握施工过程中的安全和质量情况。 这款智…

uni-app图文列表到详情页面切换

需求&#xff1a;参考若依框架后&#xff0c;想实现首页浏览文章列表&#xff0c;没有合适的样式参考&#xff0c;所以需要有效果做到“图文列表到详情页面切换”&#xff0c;查阅了一下案例 发现有相应的案例&#xff0c;在导航栏“模板”中找到了 DCloud 插件市场 PC电脑端访…

MySQL安装,配置教程

一、Linux在线yum仓库安装 打开MySQL官方首页&#xff0c;链接为&#xff1a;https://www.mysql.com/ 界面如下&#xff1a; 在该页面中找到【DOWNOADS】选项卡&#xff0c;点击进入下载页面。 在下载界面中&#xff0c;可以看到不同版本的下载链接&#xff0c;这里选择【My…

【项目】修改远程仓库地址、报错jdk

一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录&#xff0c;执行以下命令来修改远程仓库的 URL&#xff0c;将其指向你自己的新仓库&#xff1a; cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>补充&#xff1a; 错误分析&#xff1a; wa…

进阶篇-Day17:JAVA的日志、枚举、类加载器、反射等介绍】

目录 1、日志1.1 日志概念1.2 日志框架&#xff08;1&#xff09; Logback框架&#xff1a;&#xff08;2&#xff09;配置文件介绍&#xff1a; 2、枚举3、类加载器3.1 类加载器的介绍3.2 类加载器的加载过程&#xff1a;加载、链接、初始化3.3 类加载器的分类3.4 双亲委派模式…

GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程

大家好&#xff0c;今天给大家介绍一下&#xff1a;GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程。 文章目录 一、GPU算力平台概述人工智能智能发展为什么需要GPU算力平台 二、注册与登录账号注册流程 三、平台的应用之Anydoor应用启动器选择Anydoor的应用场景Anydoo…

阿里云代理商热销产品推荐

在数字化浪潮的推动下&#xff0c;企业对于云计算的依赖日益加深。阿里云&#xff0c;作为中国领先的云计算服务提供商&#xff0c;为企业提供了丰富多样的云产品和服务。本文将聚焦于阿里云代理商热销产品推荐&#xff0c;探讨其如何帮助企业高效利用云资源&#xff0c;加速数…

漏洞扫描工具

完整源码项目包获取→点击文章末尾名片&#xff01; 漏洞检测 该模块主要是对目标Web系统进行安全漏洞扫描&#xff0c;包括SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、弱密码、中间件漏洞。中间件漏洞扫描包括对Weblogic、Struts2、Tomcat 、Jboss、Drupal、Nexus的已…