AUTOSAR RTE(运行时环境,Run-Time Environment)是AUTOSAR ECU架构的核心组成部分,它与操作系统(OS)、AUTOSAR COM以及其他基本软件模块共同实现了虚拟功能总线(VFB)的概念。
VFB可以被理解为一种中间件,它介于系统和系统软件之间,用于共享和调度系统上的各种资源。同时,VFB也可以被视为RTE层,用于各个软件组件(SWC)之间的交互,包括服务、数据收发、模式切换等功能。
具体而言,RTE通过实现AUTOSAR虚拟功能总线接口,完成了AUTOSAR软件组件之间的通信。这一实现是针对特定ECU的AUTOSAR VFB接口的具体化。RTE不仅提供了基础设施服务,使得AUTOSAR软件组件能够顺畅地进行通信,而且还充当了AUTOSAR软件组件访问基础软件模块(涵盖操作系统和通信服务等)的桥梁。因此,RTE在确保AUTOSAR架构内各组件有效协同工作方面发挥着至关重要的作用。
RTE是一个综合性的概念,它涵盖了系统基础设施中的可变元素以及标准化的服务。这些可变元素主要源于组件到ECU的不同映射方式。从逻辑层面来看,RTE可以被划分为两个核心子部分,旨在实现两大功能:一是软件组件之间的通信,二是软件组件的调度。
为了全面而准确地描述RTE的概念,我们还必须考虑Basic Software Scheduler(基本软件调度器)的作用。Basic Software Scheduler是AutoSAR架构中BSW(基础软件)的一个组成部分,专门用于调度和管理基础软件模块的执行。Basic Software Scheduler负责调度基本软件模块中的可调度实体,这些实体在某些文档中也被称为主处理函数。值得注意的是,由于软件组件和基本软件模块的调度可能会使用相同的OS Task(操作系统任务),因此RTE的调度部分与Basic Software Scheduler之间存在着紧密的关联,二者在实际操作中难以明确分离。
为了确保RTE和基本软件调度程序能够最大程度地适应并优化每个ECU的性能,我们需要为每个ECU单独生成相应的RTE和基本软件调度程序。这样一来,无论是RTE的通信功能、调度功能,还是Basic Software Scheduler的调度能力,都能得到充分的发挥,从而共同支撑起ECU的高效稳定运行。
RTE架构图
AUTOSAR 软件组件位于架构图中RTE的上方和下方。在RTE下面还有具有 AUTOSAR 接口的软件实体。这些是 AUTOSAR 服务、ECU抽象和复杂设备驱动程序CDD。对于这些软件,不仅要描述 AUTOSAR 接口,还可以在基本软件模块描述中提供有关其内部结构的信息。
下面看看不同的 AUTOSAR 软件组件类型,以及它们对 RTE 的影响。
1. AUTOSAR 软件组件(SWC)
在AUTOSAR架构中,"Application"软件在概念层次上位于AUTOSAR RTE之上,它由两大核心部分组成。
首先,"AUTOSAR应用软件组件"构成了其一部分,这些组件具有高度的通用性和独立性,既不依赖于特定的ECU,也不受车辆中安装位置的影响,因此具备较高的可重用性和灵活性。
其次,"AUTOSAR传感器-执行器组件"是另一重要组成部分,这些组件则紧密依赖于ECU的硬件特性,由于性能优化和效率提升的考量,它们的设计往往与特定的硬件实现紧密绑定,因此相较于应用软件组件,传感器-执行器组件在系统中的重新定位较为困难。
这意味着,在系统配置期间,受系统设计师设定的约束条件限制,AUTOSAR软件组件可以部署到任何可用的ECU上。此时,RTE负责确保组件之间能够通信,并确保无论组件部署在哪里,系统都能按预期继续运行。对于传感器/执行器软件组件而言,它们可能只能直接访问本地ECU的抽象层。因此,如果需要访问远程ECU的抽象层,则必须通过中间的传感器/执行器软件组件来实现,该组件会在远程ECU上广播相关信息。因此,如果将传感器/执行器软件组件移动到不同的ECU上,可能也意味着需要将与之相连的设备(传感器/执行器)也移动到同一个ECU上(如果需要高效访问的话)。
AUTOSAR软件组件由组件接口的类型定义来定义。当组件部署到ECU上时,会实例化该组件类型。在同一ECU上,一个组件类型可以被实例化多次,此时称该组件类型为“多次实例化”。RTE支持按实例划分的内存区域,这使得每个组件实例都能拥有私有状态。
2. 基础软件模块
在AUTOSAR环境中,ECU不仅包含“AUTOSAR软件组件”,还包含了基础软件模块。这些基础软件模块能够直接访问ECU抽象层以及其他基础软件模块。基本软件模块提供的功能不能在另一个ECU中重新用。然而,一些基本软件模块的源代码可以在其他ECU上重用。
相比之下,“AUTOSAR软件组件”无法直接访问基础软件模块,所有的通信都必须通过AUTOSAR接口进行,从而处于RTE的控制之下。这一不直接访问的要求适用于所有基础软件模块,包括操作系统和通信服务在内。简而言之,AUTOSAR架构通过明确的接口划分,确保了软件组件与基础软件模块之间的交互既规范又可控,从而提升了系统的整体稳定性和可维护性。
3. 通信
AUTOSAR软件组件的通信接口由多个端口组成,这些端口通过端口接口进行特征描述。一个AUTOSAR软件组件能够通过其接口与其他AUTOSAR软件组件(无论这些组件位于同一ECU上还是不同ECU上)或位于同一ECU上且具有端口和运行实体的基础软件模块进行通信。这种通信仅能通过组件的端口进行。
端口可以根据其接口类型分为发送-接收(sender-receiver)端口和客户-服务(client-server)端口。sender-receiver接口提供消息传递功能,而client-server接口则提供函数调用功能。简而言之,AUTOSAR软件组件通过特定类型的端口接口与其他组件或基础软件模块进行交互,这些交互包括消息传递和函数调用,且所有通信都必须通过组件的端口进行。
通信范式
RTE为软件组件实例之间的通信提供了多种范式,包括发送者-接收(sender-receiver)、客户端-服务(client-server)、模式切换以及NvBlockSwComponentType(NvBlockSwComponentType 定义了非易失性数据,这些数据可以在 Sw ComponentPrototypes 之间共享)交互。这些通信范式均可应用于以下三种场景:同一分区内的软件组件分布(涵盖同一分区内的任务内和任务间分布)、跨分区的软件组件分布以及跨ECU的软件组件分布。
在任务内通信中,可运行实体被映射到同一个操作系统任务上,它们之间的通信就发生在这些实体之间。而任务间通信则发生在被映射到同一分区内不同任务的可运行实体之间。跨分区通信发生在被映射到同一ECU不同分区的组件中的可运行实体之间,这种通信需要跨越保护边界(如内存保护、时序保护以及核心隔离)。跨ECU通信则发生在被映射到不同ECU的组件中的可运行实体之间,这种通信本质上是并发的,且可能涉及不可靠的通信。
通信模式
RTE支持两种发送者与接收者之间的通信模式,这些模式确保了数据元素在组件之间的有效传输。这两种模式如下:
显式模式:在此模式下,组件通过显式调用RTE的应用程序接口(API)来发送和接收数据元素。这意味着组件需要主动使用RTE提供的API函数,以明确的方式指示何时发送数据以及何时接收数据。
隐式模式:RTE在可运行实体(runnable)被调用之前会自动读取一组指定的数据元素,并在该可运行实体终止后自动写入另一组(不同的)数据元素。这里的“隐式”一词指的是可运行实体本身并不主动发起数据的接收或传输。相反,RTE负责在适当的时机自动处理这些数据的读取和写入操作,从而简化了组件间的通信流程。
简单来讲:显式模式要求组件主动控制数据的发送和接收,而隐式模式则通过RTE的自动处理来简化这一过程。
4、并发
AUTOSAR软件组件无法直接访问操作系统,因此在AUTOSAR应用中不存在“任务”的概念。相反,AUTOSAR中的并发活动是基于组件内的可运行实体(RunnableEntity)进行的,这些实体由RTE调用。
AUTOSAR的VFB规范将可运行实体定义为“可以由RTE启动的指令序列”。一个组件通常提供一个或多个可运行实体,每个可运行实体都恰好有一个入口点。入口点定义了软件组件代码中提供可运行实体实现的符号。
RTE负责调用可运行实体——AUTOSAR软件组件无法(动态)创建私有的控制线程。因此,AUTOSAR应用中的所有活动都是由RTE作为RTE事件的结果触发可运行实体而启动的。RTE事件涵盖了所有可能触发RTE执行可运行实体的情境。RTE支持任何具有AUTOSAR接口的组件中的可运行实体,这包括AUTOSAR软件组件和基本软件模块。
简单总结来说,AUTOSAR架构通过RTE管理可运行实体的调用,实现了应用内的并发活动,而这些可运行实体是定义在组件中,并由RTE事件触发的指令序列。这一机制确保了AUTOSAR应用在没有直接操作系统访问权限的情况下,仍能有效地进行并发处理。
AUTOSAR RTE负责处理不同软件组件之间的事件触发和消息传递。它提供了标准化的数据接口和通信机制,确保数据能够在应用软件和基础软件之间高效、准确地传递。RTE也负责管理应用软件和基础软件之间的数据传递和通信,包括数据的读写、信号量的管理等。
RTE抽象了基础软件(BSW)和操作系统(OS),防止应用软件(SWC)直接访问它们,从而简化了应用软件的开发过程,并降低了对底层实现的依赖。