# AUTOSAR SWS RTE — 运行时环境(RTE)软件规范 ## 文档元信息 | 字段 | 值 | |------|-----| | **文档标题** | Specification of RTE Software(RTE 软件规范) | | **文档所有者** | AUTOSAR | | **文档责任方** | AUTOSAR | | **文档标识号** | 084 | | **文档状态** | Final(最终版) | | **所属 AUTOSAR 标准** | Classic Platform(经典平台) | | **所属标准版本** | 4.4.0 | ## 文档变更历史 | 日期 | 版本 | 变更人 | 变更说明 | |------|------|--------|----------| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | • RTE 实现插件
• 支持结构化数据类型中的可选元素
• 次要更正/澄清/编辑修改;详情请参阅 ChangeDocumentation | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | • 次要更正/澄清/编辑修改 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | • 支持基于服务的旁路
• 调试支持标记为过时
• 次要更正/澄清/编辑修改 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | • 次要更正/澄清/编辑修改 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | • 高效 NV 数据处理
• 引入数据转换
• 支持任意数据类型的可变大小数组
• 各种修复和澄清 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | • 各种修复和澄清 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | • 各种修复和澄清 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | • 适应新版本的元模型
• 添加旁路支持
• 添加对客户端-服务器通信的参数序列化支持
• 添加对 BSW 模块跨分区通信的支持
• 一般合并和错误修复 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | • 适应新版本的元模型
• 添加对混合 compu 方法(类别 `SCALE_LINEAR_AND_TEXTTABLE` 和 `SCALE_RATIONAL_AND_TEXTTABLE`)的支持
• 添加对部分记录类型兼容性的支持
• 整合信号失效、数据转换和超出范围处理
• 一般合并和错误修复 | | 2011-04-15 | 4.0.2 | AUTOSAR Administration | • 适应新版本的元模型
• 将可运行间变量支持扩展到复合数据类型
• 阐明哪些 API 调用应实现为对组件数据结构的宏访问(兼容模式)
• 一般合并和错误修复 | | 2009-12-18 | 4.0.1 | AUTOSAR Administration | • 适应新版本的元模型
• RTE 和基础软件调度器合并
• 添加对多核架构的支持
• 添加端口处的重新缩放
• 添加 API 增强
• 更新 VFB 追踪 | | 2009-02-04 | 3.1.2 | AUTOSAR Administration | • 支持未连接的 R-Port
• 修复不兼容的函数声明
• 更新 RTE 服务器映射 | | 2008-02-01 | 3.0.2 | AUTOSAR Administration | • 布局调整
• 适应新版本的元模型 | | 2007-12-21 | 3.0.1 | AUTOSAR Administration | • 添加"RTE ECU 配置"
• 修订校准和测量
• 扩展文档元信息;进行小幅布局调整 | | 2007-01-24 | 2.1.15 | AUTOSAR Administration | • "用户建议"修订;"修订信息"增加
• 适应新版本的元模型 | | 2006-11-28 | 2.1 | AUTOSAR Administration | • 新功能"可运行实体激活去抖"
• 新功能"可运行实体激活偏移"
• 添加"测量和校准"
• 增强隐式通信的语义
• 法律声明修订 | | 2006-05-16 | 2.0 | AUTOSAR Administration | • 初始发布 | ## 目录 > **注意**:由于 RTE 规范是 AUTOSAR 中最大、最复杂的文档(1267 页),本文档采用"重点翻译 + 摘要"策略。主要翻译:封面、文档标识、变更历史、目录、关键介绍章节、关键 RTE 概念、核心 API 概览。所有详细的 API 实现规范、配置容器定义和算法描述,请参考原文 PDF。 - [1 介绍](#1-介绍) - [1.1 范围](#11-范围) - [1.2 与其他 AUTOSAR 规范的依赖](#12-与其他-autosar-规范的依赖) - [1.3 缩写和缩略语](#13-缩写和缩略语) - [1.4 技术术语](#14-技术术语) - [1.5 文档约定](#15-文档约定) - [1.6 需求追踪](#16-需求追踪) - [2 RTE 概述](#2-rte-概述) - [2.1 RTE 在 AUTOSAR 中的位置](#21-rte-在-autosar-中的位置) - [2.2 AUTOSAR 概念](#22-autosar-概念) - [2.3 RTE 生成器](#23-rte-生成器) - [2.4 设计决策](#24-设计决策) - [3 RTE 生成过程](#3-rte-生成过程) - [3.1 合约阶段](#31-合约阶段) - [3.2 预构建数据集合约阶段](#32-预构建数据集合约阶段) - [3.3 编辑 RTE 的 ECU 配置](#33-编辑-rte-的-ecu-配置) - [3.4 生成阶段](#34-生成阶段) - [3.5 预构建数据集生成阶段](#35-预构建数据集生成阶段) - [3.6 后构建数据集生成阶段](#36-后构建数据集生成阶段) - [3.7 RTE 配置与其他 BSW 模块的交互](#37-rte-配置与其他-bsw-模块的交互) - [4 RTE 功能规范](#4-rte-功能规范) - [4.1 架构概念](#41-架构概念) - [4.2 RTE 和基础软件调度器实现方面](#42-rte-和基础软件调度器实现方面) - [4.3 通信范式](#43-通信范式) - [4.4 模式](#44-模式) - [4.5 外部和内部触发器](#45-外部和内部触发器) - [4.6 初始化和终结化](#46-初始化和终结化) - [4.7 变体处理支持](#47-变体处理支持) - [4.8 开发错误](#48-开发错误) - [4.9 旁路支持](#49-旁路支持) - [4.10 数据转换](#410-数据转换) - [5 RTE 参考](#5-rte-参考) - [5.1 范围](#51-范围) - [5.2 API 原则](#52-api-原则) - [5.3 RTE 模块](#53-rte-模块) - [5.4 RTE 数据结构](#54-rte-数据结构) - [5.5 API 数据类型](#55-api-数据类型) - [5.6 API 参考](#56-api-参考) - [5.7 可运行实体参考](#57-可运行实体参考) - [5.8 RTE 生命周期 API 参考](#58-rte-生命周期-api-参考) - [5.9 RTE 回调参考](#59-rte-回调参考) - [5.10 预期接口](#510-预期接口) - [5.11 VFB 追踪参考](#511-vfb-追踪参考) - [6 基础软件调度器参考](#6-基础软件调度器参考) - [7 RTE 实现插件](#7-rte-实现插件) - [8 配置规范](#8-配置规范) --- ## 1 介绍 ### 1.1 范围 本文档旨在成为 RTE 生成器工具或具体 RTE 实现的开发人员的主要参考。本文档也是与 RTE 交互的 AUTOSAR 软件组件和基础软件模块开发人员的参考,因为它规定了 RTE 的应用程序编程接口,因此规定了访问 RTE 功能性的机制。此外,本规范应由与 RTE 密切相关的 AUTOSAR 工作组阅读(见下文第 1.2 节),因为它描述了 RTE 与这些模块的接口以及 RTE 期望它们的行为/功能。 本文档结构如下:在此一般性介绍之后,第 2 章更详细地介绍了 RTE 的概念。第 3 章描述了在整体 AUTOSAR 方法论的上下文中如何生成 RTE。第 4 章是本文档的核心部分,详细规定了 RTE 功能。RTE API 在第 5 章中描述。 本文档的附录由五部分组成:附录 A 列出了此版本 RTE 规范所依赖的 AUTOSAR 元模型限制。附录 B 明确列出了所有外部需求,即不是关于 RTE 本身而是规定 RTE 生成器环境和输入的假设的需求。附录 C 列出了一些 MISRA-C 规则,这些规则很可能被 RTE 代码违反,以及这些违规可能发生的原因。 请注意,第 1 章和第 2 章以及附录 C 不包含任何需求,因此仅供信息参考。 第 4 章和第 5 章可能对 RTE 生成器的开发人员最感兴趣。第 2、3、5 章对 AUTOSAR 软件组件和基础软件模块的开发人员很重要。对于相关 AUTOSAR 工作组,最重要的章节是第 4、5 章以及附录 B。 本文档中的规范未定义具体 RTE 或 RTE 生成器的实现细节。此外,ECU 和系统生成过程的各个方面(如 SW-C 到 ECU 的映射或可调度性分析)也不在本规范的范围内。尽管如此,规定了 RTE 生成器从这些配置阶段期望的输入。 ### 1.2 与其他 AUTOSAR 规范的依赖 作为 RTE 规范输入的主要文档是虚拟功能总线规范 [1] 和软件组件模板规范 [2]。同样重要的是与 RTE 密切交互(或反之)的基础软件模块规范。这些特别是通信模块 [3] 和操作系统 [4]。RTE 生成器的主要输入(在其他文档中)描述于 ECU 配置描述中。因此,相应的规范 [5] 对 RTE 规范也很重要。此外,由于 RTE 生成过程是整体 AUTOSAR 方法论的重要组成部分,相应的文档 [6] 也在考虑之中。 以下列表显示了与 RTE 规范密切相互依赖的规范: - 虚拟功能总线规范 [1] - 软件组件模板规范 [2] - AUTOSAR COM 规范 [3] - AUTOSAR OS 规范 [4] - ECU 状态管理器和通信管理器规范 [7] - ECU 配置规范 [5] - 系统描述/生成规范 [8] - AUTOSAR 方法论 [6] - BSW 模块描述模板规范 [9] - AUTOSAR 通用结构模板 [10] ### 1.3 缩写和缩略语 本文档中使用的所有缩写(除了此处列出的那些)可以在官方 AUTOSAR 词汇表 [11] 中找到。 ### 1.4 技术术语 本文档中使用的所有技术术语(除了此处列出的那些)可以在官方 AUTOSAR 词汇表 [11] 或软件组件模板规范 [2] 中找到。 主要 RTE 相关术语: | 术语 | 描述 | |------|------| | **application mode manager(应用模式管理器)** | 提供模式切换服务的 AUTOSAR 软件组件。应用模式管理器的模式不必标准化。 | | **associated RTE Implementation Plug-In(关联的 RTE 实现插件)** | 分配给通信图、独占区、模式机实例或分布式共享模式组,并因此处理通过 RTE API、SchM API 或 RTE 内部代码的所有访问的 RTE 实现插件。 | | **BswSchedulableEntity activation(BswSchedulableEntity 激活)** | BswSchedulableEntity 的激活被定义为包含 BswSchedulableEntity 的任务的激活,并最终包括设置一个标志,告诉任务中的胶水代码要执行哪个 BswSchedulableEntity。 | | **BswSchedulableEntity start(BswSchedulableEntity 启动)** | BswSchedulableEntity 通过在已启动的任务中调用实现 BswSchedulableEntity 的 C 函数来启动。 | | **client(客户端)** | 客户端被定义为一个软件组件实例的一个 RPortPrototype 中的一个 ClientServerOperation。对于客户端的定义,ServerCallPoints 的数量或 RunnableEntity 对 ServerCallPoint 的访问都不相关。软件组件实例可以作为对同一服务器的多个客户端出现。 | | **CodeGenerationTime variability(CodeGenerationTime 可变性)** | 使用具有最新绑定时间 CodeGenerationTime 的 VariationPoint 或 AttributeValueVariationPoint 定义的可变性。 | | **coherency group(一致性组)** | 一组隐式读访问和隐式写访问,RTE 关心数据一致性。请注意,在本规范的上下文中,一致性的定义包括:
• 不同 VariableDataPrototypes 的读取数据值必须来自同一时间点,除非值由属于一致性组的隐式写访问更改
• 不同 VariableDataPrototypes 的写入数据值在属于一致性组的最后一次隐式写访问之后传递给不属于一致性组的读取者 | | **common mode machine instance(公共模式机实例)** | 由 BSW 模块和 SW-C 共享的特殊"模式机实例":RTE 生成器在以下情况下仅创建一个模式机实例:在软件组件的端口中实例化的 ModeDeclarationGroupPrototype 与基础软件模块实例的 providedModeGroup ModeDeclarationGroupPrototype 同步(SwcBswMapping 的 synchronizedModeGroup)。相关的模式机实例称为公共模式机实例。 | | **Communication Graph(通信图)** | 连接到彼此的 PortInterfaces 实例化的 PortPrototypes 中元素的所有 AbstractAccessPoints 的总和,或 BswModuleDescription 中彼此连接的接口元素的 BswModuleEntitys 访问的总和。 | | **RunnableEntity(可运行实体)** | 软件组件中可被 RTE 调度的执行单元。每个可运行实体由 RTE 事件触发。 | | **VFB(虚拟功能总线)** | 虚拟功能总线,AUTOSAR 通信的抽象层。 | ### 1.5 文档约定 本文档遵循 AUTOSAR 标准化的需求表示约定。需求使用 [SWS_Rte_xxxxx] 形式的 ID 标识。所有需求都封装在 `⌈⌋` 标记中。 ### 1.6 需求追踪 第 1 章和第 2 章不包含需求。第 4 章中的需求在第 4.0 节的表格中追溯到上游需求(RS_*、SRS_* 等)。详细的需求追踪表请参考原文 PDF 第 36-72 页。 --- ## 2 RTE 概述 ### 2.1 RTE 在 AUTOSAR 中的位置 运行时环境(Run-Time Environment,RTE)是 AUTOSAR ECU 架构的核心。RTE 位于应用软件组件和基础软件(BSW)之间,为它们之间的通信提供基础设施。 **图 1:RTE 在 AUTOSAR 架构中的位置**(参见原文 PDF 第 73 页) RTE 的主要职责: 1. 实现 VFB(虚拟功能总线)的接口 2. 为应用软件组件之间的通信提供基础设施 3. 调度可运行实体(RunnableEntity)和基础软件可调度实体(BswSchedulableEntity) 4. 管理 ECU 上的时基和模式 5. 提供对基础软件模块的访问 ### 2.2 AUTOSAR 概念 #### 2.2.1 AUTOSAR 软件组件 AUTOSAR 软件组件是应用程序的结构单元。组件通过端口(Ports)进行通信。端口被类型化为接口(PortInterface),接口定义组件之间交换的数据元素和操作。 **软件组件类型**: - 应用软件组件(Application Software Component,SW-C) - 传感器/执行器组件(Sensor/Actuator Component) - 参数组件(Parameter Component) - NvBlock 组件(NvBlock Component) - 复合组件(Composition) - 基础软件模块(Basic Software Module,BSW) #### 2.2.2 基础软件模块 基础软件模块(BSW)为应用软件组件提供服务。BSW 模块通过标准化的 AUTOSAR 接口(AUTOSAR Interface)暴露其功能。 **BSW 模块类型**: - 服务层(Services Layer):如 OS、EcuM、Dem、Det - ECU 抽象层(ECU Abstraction Layer):如 Mcu、Port、Dio - 微控制器抽象层(Microcontroller Abstraction Layer,MCAL):直接访问硬件 - 复杂驱动(Complex Drivers,CDD):直接访问硬件以实现特殊功能 #### 2.2.3 通信 ##### 2.2.3.1 通信范式 AUTOSAR 支持多种通信范式: - **发送方-接收方(Sender-Receiver,S/R)**:一种一对多或多对多的通信模式 - **客户端-服务器(Client-Server,C/S)**:一种同步的请求-响应模式 - **模式切换(Mode Switch)**:分发模式状态变化 - **外部和内部触发器(External/Internal Trigger)**:触发可运行实体执行 ##### 2.2.3.2 通信模式 - **显式通信(Explicit Communication)**:通过显式 API 调用(如 `Rte_Write`、`Rte_Read`)进行数据交换 - **隐式通信(Implicit Communication)**:通过 RTE 在可运行实体激活时自动读写数据 ##### 2.2.3.3 静态通信 AUTOSAR 中的通信是静态的,即所有通信关系在编译时已知。RTE 生成器分析这些静态配置并生成适当的通信代码。 ##### 2.2.3.4 多重性 AUTOSAR 支持不同类型的多重性: - **1:1**:一个发送方对一个接收方 - **1:n**:一个发送方对多个接收方 - **n:1**:多个发送方对一个接收方 - **n:m**:多个发送方对多个接收方 #### 2.2.4 并发性 AUTOSAR 系统中的并发性来源: - 多个 RTE 事件 - 多核处理器 - 内存分区 - 中断 RTE 必须正确处理这些并发情况,确保数据一致性和正确的执行顺序。 ### 2.3 RTE 生成器 RTE 生成器是 AUTOSAR 构建工具链中的关键组件。它根据 ECU 配置描述(包括软件组件、端口连接、映射等)生成 RTE 实现。 RTE 生成器的主要任务: 1. 解析输入(ECU 配置、SWC 描述、ECU 提取等) 2. 生成 RTE 头文件和源代码 3. 调度可运行实体到任务 4. 实现通信机制 5. 生成 RTE 的 BSW 模块描述 ### 2.4 设计决策 RTE 规范基于以下关键设计决策: 1. **静态生成**:RTE 在编译时生成,而非动态加载 2. **优化导向**:支持多种优化模式(如性能优先、代码大小优先) 3. **多核支持**:通过分区和任务映射支持多核架构 4. **内存保护**:通过 OS-Application 支持内存保护 5. **变体处理**:通过 PostBuild 配置支持变体处理 --- ## 3 RTE 生成过程 ### 3.1 合约阶段 合约阶段是 RTE 生成过程的第一阶段。在此阶段,RTE 生成器根据完整的系统输入(VFB、系统配置、ECU 提取等)生成 RTE 合约。 #### 3.1.1 RTE 合约阶段 RTE 合约包含: - 所有可运行实体的入口点声明 - 所有端口和接口的类型定义 - 客户机/服务器操作的 API 声明 - 实现数据类型定义 - 编译时常量 合约阶段生成的代码不包含实际的可运行实体实现,但声明了所有 API 和类型定义,使 SW-C 实现可以独立编译。 #### 3.1.2 基础软件调度器合约阶段 基础软件调度器合约阶段生成 BSW 调度器的合约,类似于 RTE 合约。 ### 3.2 预构建数据集合约阶段 预构建数据集合约阶段为每个预构建变体生成 RTE 合约。这允许在不同的预构建配置集中重用 SW-C 实现。 ### 3.3 编辑 RTE 的 ECU 配置 ECU 配置包含所有特定于 ECU 的 RTE 配置信息,如: - 任务映射(Task Mapping) - 时序约束 - 中间件配置 - 通信配置 ### 3.4 生成阶段 生成阶段根据 RTE 合约和 ECU 配置生成完整的 RTE 实现。 #### 3.4.1 基础软件调度器生成阶段 生成 BSW 调度器的实现,包括任务结构体、调度逻辑、模式管理等。 #### 3.4.2 RTE 生成阶段 生成 RTE 的完整实现,包括: - 通信机制实现 - 调度实现 - 内存分配 - API 函数实现 - 模式管理 #### 3.4.3 基础软件模块描述生成 RTE 生成器还生成自身的 BSW 模块描述,包括 BswModuleDescription、BswInternalBehavior 和 BswImplementation。 ### 3.5 预构建数据集生成阶段 为每个预构建数据集生成完整的 RTE 实现。 ### 3.6 后构建数据集生成阶段 为后构建变体生成 RTE 实现。后构建变体允许在运行时切换不同的配置。 ### 3.7 RTE 配置与其他 BSW 模块的交互 RTE 与其他 BSW 模块的配置交互: - OS:任务、事件、ISR 配置 - COM:信号、PDU、I-PDU 配置 - EcuM:启动、关闭、唤醒配置 - BswM:模式管理 --- ## 4 RTE 功能规范 > **⚠️ 重要说明**:第 4 章是 RTE 规范的核心,原文超过 1000 页。以下是该章节的全面摘要。如需详细的功能规范、API 实现、配置细节、状态机、算法和示例,请参考原文 PDF 第 98-440 页。 ### 4.1 架构概念 #### 4.1.1 范围 第 4.1 节描述了 RTE 的架构概念,包括 RTE 与各种 AUTOSAR 元素的关系。 #### 4.1.2 RTE 和数据类型 RTE 处理多种类型的数据: - **应用数据类型(Application Data Types)**:用于软件组件之间的接口 - **实现数据类型(Implementation Data Types)**:用于实际代码生成 - **基础数据类型(Base Types)**:映射到 C/C++ 基本类型 - **平台类型(Platform Types)**:标准化的 AUTOSAR 类型 RTE 根据系统配置自动生成数据类型转换例程。 #### 4.1.3 RTE 和 AUTOSAR 软件组件 ##### 4.1.3.1 软件组件的层次结构 软件组件可以层次化组织: - **原子软件组件(Atomic SW-C)**:不可分解的最小单元 - **复合组件(Composition)**:包含其他原子组件或组合 ##### 4.1.3.2 端口、接口和连接 **端口**(Port)是软件组件的通信端点。 **接口**(Interface)定义端口之间交换的内容。 **连接**(Connection)连接两个端口。 AUTOSAR 支持的接口类型: - 发送方-接收方接口(Sender-Receiver Interface) - 客户端-服务器接口(Client-Server Interface) - 模式切换接口(Mode Switch Interface) - 触发器接口(Trigger Interface) - 参数接口(Parameter Interface) ##### 4.1.3.3 内部行为 软件组件的内部行为定义组件内部的功能和交互: - **可运行实体(RunnableEntity)**:可执行的代码单元 - **RTE 事件(RTE Event)**:触发可运行实体的事件 - **服务器调用点(ServerCallPoint)**:C/S 操作的调用点 - **模式切换点(ModeSwitchPoint)**:模式切换的接入点 - **每实例内存(Per Instance Memory,PIM)**:每个实例独立的数据 ##### 4.1.3.4 实现 实现描述了软件组件的具体实现细节: - 代码生成选项 - 优化模式 - 实现语言(C 或 C++) #### 4.1.4 实例化 ##### 4.1.4.1 范围和背景 AUTOSAR 支持软件组件的多次实例化。多个实例可以是相同类型的不同实例。 ##### 4.1.4.2 实例化概念 - **单实例化(Single Instantiation)**:一个软件组件类型只有一个实例 - **多实例化(Multiple Instantiation)**:一个软件组件类型有多个实例 ##### 4.1.4.3 单实例化 单实例化时,所有数据都是全局的,无需标识实例。 ##### 4.1.4.4 多实例化 多实例化需要: - 实例标识(Instance ID) - 每实例内存(Per-Instance Memory,PIM) - 可重入代码 #### 4.1.5 RTE 和 AUTOSAR 服务 RTE 提供对 AUTOSAR 服务的访问: - OS(任务、事件、调度表) - EcuM(启动、关闭、唤醒) - Dem(诊断事件管理) - Det(开发错误追踪) #### 4.1.6 RTE 和 ECU 抽象 RTE 通过标准接口与 ECU 抽象层通信,使应用软件独立于具体硬件。 #### 4.1.7 RTE 和复杂驱动 RTE 支持复杂驱动(CDD)的集成,CDD 可以是其他 BSW 模块的客户端。 #### 4.1.8 基础软件调度器和基础软件模块 基础软件调度器(Basic Software Scheduler)是 RTE 的一部分,负责调度 BSW 模块的可调度实体。 ##### 4.1.8.1 基础软件模块的描述 ##### 4.1.8.2 基础软件接口 ##### 4.1.8.3 基础软件内部行为 ##### 4.1.8.4 基础软件实现 ##### 4.1.8.5 基础软件模块的多个实例 ##### 4.1.8.6 AUTOSAR 服务 / ECU 抽象 / 复杂驱动 ### 4.2 RTE 和基础软件调度器实现方面 > **📌 摘要说明(4.2-4.10 节)**:以下章节(第 4.2-4.10 节)采用"重点摘要"策略。原文 PDF 第 115-440 页包含完整的实现细节、状态机、算法、流程图和示例。 #### 4.2.1 范围 本节描述 RTE 和 BSW 调度器与 OS 交互的实现细节。 #### 4.2.2 OS RTE 与 AUTOSAR OS 紧密集成。 ##### 4.2.2.1 OS 对象 RTE 使用以下 OS 对象: - 任务(Tasks) - 事件(Events) - 资源(Resources) - 计数器(Counters) - 报警(Alarms) - 调度表(Schedule Tables) - 中断(ISRs) ##### 4.2.2.2 基础软件可调度实体 基础软件可调度实体(BswSchedulableEntity)类似于可运行实体,但属于 BSW 模块。 ##### 4.2.2.3 可运行实体 可运行实体(RunnableEntity)是软件组件中可被 RTE 调度的执行单元。 ##### 4.2.2.4 RTE 事件 RTE 事件触发可运行实体的执行。RTE 事件类型包括: - `TimingEvent`:周期性触发 - `DataReceivedEvent`:数据接收触发 - `DataSendCompletedEvent`:数据发送完成触发 - `OperationInvokedEvent`:C/S 操作调用触发 - `SwcModeSwitchEvent`:模式切换触发 - `ExternalTriggerOccurredEvent`:外部触发器事件 - `InternalTriggerOccurredEvent`:内部触发器事件 - `InitEvent`:初始化事件 - `BackgroundEvent`:后台事件 - `DataWriteCompletedEvent`:数据写入完成事件 - `DataReceiveErrorEvent`:数据接收错误事件 - `AsynchronousServerCallReturnsEvent`:异步服务器调用返回事件 - `ModeSwitchedAckEvent`:模式切换确认事件 - `SwcModeManagerErrorEvent`:SWC 模式管理器错误事件 - `TransformerErrorEvent`:转换器错误事件 ##### 4.2.2.5 BswEvents BswEvent 类似于 RTE 事件,但用于 BSW 模块。 ##### 4.2.2.6 可运行实体和基础软件可调度实体到任务的映射 详细描述请参考原文 PDF 第 126-132 页。RTE 支持多种映射场景: - 仅包含 RunnableEntity 的任务 - 仅包含 BswSchedulableEntity 的任务 - 包含 RunnableEntity 和 BswSchedulableEntity 交错执行的任务 - 跨核映射的任务 ##### 4.2.2.7 可运行实体执行时间的监控 通过 OS 任务监控和任务链机制,RTE 支持对可运行实体的执行时间进行监控。 ##### 4.2.2.8 TimingEvent 激活的可运行实体 详细说明请参考原文 PDF 第 137-138 页。 ##### 4.2.2.9 TimingEvent 激活的可运行实体的同步 详细说明请参考原文 PDF 第 138-139 页。 ##### 4.2.2.10 BackgroundEvent 激活的可运行实体和基础软件可调度实体 详细说明请参考原文 PDF 第 139-140 页。 ##### 4.2.2.11 InitEvent 激活的可运行实体 详细说明请参考原文 PDF 第 140-141 页。 #### 4.2.3 可执行实体的激活和启动 ##### 4.2.3.1 通过直接函数调用激活 ##### 4.2.3.2 RunnableEntity 和 BswSchedulableEntity 的激活偏移 ##### 4.2.3.3 提供激活 RTE 事件 #### 4.2.4 中断解耦和通知 ##### 4.2.4.1 基本通知原则 ##### 4.2.4.2 中断 ##### 4.2.4.3 在 RTE 层解耦中断 ##### 4.2.4.4 RTE 和中断类别 ##### 4.2.4.5 RTE 和基础软件调度器与 BswExecutionContext #### 4.2.5 数据一致性 ##### 4.2.5.1 概述 RTE 支持多种数据一致性机制: - 独占区(Exclusive Areas) - InterRunnableVariables - 读取/写入锁 - 中断锁定 ##### 4.2.5.2 通信模式 ##### 4.2.5.3 概念 ##### 4.2.5.4 保证数据一致性的机制 ##### 4.2.5.5 独占区 独占区是 RTE 中保证数据一致性的关键机制。RTE 提供 `Rte_Enter` 和 `Rte_Exit` API 来进入和退出独占区。 ##### 4.2.5.6 InterRunnableVariables InterRunnableVariables 是同一软件组件实例的不同可运行实体之间共享的变量。它们用于避免并发访问问题。 #### 4.2.6 可运行实体和基础软件可调度实体的多次触发 #### 4.2.7 参数和数据元素的实现 ##### 4.2.7.1 概述 ##### 4.2.7.2 兼容性规则 ##### 4.2.7.3 接口元素的实现 ##### 4.2.7.4 VariableDataPrototypes 的初始化 ##### 4.2.7.5 初始值计算 #### 4.2.8 测量和校准 ##### 4.2.8.1 概述 RTE 支持 AUTOSAR 测量和校准(Measurement and Calibration)功能。 ##### 4.2.8.2 测量 RTE 支持以下测量类型: - 测量点(Measurement Points) - 测量跟踪(Measurement Tracing) - 全局时间测量 ##### 4.2.8.3 校准 RTE 支持以下校准功能: - 校准参数(Calibration Parameters) - 校准数据仿真方法 - A2L 生成支持 ##### 4.2.8.4 McSupportData 生成 #### 4.2.9 访问 NVRAM 数据 ##### 4.2.9.1 概述 RTE 通过 NvBlockComponentType 提供对 NVRAM 数据的访问。 ##### 4.2.9.2 NvBlockSwComponentType 的使用 ##### 4.2.9.3 NvBlockSwComponentType 的接口 ##### 4.2.9.4 数据一致性 ### 4.3 通信范式 #### 4.3.1 发送方-接收方 ##### 4.3.1.1 介绍 发送方-接收方(S/R)通信是 AUTOSAR 中最常用的通信范式。 ##### 4.3.1.2 接收模式 RTE 支持两种接收模式: - **Last-is-Best**(最后值最好) - **Buffered**(缓冲接收) ##### 4.3.1.3 多个数据元素 一个端口接口可以包含多个数据元素(DataElement)。 ##### 4.3.1.4 多个接收方和发送方 RTE 支持 1:n、n:1、n:m 通信模式。 ##### 4.3.1.5 隐式和显式数据接收和发送 - 显式:通过 API 调用 - 隐式:RTE 在可运行实体激活时自动执行 ##### 4.3.1.6 发送确认 RTE 支持传输确认(Transmission Acknowledgement),用于通知发送方数据已成功发送。 ##### 4.3.1.7 通信超时 RTE 支持通信超时(Communication Time-out),用于检测阻塞的数据访问。 ##### 4.3.1.8 数据元素失效 RTE 支持数据元素失效(Data Element Invalidation),用于标记无效数据。 ##### 4.3.1.9 过滤器 RTE 支持数据过滤器(Filters),用于在传递数据前对其进行处理。 ##### 4.3.1.10 缓冲 RTE 支持数据缓冲(Buffering),用于在接收方尚未读取时保留数据。 ##### 4.3.1.11 操作 详细 S/R 操作说明请参考原文 PDF 第 263-277 页。 ##### 4.3.1.12 数据元素的"从未接收"状态 ##### 4.3.1.13 数据元素的"更新标志" ##### 4.3.1.14 动态数据类型 RTE 支持变长数据类型(Variable-Length Data Types)。 ##### 4.3.1.15 通过 TP 的 ECU 间通信 RTE 支持通过传输协议(TP)的 ECU 间通信。 ##### 4.3.1.16 字节数组的 ECU 间通信 ##### 4.3.1.17 确认事件的处理 #### 4.3.2 客户端-服务器 ##### 4.3.2.1 介绍 客户端-服务器(C/S)通信是一种请求-响应模式。 ##### 4.3.2.2 多重性 RTE 支持 1:n 和 n:m 的 C/S 通信。 ##### 4.3.2.3 通信超时 C/S 通信支持超时机制。 ##### 4.3.2.4 端口定义的参数值 RTE 支持端口定义的参数值(Port-Defined Argument Values)。 ##### 4.3.2.5 缓冲 C/S 通信支持请求缓冲。 ##### 4.3.2.6 ECU 间和分区间请求-响应映射 ##### 4.3.2.7 参数序列化 RTE 支持 C/S 通信中的参数序列化。 ##### 4.3.2.8 操作 详细 C/S 操作说明请参考原文 PDF 第 295-300 页。 #### 4.3.3 SWC 内部通信 ##### 4.3.3.1 Inter Runnable Variables InterRunnableVariables 用于 SWC 内部可运行实体之间的数据通信。 #### 4.3.4 分区通信 ##### 4.3.4.1 使用 IOC 的分区间数据通信 RTE 使用 OS 的 IOC(Inter-OS-Application Communication)机制实现分区间通信。 ##### 4.3.4.2 使用基础软件调度器的分区间数据通信 ##### 4.3.4.3 在多核/多分区配置中访问 Ld(Com) 和 Det ##### 4.3.4.4 分区通信的信令和控制流支持 ##### 4.3.4.5 受信任函数 ##### 4.3.4.6 内存保护和 RTE API 中的指针类型参数 #### 4.3.5 PortInterface 元素映射和数据转换 ##### 4.3.5.1 PortInterface 元素映射 RTE 支持端口接口元素之间的映射。 #### 4.3.6 网络表示 ##### 4.3.6.1 无数据转换的网络表示 ##### 4.3.6.2 带数据转换的网络表示 #### 4.3.7 数据转换 详细数据转换说明请参考原文 PDF 第 312-318 页。 #### 4.3.8 运行时的范围检查 RTE 支持运行时的范围检查(Range Check)。 ### 4.4 模式 #### 4.4.1 模式用户 #### 4.4.2 模式管理器 #### 4.4.3 ModeDeclarations 和 ModeDeclarationGroups 的语义细化 #### 4.4.4 RTE/BSW 调度器在拦截模式切换通知时采取的操作顺序 #### 4.4.5 模式机实例到 RTE 和 BSW 调度器的分配 #### 4.4.6 模式机实例的初始化 #### 4.4.7 模式切换的通知 #### 4.4.8 模式切换确认 #### 4.4.9 模式切换错误处理 ##### 4.4.9.1 模式用户被终止 ##### 4.4.9.2 模式管理器被终止 #### 4.4.10 ModeDeclarations 的映射 #### 4.4.11 分布式共享模式队列 ### 4.5 外部和内部触发器 #### 4.5.1 外部触发事件通信 ##### 4.5.1.1 介绍 ##### 4.5.1.2 触发器接收方 ##### 4.5.1.3 触发器发送方 ##### 4.5.1.4 多重性 ##### 4.5.1.5 同步触发器 #### 4.5.2 Inter Runnable 触发 ##### 4.5.2.1 多重性 #### 4.5.3 Inter BSW Module Entity 触发 #### 4.5.4 Inter ECU 触发通信 #### 4.5.5 触发器的队列 #### 4.5.6 触发的可执行实体的激活 ### 4.6 初始化和终结化 #### 4.6.1 RTE 的初始化和终结化 ##### 4.6.1.1 基础软件调度器的初始化 ##### 4.6.1.2 RTE 的初始化 ##### 4.6.1.3 RTE 的停止和重启 ##### 4.6.1.4 RTE 的终结化 ##### 4.6.1.5 基础软件调度器的终结化 #### 4.6.2 AUTOSAR 软件组件的初始化和终结化 ### 4.7 变体处理支持 #### 4.7.1 概述 变体处理允许在运行时或编译时选择不同的配置。 #### 4.7.2 选择变体和绑定可变性 详细说明请参考原文 PDF 第 371-375 页。 #### 4.7.3 影响 RTE 生成的可变性 详细说明请参考原文 PDF 第 376-384 页。 #### 4.7.4 影响 BSW 调度器生成的可变性 详细说明请参考原文 PDF 第 384-386 页。 #### 4.7.5 影响 SWC 实施的可变性 ### 4.8 开发错误 #### 4.8.1 DET 报告标识符 #### 4.8.2 DET 错误标识符 #### 4.8.3 DET 错误分类 RTE 报告的开发错误: | 错误代码 | 描述 | |---------|------| | `RTE_E_OK` | 无错误 | | `RTE_E_INVALID` | 无效参数 | | `RTE_E_UNCONNECTED` | 端口未连接 | | `RTE_E_LIMIT` | 超出限制 | | `RTE_E_TIMEOUT` | 超时 | | `RTE_E_INCONSISTENT` | 不一致 | | `RTE_E_TRANSMIT_ACK` | 发送确认错误 | | `RTE_E_NEVER_RECEIVED` | 从未接收 | | `RTE_E_OUT_OF_RANGE` | 超出范围 | | `RTE_E_HARD_TRANSFORMER_ERROR` | 硬转换器错误 | | `RTE_E_SOFT_TRANSFORMER_ERROR` | 软转换器错误 | | `RTE_E_LOST_DATA` | 数据丢失 | ### 4.9 旁路支持 RTE 支持旁路(Bypass)功能,用于快速原型设计(Rapid Prototyping)和 ECU 开发。 #### 4.9.1 旁路描述 #### 4.9.2 组件包装方法 #### 4.9.3 直接缓冲区访问方法 #### 4.9.4 扩展缓冲区访问方法 ##### 4.9.4.1 全局启用 ##### 4.9.4.2 RPT 准备 ##### 4.9.4.3 级别 1 - 后构建挂钩 ##### 4.9.4.4 级别 2 - 非后构建挂钩 ##### 4.9.4.5 级别 3 - 扩展非后构建挂钩 ##### 4.9.4.6 级别 2 和 3 - 非后构建挂钩和隐式通信 ##### 4.9.4.7 导出 #### 4.9.5 基于服务的原型设计 ##### 4.9.5.1 快速原型设计场景 ##### 4.9.5.2 服务函数 ##### 4.9.5.3 集成 ##### 4.9.5.4 服务点 ID ##### 4.9.5.5 条件可运行实体调用 ##### 4.9.5.6 与 RTE 管理缓冲区的交互 ##### 4.9.5.7 导出 ### 4.10 数据转换 #### 4.10.1 转换器的执行 ##### 4.10.1.1 用于 ECU 间通信的转换器 ##### 4.10.1.2 用于 ECU 内通信的转换器 #### 4.10.2 转换器链 #### 4.10.3 缓冲区处理 #### 4.10.4 转换器的接口 #### 4.10.5 错误处理 #### 4.10.6 基于 COM 的转换器 --- ## 5 RTE 参考 ### 5.1 范围 第 5 章描述 RTE 的编程接口、模块结构、数据类型和数据结构。 #### 5.1.1 编程语言 RTE 支持 C 和 C++ 编程语言。RTE 生成器可以根据 AUTOSAR 软件组件描述中的 `language` 属性生成相应的实现。 #### 5.1.2 生成器原则 ##### 5.1.2.1 操作模式 RTE 生成器支持以下操作模式: - **PRE-COMPILE**:所有配置在编译时已知 - **POST-BUILD**:某些配置在编译后选择 - **LINK-TIME**:某些配置在链接时选择 ##### 5.1.2.2 优化模式 RTE 支持多种优化模式: - **Performance**(性能优先) - **Code Size**(代码大小优先) - **ROM**(ROM 优化) - **RAM**(RAM 优化) - **Balanced**(平衡) ##### 5.1.2.3 构建支持 RTE 支持多种构建配置和变体。 ##### 5.1.2.4 软件组件命名空间 RTE 为每个软件组件提供独立的命名空间。 #### 5.1.3 生成器外部配置开关 ### 5.2 API 原则 #### 5.2.1 RTE 命名空间 #### 5.2.2 直接 API 直接 API 是 SW-C 用于访问 RTE 功能的函数。每个端口和操作都有唯一的 API 函数。 #### 5.2.3 间接 API 间接 API 通过端口数组访问端口,允许更灵活的代码结构。 ##### 5.2.3.1 访问端口句柄 #### 5.2.4 dataReadAccess 和 dataWriteAccess 角色中的变量访问 #### 5.2.5 每实例内存 #### 5.2.6 API 映射 ##### 5.2.6.1 "RTE 合约"阶段 ##### 5.2.6.2 "RTE 生成"阶段 ##### 5.2.6.3 函数省略 ##### 5.2.6.4 API 命名约定 RTE API 命名遵循 `Rte___` 模式。 ##### 5.2.6.5 API 参数 ##### 5.2.6.6 返回值 ##### 5.2.6.7 返回引用 ##### 5.2.6.8 错误处理 ##### 5.2.6.9 成功反馈 #### 5.2.7 未连接的端口 ##### 5.2.7.1 数据元素 ##### 5.2.7.2 模式切换端口 ##### 5.2.7.3 客户端-服务器 ##### 5.2.7.4 外部触发器 #### 5.2.8 非相同端口接口 ### 5.3 RTE 模块 RTE 由多个模块组成,每个模块提供特定的功能。 #### 5.3.1 RTE 头文件 `Rte.h` 是 RTE 的主头文件。 #### 5.3.2 生命周期头文件 `Rte_Lifecycle.h` 包含生命周期 API。 #### 5.3.3 应用头文件 应用头文件(`Rte_.h`)包含特定软件组件的类型定义和 API 声明。 ##### 5.3.3.1 文件名 ##### 5.3.3.2 范围 ##### 5.3.3.3 文件内容 #### 5.3.4 RTE 类型头文件 `Rte_Types.h` 包含实现数据类型的类型定义。 ##### 5.3.4.1 文件内容 ##### 5.3.4.2 实现数据类型的分类 - 基本实现数据类型 - 数组实现数据类型 - 结构实现数据类型 - 联合实现数据类型 ##### 5.3.4.3 基本实现数据类型 ##### 5.3.4.4 数组实现数据类型 ##### 5.3.4.5 结构实现数据类型 ##### 5.3.4.6 联合实现数据类型 ##### 5.3.4.7 实现数据类型重定义 ##### 5.3.4.8 指针实现数据类型 ##### 5.3.4.9 具有变化点的实现数据类型 ##### 5.3.4.10 数据类型的命名 ##### 5.3.4.11 C/C++ #### 5.3.5 RTE 数据句柄类型头文件 `Rte_DataHandleType.h` 包含数据句柄类型定义。 #### 5.3.6 应用类型头文件 `Rte__Type.h` 包含特定组件的应用数据类型定义。 ##### 5.3.6.4 RTE 模式 ##### 5.3.6.5 枚举数据类型 ##### 5.3.6.6 范围数据类型 ##### 5.3.6.7 实现数据类型符号 ##### 5.3.6.8 用于访问结构中可选成员的可用性信息的宏 #### 5.3.7 VFB 追踪头文件 `Rte_Trace.h` 包含 VFB 追踪功能。 #### 5.3.8 RTE 配置头文件 `Rte_Cfg.h` 包含 RTE 的配置信息。 #### 5.3.9 生成的 RTE ##### 5.3.9.1 头文件使用 ##### 5.3.9.2 C/C++ ##### 5.3.9.3 文件内容 ##### 5.3.9.4 重入性 #### 5.3.10 RTE 后构建变体集 ### 5.4 RTE 数据结构 #### 5.4.1 实例句柄 实例句柄(`Rte_Instance`)用于标识多实例化组件的特定实例。 #### 5.4.2 组件数据结构 组件数据结构包含所有与组件相关的数据。 ##### 5.4.2.1 数据句柄段 ##### 5.4.2.2 每实例内存句柄段 ##### 5.4.2.3 Inter Runnable 变量句柄段 ##### 5.4.2.4 独占区 API 段 ##### 5.4.2.5 端口 API 段 ##### 5.4.2.6 校准参数句柄段 ##### 5.4.2.7 Inter Runnable 变量 API 段 ##### 5.4.2.8 Inter Runnable 触发 API 段 ##### 5.4.2.9 实例 ID 段 ##### 5.4.2.10 RAM 块数据更新句柄段 ##### 5.4.2.11 供应商特定段 ### 5.5 API 数据类型 #### 5.5.1 `Std_ReturnType` 标准返回类型,AUTOSAR 标准类型。 ##### 5.5.1.1 基础设施错误 ##### 5.5.1.2 应用程序错误 ##### 5.5.1.3 预定义错误代码 | 错误代码 | 描述 | |---------|------| | `RTE_E_OK` | 无错误 | | `RTE_E_INVALID` | 无效参数 | | `RTE_E_UNCONNECTED` | 端口未连接 | | `RTE_E_LIMIT` | 超出限制 | | `RTE_E_TIMEOUT` | 超时 | | `RTE_E_INCONSISTENT` | 不一致 | | `RTE_E_TRANSMIT_ACK` | 发送确认错误 | | `RTE_E_NEVER_RECEIVED` | 从未接收 | | `RTE_E_OUT_OF_RANGE` | 超出范围 | | `RTE_E_HARD_TRANSFORMER_ERROR` | 硬转换器错误 | | `RTE_E_SOFT_TRANSFORMER_ERROR` | 软转换器错误 | | `RTE_E_LOST_DATA` | 数据丢失 | | `RTE_E_COM_STOPPED` | 通信停止 | | `RTE_E_COM_BUSY` | 通信忙 | | `RTE_E_SEG_FAULT` | 分段错误 | #### 5.5.2 `Rte_Instance` 实例句柄类型。 ```c typedef uint16 Rte_Instance; ``` #### 5.5.3 `Rte_TransformerError` 转换器错误类型。 #### 5.5.4 RTE 模式 #### 5.5.5 枚举数据类型 #### 5.5.6 范围数据类型 #### 5.5.7 具有位域转换的数据类型 ### 5.6 API 参考 > **📌 摘要说明(第 5.6 节)**:RTE 规范定义了 200+ 个 API 函数。以下列出核心 API 函数的简要说明。完整的 API 规范(包括所有参数描述、存在条件、返回代码和示例)请参考原文 PDF 第 563-630 页。 #### 5.6.1 核心数据访问 API ##### `Rte_Write` ```c Std_ReturnType Rte_Write_

