AUTOSAR Classic Runtime Environment (RTE)
集群指南人工智能生成
协调软件组件的类型化通信,并控制基础软件模块的调度。
协调软件组件的类型化通信,并控制基础软件模块的调度。
Runtime Environment (RTE) 模块群集在 ECU 上实现了 AUTOSAR Virtual Functional Bus,并为软件组件的类型化 Sender-Receiver 和 Client-Server 通信提供标准化 API [SWS_Rte_01091], [SWS_Rte_01102]。它集成了用于基础软件模块周期性调度的 Basic Software Scheduler (SchM),并连接到 OS/IOC 以及通信栈(COM、LdCom)[SWS_Rte_01376], [SWS_Rte_04546]。在此过程中,RTE 通过可配置的保护区、缓冲和定义的 10 步转换流程来确保数据一致性和确定性模式转换 [SWS_Rte_02665], [SWS_Rte_03504]。
Runtime Environment (RTE) 模块群集构成了 Virtual Functional Bus (VFB) 在 ECU 级别的实现。它将 AUTOSAR 软件组件(SWC)与底层基础软件完全解耦,并通过 Basic Software Scheduler (SchM) 协调 BSW 模块的调度 [SWS_Rte_04546], [SWS_Rte_05165]。该群集既处理分区内部的访问,也通过 OS-IOC 处理跨分区的数据流,并通过 COM 和 LdCom 模块处理 ECU 总线数据流 [SWS_Rte_01376], [SWS_Rte_02736], SWS_RTE 第106页。
上下文图:RTE 和 SchM 群集在应用层(SWC)、OS/IOC 与基础软件服务之间的嵌入。来源:[SWS_Rte_05165], [SWS_Rte_02736], [SWS_Rte_01376], SWS_RTE 第106页。
通信基于 Sender-Receiver 和 Client-Server 模式:S/R 数据通过缓冲区副本隐式一致地传输(`Rte_IRead`/`Rte_IWrite`),或直接且带缓冲地显式传输(`Rte_Read`/`Rte_Write`/`Rte_Receive`)[SWS_Rte_01091], [SWS_Rte_02521], [SWS_Rte_06000]。在信号失效或出现无效信号时,`initValue` 替换或 `handleInvalid` 策略等机制将生效 [SWS_Rte_05030], [SWS_Rte_06009]。Client-Server 调用(`Rte_Call`、`Rte_Result`)在异步执行时通过服务器端和客户端的 FIFO 队列进行同步,并借助事务句柄进行唯一定位 [SWS_Rte_01102], [SWS_Rte_02527], [SWS_Rte_02649]。
在任务和生命周期管理中,RTE 通过代码共享确保可重入性,并通过中断锁定、OS 资源或 OS 自旋锁等可配置的锁定机制保护关键区域 [SWS_Rte_03015], [SWS_Rte_03504]。模式切换遵循从 OnExit、OnTransition 到 OnEntry 激活的严格 10 步序列,并通过确认事件有序完成 [SWS_Rte_02665], [SWS_Rte_02679]。
系统架构 & 模块集群的角色
Runtime Environment (RTE) 模块群集构成了 AUTOSAR Classic Platform 的功能与通信支柱。它代表了 ECU 上 Virtual Functional Bus (VFB) 的具体实现,并将软件组件(SWC)与底层基础软件(BSW)以及微控制器硬件完全解耦 SWS_RTE 第106页。在群集内部,实际的 RTE 负责协调与应用相关的 ECU 间和 ECU 内通信,而集成的 Basic Software Scheduler (SchM) 则控制 BSW 模块的执行流程控制、一致性保障以及周期性调度 [SWS_Rte_04546], [SWS_Rte_05165]。
该架构在应用 SWC、传感器/执行器组件与 BSW 各层之间构建了标准化接口。为了实现全车网络化,RTE 群集直接依托于通信栈:基于信号的报文被移交给 COM 模块,而大量数据则通过 LdCom 模块(Large Data COM)进行处理 [SWS_Rte_01376], [SWS_Rte_04527]。跨分区和核心边界的进程与内存隔离由 AUTOSAR 操作系统(OS)及其 Inter-OS-Application-Communication 机制(IOC)提供 [SWS_Rte_02736]。标定数据和存储块通过标准化描述符连接到 NVRAM Manager (NvM) 和标定工具 [SWS_Rte_03961], [SWS_Rte_05118]。
上下文图:RTE 和 SchM 群集在应用层(SWC)、OS/IOC 与基础软件服务之间的嵌入。来源:[SWS_Rte_05165], [SWS_Rte_02736], [SWS_Rte_01376], SWS_RTE 第106页。
各模块之间的交互配合与交互路径
RTE 群集中的协作严格区分 Sender-Receiver (S/R) 和 Client-Server 通信 (C/S)。在 S/R 通信中,RTE 同时支持隐式和显式读写语义:在隐式访问(`Rte_IRead`、`Rte_IWrite`)中,RTE 在 Runnable 执行开始时创建一个本地副本,该副本在整个运行期间保持一致 [SWS_Rte_06000], [SWS_Rte_03744]。在显式访问(`Rte_Read`、`Rte_Write`、`Rte_Send`、`Rte_Receive`)中,数据交换以直接同步或通过队列的方式进行 [SWS_Rte_01091], [SWS_Rte_01092]。对于带有队列的事件(`swImplPolicy = queued`),RTE 在接收端建立 FIFO 队列;如果此类缓冲区溢出,则丢弃该元素并设置错误状态 [SWS_Rte_02521], [SWS_Rte_02523]。
如果数据路径跨越 ECU 边界(Inter-ECU),RTE 会对复合数据结构进行转换和序列化,并调用 `Com_SendSignal` 或 `Com_SendSignalGroup`,以确保 COM 模块中的原子 PDU 传输 [SWS_Rte_04527]。对于大型数据数组,RTE 会替代性地使用 `LdCom_Transmit`,并在使用传输协议(TP)时锁定关联的缓冲区,直到通过回调获得确认为止 [SWS_Rte_01377], [SWS_Rte_01379]。在接收端,RTE 通过 COM 回调异步接收数据,并据此得出用于应用 Runnable 的激活事件 [SWS_Rte_03530], [SWS_Rte_03531]。如果总线数据尚未到达,RTE 会提供配置的初始值 [SWS_Rte_06009], [SWS_Rte_06010]。
时序图:跨 ECU 边界的显式 Sender-Receiver 数据流,包含缓冲和初始值输出。来源:[SWS_Rte_06010], [SWS_Rte_04527], [SWS_Rte_03530], AUTOSAR_SWS_RTE 第148页。
在 Client-Server 通信中,RTE 为同步调用生成 `Rte_Call`,为异步调用生成单独的调用和查询 API(`Rte_Call`、`Rte_Result`)[SWS_Rte_01102], [SWS_Rte_01111]。如果调用无法在同一上下文中直接解析为 C 函数,RTE 会在服务器端将请求缓冲在 FIFO 队列中,并在客户端将响应缓冲在深度为 1 的队列中 [SWS_Rte_02527], [SWS_Rte_02528]。对于跨分区或跨 ECU 的 C/S 调用,RTE 使用由客户端 ID 和序列计数器组成的事务句柄,以便将响应精确分配给原始调用者 [SWS_Rte_02649], [SWS_Rte_03885]。
同步、重入性与任务上下文
RTE 群集中的程序代码执行在 OS 任务或 ISR 上下文中进行。RTE 区分简单 Runnable(类别 1,无阻塞 OS 调用)和扩展 Runnable(类别 2,带等待点),后者通过诸如 `DataReceivedEvent` 或 COM 回调等事件从 `WaitPoint` 状态被唤醒 [SWS_Rte_03532], SWS_RTE 第304页。严格禁止同一 Runnable Entity 实例的并发激活,除非属性 `canBeInvokedConcurrently` 被显式设置为 `TRUE` [SWS_Rte_03523]。对于多实例化的 SWC,AUTOSAR 始终采用代码共享:多个实例共享相同的可执行代码,但通过实例特定的描述符访问独立的数据和 Per-Instance-Memory (PIM) [SWS_Rte_02002], [SWS_Rte_03015], [SWS_Rte_02301]。
为了保护临界区,RTE 生成所谓的 Exclusive Areas(`Rte_Enter`、`Rte_Exit`)。底层的同步机制通过参数 `RteExclusiveAreaImplMechanism` 进行配置 [SWS_Rte_03504]。此处有五种定义的策略可用:
ALL_INTERRUPT_BLOCKING:全局锁定所有硬件中断 [SWS_Rte_03504]。OS_INTERRUPT_BLOCKING:选择性锁定 OS 特定中断(类别 2)[SWS_Rte_03504]。OS_RESOURCE:使用带优先级天花板协议的 OSEK/AUTOSAR 操作系统资源 [SWS_Rte_03504]。OS_SPINLOCK:通过 OS 自旋锁实现多核同步,用于协调不同核心之间的任务与 ISR [SWS_Rte_03504]。NONE:只要数据一致性已通过严格的任务优先级划分或调度得到保证,则无需使用内部锁 [SWS_Rte_03504]。
典型的生命周期和操作模式
系统的生命周期遵循初始化、正常运行与受控关闭之间的严格阶段划分。系统启动时,首先初始化 SchM 部分:在启动 BSW 模块(如 BswM)之前,EcuM 会在每个处理器核心上调用 `SchM_Start` [SWS_Rte_04546],[SWS_Rte_04548]。随后,`SchM_StartTiming` 激活周期性 BSW 事件和 MainFunctions [SWS_Rte_04549],[SWS_Rte_04551]。根据设计约束,每个核心仅允许调用一次 `SchM_Start` 和 `SchM_StartTiming` SWS_RTE 第928页。此后,`Rte_Start` 启用应用 RTE;若内部资源分配失败,则初始化中止并返回 `RTE_E_LIMIT` [SWS_Rte_01261],[SWS_Rte_01262]。
运行模式通过 Mode-Declaration-Groups 映射。如果 Mode Manager 通过 `Rte_Switch` 触发模式切换,该请求将被放入 FIFO 队列中 [SWS_Rte_02631],[SWS_Rte_02718],[SWS_Rte_02719]。每个模式机在切换期间经历一个强制性的 10 步序列 [SWS_Rte_02665]:首先使目标模式的模式停用生效并等待正在运行的实体(步骤 1–2)。接着依次执行并终止 OnExit(步骤 3–4)、OnTransition(步骤 5–6)和 OnEntry 可执行实体(步骤 7–8)。最后,解除先前模式的停用并激活新模式(步骤 9),随后通过 `ModeSwitchedAckEvent` 或 `Rte_SwitchAck` 确认模式切换(步骤 10)[SWS_Rte_02665],[SWS_Rte_02679],[SWS_Rte_02725]。此外,通过 `RteModeToScheduleTableMapping`,运行模式还可以直接与 OS-Schedule-Tables 耦合 [SWS_Rte_05146]。
时序图:带确认的 AUTOSAR 模式切换标准化 10 步流程。来源:[SWS_Rte_02665],[SWS_Rte_02679],EXP_ModeManagementGuide 第16页。
去初始化在关闭阶段开始时通过 `Rte_Stop` 执行。在此调用之后,RTE 会阻止在相应核心上激活、启动或释放其他 Runnable [SWS_Rte_02538]。在 RTE 的停止状态下,传入的 S/R 数据以及 C/S 请求都将被丢弃并忽略 [SWS_Rte_02535],[SWS_Rte_02536]。
错误处理、状态监控与数据校验
在 RTE 中,错误状态和接口状态通过标量类型 `Std_ReturnType` 统一传递给调用者 [SWS_Rte_01034],SWS_RTE 第586页。RTE 区分应用程序错误(错误值 1–63)、直接基础设施错误(值 128–255)以及叠加状态位,例如数据丢失(`RTE_E_LOST_DATA = 64`)或超期(`RTE_E_MAX_AGE_EXCEEDED = 64`)SWS_RTE 第586页。典型的基础设施返回值包括通信停止(`RTE_E_COM_STOPPED = 128`)、通信及响应超时(`RTE_E_TIMEOUT = 129`)、无数据(`RTE_E_NO_DATA = 131`)以及资源溢出(`RTE_E_LIMIT = 130`)[SWS_Rte_01060],[SWS_Rte_01061],[SWS_Rte_01064]。在启用值域检查时,RTE 会以 `RTE_E_OUT_OF_RANGE` 确认超出范围错误 [SWS_Rte_03845],[SWS_Rte_03846]。
为了处理不合理或有错误的信号,RTE 提供了数据无效化机制。在发送端,`Rte_Invalidate` 使用定义的替代值标记信号 [SWS_Rte_01206],[SWS_Rte_05024]。在接收端,属性 `handleInvalid` 控制替代策略:对于 `keep`,将保留先前的值并触发 `DataReceiveErrorEvent`;而对于 `replace`,则通过 `initValue` 进行自动替换 [SWS_Rte_05030],[SWS_Rte_05049]。网络层面的通信中断通过 `aliveTimeout` 进行监控;若监控时间超时,COM 模块会通过 `Rte_COMCbkRxTOut` 向 RTE 报告接收超时,随后通知依赖组件或激活回退值 [SWS_Rte_08061]。
背景与依据:本指南仅基于 RTE 模块的 AUTOSAR 规范(R20-11/R25-11)以及 AUTOSAR Mode Management Guide。
Die Runtime Environment (RTE) realisiert den Virtual Functional Bus (VFB) auf einer konkreten ECU und vermittelt alle Inter- und Intra-ECU-Kommunikationsverbindungen zwischen Software-Components (SW-Cs) und Basis-Software.
Module im Cluster
初始化与状态
Rte_Rips_SchM_DeinitSchM_DeinitSchM_GetVersionInfoSchM_Init服务
Rte_StartRte_StartTimingRte_StopSchM_StartSchM_StartTimingCallout 与预期接口
<name of the Invocation Handler>类型
Rte_DsmqStatusTypeRte_Rips_SwitchNotificationStatusTypeRteCalibrationSwAddrMethodRefParentContainerRteComponentType主题图
此版本没有元素数据
Rte
Performs invocation of server runnables, hard error runnables, ASCR runnables and triggered runnables via a transformer".
void <name of the Invocation Handler> (void);Rte_Rips_SchM_Deinit deinitializes those RTE Implementation Plug-In parts which are relevant for the SchM related operations.
void Rte_Rips_SchM_Deinit (void);Rte_Start is intended to allocate and initialize system resources and communication resources used by the RTE.
Std_ReturnType Rte_Start (void);Rte_StartTiming API is intended to release the activation of RunnableEntitys triggered by TimingEvents and BackgroundEvents after the last call of a Rte_Init function.
void Rte_StartTiming (void);Rte_Stop is used to finalize the RTE on the core it is called. This service releases all system and communication resources allocated by the RTE on that core.
Std_ReturnType Rte_Stop (void);SchM_Deinit is used to finalize Basic Software Scheduler part of the RTE of the core on which it is called. This service releases all system resources allocated by the Basic Software Scheduler part on that core.
void SchM_Deinit (void);Returns the version information of the Basic Software Scheduler.
void SchM_GetVersionInfo (Std_VersionInfoType* versioninfo);SchM_Init is intended to allocate and initialize system resources used by the Basic Software Scheduler part of the RTE for the core on which it is called.
void SchM_Init (const SchM_ConfigType* ConfigPtr);Basic Software Scheduler initialized. Shall be called before BswM_Init().
void SchM_Start (void);Start periodical events for BSW/SWCs. SchM_Init() has to be called before.
void SchM_StartTiming (void);Status of the enqueue operation on a distributed shared mode queue
Status of the en- and dequeue operation on a mode queue Tags: atp.Status=draft
Reference to the SwAddrMethod for which software calibration support shall be enabled. Multiplicity 0..* Type Foreign reference to SW-ADDR-METHOD Post-Build Variant Multiplicity false Post-Build Variant Value false Multiplicity Configuration Class Pre-compile time X All Variants Link time Post-build time Value Configuration Class Pre-compile time X All Variants Link time Post-build time Scope / Dependency scope: local No Included Containers 8.7 Implicit communication configuration Figure 8.22: Configuration of the implicit communication SWS Item [ECUC_Rte_09034] Container Name
gemini-3.8-flash-low· 2026-10-13 · 德文原文