01.CP 与 RTE
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 架构内各组件有效协同工作方面发挥着至关重要的作用。
02.RTE 服务
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 的高效稳定运行。
03.RTE 对一些 AUTOSAR 概念的实现
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 应用在没有直接操作系统访问权限的情况下,仍能有效地进行并发处理。
04.小 结
AUTOSAR RTE 负责处理不同软件组件之间的事件触发和消息传递。它提供了标准化的数据接口和通信机制,确保数据能够在应用软件和基础软件之间高效、准确地传递。RTE 也负责管理应用软件和基础软件之间的数据传递和通信,包括数据的读写、信号量的管理等。
RTE 抽象了基础软件(BSW)和操作系统(OS),防止应用软件(SWC)直接访问它们,从而简化了应用软件的开发过程,并降低了对底层实现的依赖。
END
作者:不可说
来源:汽车电子与软件
推荐阅读:
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。)