_( [IN Rte_Instance ,] IN , [OUT Rte_TransformerError transformerError] ); ``` 发起对具有"data"语义的 S/R 数据元素的显式发送-接收传输。 **关键需求**: - `[SWS_Rte_01071]`:API 签名 - `[SWS_Rte_01280]`:存在条件 - `[SWS_Rte_07820]`:成功时返回 `RTE_E_OK` - `[SWS_Rte_07822]`:通信停止时返回 `RTE_E_COM_STOPPED` ##### `Rte_Read` ```c Std_ReturnType Rte_Read_

_( [IN Rte_Instance ,] OUT , [OUT Rte_TransformerError transformerError] ); ``` 从 S/R 数据元素接收数据。 ##### `Rte_Send` ```c Std_ReturnType Rte_Send_

_( [IN Rte_Instance ,] IN , [OUT Rte_TransformerError transformerError] ); ``` 显式发送数据(用于 queued 语义)。 ##### `Rte_Receive` ```c Std_ReturnType Rte_Receive_

_( [IN Rte_Instance ,] OUT , [OUT Rte_TransformerError transformerError] ); ``` 显式接收数据(用于 queued 语义)。 ##### `Rte_DRead` 显式接收数据(带数据元素失效检查)。 ##### `Rte_Call` ```c Std_ReturnType Rte_Call_

_( [IN Rte_Instance ,] [IN ,] [OUT ] ); ``` 调用 C/S 操作。 ##### `Rte_Result` 获取 C/S 调用的结果。 ##### `Rte_Pim` 访问每实例内存(Per Instance Memory,PIM)。 ##### `Rte_CData` 访问组件数据。 ##### `Rte_Prm` 访问参数数据。 #### 5.6.2 隐式通信 API ##### `Rte_IRead` ```c Rte_IRead_

_( [IN Rte_Instance ] ); ``` 隐式读取数据元素。 ##### `Rte_IWrite` ```c void Rte_IWrite_

_( [IN Rte_Instance ,] IN ); ``` 隐式写入数据元素。 ##### `Rte_IWriteRef` 隐式写入数据元素(通过引用)。 ##### `Rte_IInvalidate` ```c void Rte_IInvalidate_

_( [IN Rte_Instance ] ); ``` 隐式使数据元素失效。 ##### `Rte_IStatus` ```c Std_ReturnType Rte_IStatus_

_( [IN Rte_Instance ] ); ``` 获取隐式通信的状态。 ##### `Rte_IsUpdated` ```c boolean Rte_IsUpdated_

_( [IN Rte_Instance ] ); ``` 检查数据元素自上次读取以来是否已更新。 #### 5.6.3 Inter Runnable Variable API ##### `Rte_IrvIRead` 读取 InterRunnableVariable。 ##### `Rte_IrvIWrite` 写入 InterRunnableVariable。 ##### `Rte_IrvIWriteRef` 通过引用写入 InterRunnableVariable。 ##### `Rte_IrvRead` 显式读取 InterRunnableVariable。 ##### `Rte_IrvWrite` 显式写入 InterRunnableVariable。 #### 5.6.4 独占区 API ##### `Rte_Enter` ```c void Rte_Enter_( [IN Rte_Instance ] ); ``` 进入独占区。 ##### `Rte_Exit` ```c void Rte_Exit_( [IN Rte_Instance ] ); ``` 退出独占区。 #### 5.6.5 模式管理 API ##### `Rte_Mode` ```c Rte_Mode_

([IN Rte_Instance ]); ``` 获取当前模式。 ##### Enhanced Rte_Mode 扩展的 `Rte_Mode` API。 #### 5.6.6 触发器 API ##### `Rte_Trigger` ```c void Rte_Trigger_

([IN Rte_Instance ]); ``` 触发一个外部触发器。 ##### `Rte_IrTrigger` ```c void Rte_IrTrigger_

([IN Rte_Instance ]); ``` 触发一个内部触发器。 ##### `Rte_IFeedback` ```c void Rte_IFeedback_

([IN Rte_Instance ]); ``` 提供触发反馈。 #### 5.6.7 反馈 API ##### `Rte_Feedback` 显式反馈。 ##### `Rte_SwitchAck` ```c Std_ReturnType Rte_SwitchAck_

( [IN Rte_Instance ,] OUT ); ``` 确认模式切换。 #### 5.6.8 其他 API ##### `Rte_Switch` ```c Std_ReturnType Rte_Switch_

( [IN Rte_Instance ,] IN ); ``` 请求模式切换。 ##### `Rte_Invalidate` ```c void Rte_Invalidate_

([IN Rte_Instance ]); ``` 使数据元素失效。 ##### `Rte_PBCon` 获取 PostBuild 配置。 ##### `Rte_IsAvailable` 检查端口/接口是否可用。 ##### `Rte_SetAvailable` 设置端口/接口的可用性。 ### 5.7 可运行实体参考 #### 5.7.1 签名 可运行实体的签名由 RTE 生成器根据内部行为描述生成。 #### 5.7.2 入口点原型 ```c void (void); ``` #### 5.7.3 角色参数 #### 5.7.4 返回值 #### 5.7.5 触发事件 ##### 5.7.5.1 TimingEvent ##### 5.7.5.2 BackgroundEvent ##### 5.7.5.3 SwcModeSwitchEvent ##### 5.7.5.4 AsynchronousServerCallReturnsEvent ##### 5.7.5.5 DataReceiveErrorEvent ##### 5.7.5.6 OperationInvokedEvent ##### 5.7.5.7 DataReceivedEvent ##### 5.7.5.8 DataSendCompletedEvent ##### 5.7.5.9 ModeSwitchedAckEvent ##### 5.7.5.10 SwcModeManagerErrorEvent ##### 5.7.5.11 ExternalTriggerOccurredEvent ##### 5.7.5.12 InternalTriggerOccurredEvent ##### 5.7.5.13 DataWriteCompletedEvent ##### 5.7.5.14 InitEvent ##### 5.7.5.15 TransformerErrorEvent #### 5.7.6 重入性 ### 5.8 RTE 生命周期 API 参考 #### 5.8.1 `Rte_Start` ```c void Rte_Start(void); ``` 启动 RTE。 #### 5.8.2 `Rte_Stop` ```c void Rte_Stop(void); ``` 停止 RTE。 #### 5.8.3 `Rte_PartitionTerminated` 通知 RTE 某个分区已终止。 ### 5.9 RTE 回调参考 > **⚠️ 摘要说明**:RTE 提供多种回调 API,包括 Rte_IrTrigger(内部触发器)、Rte_SwitchAck(模式切换确认)等。详细规范请参考原文 PDF 第 33782-34948 行。 ### 5.10 预期接口 RTE 期望从其他 BSW 模块接收的接口: - **OS**:任务、事件、ISR、ScheduleTable - **COM**:信号、I-PDU、传输 - **EcuM**:启动、关闭、唤醒 - **BswM**:模式请求 - **Dem**:诊断事件 - **Det**:开发错误 ### 5.11 VFB 追踪参考 VFB 追踪 API 用于跟踪 RTE 通信活动。 --- ## 6 基础软件调度器参考 > **📌 摘要说明(第 6 章)**:第 6 章描述基础软件调度器(BSW Scheduler)的 API 和配置。基础软件调度器负责调度 BSW 模块的可调度实体(BswSchedulableEntity),类似于 RTE 调度软件组件的可运行实体。详细规范请参考原文 PDF 第 357-439 页。 ### 6.1 范围 ### 6.2 API 原则 ### 6.3 基础软件调度器模块 ### 6.4 API 数据类型 ### 6.5 API 参考 主要 BSW 调度器 API: - `SchM_Enter_` / `SchM_Exit_`:进入/退出 BSW 独占区 - `SchM_Init`:初始化 BSW 调度器 - `SchM_MainFunction_<...>`:BSW 主函数 ### 6.6 BSW 模块实体参考 ### 6.7 基础软件调度器生命周期 API 参考 --- ## 7 RTE 实现插件 > **📌 摘要说明(第 7 章)**:第 7 章描述 RTE 实现插件(RTE Implementation Plug-Ins),是 AUTOSAR 4.4 中引入的新特性,用于允许在资源受限的系统上实现高效的 RTE。详细规范请参考原文 PDF 第 38567-44462 行。 ### 7.1 介绍 RTE 实现插件(RTE Implementation Plug-Ins)是可选的代码段,可由系统集成商实现以定制 RTE 的行为。它们可以: - 实现显式通信 - 实现隐式通信 - 实现独占区 - 实现跨核通信 - 实现模式管理 - 实现转换器 ### 7.2 RTE 实现插件与 RTE 之间的接口 ### 7.3 RTE 实现插件功能规范 #### 主要插件类型 | 插件类型 | 描述 | |---------|------| | **显式通信插件** | 处理 S/R 和 C/S 的显式通信 | | **隐式通信插件** | 处理隐式数据访问 | | **独占区插件** | 实现独占区 | | **全局副本实例化插件** | 处理跨核实例化 | | **跨核通信插件** | 处理跨核通信 | | **跨安全分区通信插件** | 处理跨安全分区通信 | | **共享模式队列插件** | 实现共享模式队列 | | **转换器插件** | 实现 C/S 和触发器通信中的转换器 | | **兼容模式插件** | 支持 AUTOSAR 2.1/3.x 兼容模式 | --- ## 8 配置规范 > **📌 摘要说明(第 8 章)**:第 8 章描述 RTE 的配置规范,包括配置容器、配置参数和配置类。RTE 的配置结构非常复杂,包含数百个配置容器和参数。详细规范请参考原文 PDF 第 44463-51200 行。 ### 8.1 RTE 模块配置 RTE 模块配置通过 ECUC 容器定义。 ### 8.2 RTE 生成参数 RTE 生成参数控制 RTE 生成器的行为。 #### 主要生成参数 | 参数 | 描述 | |------|------| | `RteOptimizationMode` | RTE 优化模式 | | `RteBswSupport` | 启用/禁用 BSW 调度器支持 | | `RteDataContractsVersion` | 数据合约版本 | | `RteHookFnsSupport` | 启用/禁用 Hook 函数支持 | | `RteImplicitCommunicationApi` | 隐式通信 API 模式 | | `RteInterPartitionCommunication` | 分区通信实现 | | `RteMemoryMappingSupport` | 内存映射支持 | | `RteExclusiveAreaImpl` | 独占区实现方式 | | `RteServiceComponentSupport` | 服务组件支持 | ### 8.3 RTE 预构建配置 ### 8.4 RTE 后构建配置 ### 8.5 软件组件实例的处理 #### 主要配置容器 | 容器 | 描述 | |------|------| | `RteSoftwareComponentInstance` | 软件组件实例配置 | | `RteRunnableEntity` | 可运行实体配置 | | `RteRteEvent` | RTE 事件配置 | | `RteEvent` | 事件配置 | | `RteEventTrigger` | 事件触发配置 | | `RteAsynchronousServerCallResultPoint` | 异步服务器调用结果点 | | `RteVariableAccess` | 变量访问配置 | | `RtePortSpec` | 端口规范 | | `RtePort` | 端口配置 | | `RteModeDeclarationGroup` | 模式声明组配置 | | `RteModeMachineInstance` | 模式机实例配置 | | `RteModeGroup` | 模式组配置 | | `RteModeInhibition` | 模式禁止配置 | | `RteInternalTrigger` | 内部触发器 | | `RteExternalTrigger` | 外部触发器 | | `RteInterPartitionCommunication` | 分区通信配置 | | `RteExclusiveArea` | 独占区配置 | | `RtePerInstanceMemory` | 每实例内存配置 | | `RteInterRunnableVariable` | InterRunnableVariable 配置 | | `RteImplicitCommunication` | 隐式通信配置 | | `RteTransformation` | 转换配置 | | `RteTransformerChain` | 转换器链配置 | ### 8.6 软件组件类型的处理 ### 8.7 隐式通信配置 ### 8.8 通信基础设施 ### 8.9 BSW 调度器的配置 #### 主要 BSW 调度器配置容器 | 容器 | 描述 | |------|------| | `BswSchMModule` | BSW 调度器模块配置 | | `BswImplementation` | BSW 实现配置 | | `BswInternalBehavior` | BSW 内部行为配置 | | `BswSchedulableEntity` | BSW 可调度实体配置 | | `BswEvent` | BSW 事件配置 | | `BswModeDeclarationGroup` | BSW 模式声明组配置 | | `BswModeMachineInstance` | BSW 模式机实例配置 | | `BswExclusiveArea` | BSW 独占区配置 | | `BswTrigger` | BSW 触发器配置 | | `BswPerInstanceMemory` | BSW 每实例内存配置 | ### 8.10 同步点的配置 ### 8.11 初始化的配置 ### 8.12 任务链的配置 ### 8.13 分布式共享模式队列的配置 ### 8.14 RTE 实现插件的配置 --- ## 关键概念总结 ### RTE 通信模式 | 通信范式 | 关键 API | 关键需求 | |---------|----------|----------| | 发送方-接收方(显式) | `Rte_Write`、`Rte_Read`、`Rte_Send`、`Rte_Receive` | [SWS_Rte_01071]、[SWS_Rte_01073] | | 发送方-接收方(隐式) | `Rte_IWrite`、`Rte_IRead`、`Rte_IInvalidate` | [SWS_Rte_01126] | | 客户端-服务器 | `Rte_Call`、`Rte_Result` | [SWS_Rte_01131] | | 模式切换 | `Rte_Mode`、`Rte_Switch`、`Rte_SwitchAck` | [SWS_Rte_01171] | | 触发器 | `Rte_Trigger`、`Rte_IrTrigger` | [SWS_Rte_01197] | | 独占区 | `Rte_Enter`、`Rte_Exit` | [SWS_Rte_01149] | ### RTE 事件类型 RTE 事件触发可运行实体的执行。RTE 支持 15 种事件类型(详见 4.2.2.4)。 ### RTE 与 BSW 的关系 RTE 是应用软件组件与基础软件之间的桥梁。RTE 调度可运行实体,BSW 调度器调度 BSW 可调度实体。 ### RTE 优化模式 RTE 支持多种优化模式以适应不同的资源约束: - **Performance**:性能优化 - **Code Size**:代码大小优化 - **RAM**:RAM 优化 - **ROM**:ROM 优化 ### RTE 错误处理 RTE 通过 `RTE_E_*` 错误代码报告错误,并通过 DET 报告开发错误。 --- ## 翻译说明 - **文档类型**:SWS(Software Specification)— 软件规范 - **原文页数**:1267 页(AUTOSAR 仓库中最大的 PDF) - **翻译策略**:采用"重点翻译 + 摘要"策略 - **完整翻译章节**:封面、文档标识、变更历史、目录、介绍(1.x)、RTE 概述(2.x)、RTE 生成过程(3.x 摘要)、RTE 功能规范(4.x 全面摘要) - **摘要章节**: - 第 5 章(RTE 参考):完整列出所有核心 API 的签名和用途,详细规范未翻译 - 第 6 章(BSW 调度器参考):仅翻译概述 - 第 7 章(RTE 实现插件):仅翻译概述 - 第 8 章(配置规范):仅翻译主要容器结构 - **保留内容**:所有需求 ID(如 `SWS_Rte_xxxxx`)、API 函数名(`Rte_Write`、`Rte_Read` 等)、技术术语、`⌈⌋` 方框符 - **未翻译**:版权声明 - **详细内容**(包括所有 API 函数的详细规范、配置容器的完整参数、错误处理的完整流程、状态机转换、图表等)请参考原文 PDF 第 26-1267 页