当前位置: 首页 > news >正文

【Autosar】RTE(Runtime Environment)层详解

在阅读之前请先了解AutoSar的基本层级

运行时环境 RTE

AUTOSAR 的 RTE(Runtime Environment) 是整个架构的“胶水层”和“调度中枢”,它把 Application 层(SW-C)和 Basic Software(BSW)层完全解耦,同时提供运行时的通信、调度、资源管理等服务。

作为应用层软件组件和基础软件之间的中间件,也是一个虚拟的功能总线,负责组件间通信、数据路由、服务调用等功能,为应用层提供统一的运行环境,使软件组件能够在不同硬件平台上运行,提高了软件的可移植性。类似餐厅的服务员,在厨师(BSW)和顾客(Application)之间的交互。

RTE是一个静态概念,他需要在运行之前将SWC(Software Component,软件组件,Application层中的基本组件,下面统称SWC)和一个Task关联起来。RTE其实是通过Autosar生成的,它会根据配置自动生成,RTE 对每个 ECU 来说都是不同的,并且根据 SWC 的要求进行定制,也就是每个ECU有不同的SWC,这会生成各自的RTE。

功能类别具体职责举例
通信中介把 SW-C 的端口(PPort/RPort)自动映射到 BSW 服务(COM、DEM、NM…)或直接映射到另一个 SW-C把车速信号从 Sensor SW-C 路由到 Engine SW-C
调度执行根据 OS Alarm/Events 周期或事件触发 Runnable;管理 Runnable 的优先级、嵌套、抢占10 ms 触发一次 Runnable_CalcTorque
数据一致性提供 Direct / Buffered / Queued 三种传输模式,保证并发读写的一致性防止 ABS 和 ESP 同时写“制动压力”变量
资源仲裁管理Application对共享资源(如 ADC、EEPROM)的互斥访问,避免冲突两个 SW-C 不能同时调用 NvM_WriteBlock
模式管理处理 ECU 状态机(RUN/SLEEP/SHUTDOWN)、通信状态机(FULLCOM/SILENTCOM)网络唤醒后把 CAN 切换到 FULLCOM
诊断服务把 DCM 的 UDS 服务请求路由到 DEM、SW-C 或 NVM收到 0x22 服务后读取故障码
标定 & 测量通过 XCP 把 SW-C 变量暴露给测量工具(如 INCA)实时观测空燃比 PID 参数

一、RTE作为runnable SWC的运行时环境

使用RTE触发Runnable的SWC有很多种方法,包括如下几种:
RTE触发runnable方式,小闪电是触发的意思
SWC是Application层里面的Software Component的缩写,是Application层里的组件单元

二、RTE作为通信接口

可以用作一个Virtual Function Bus赖沟通SWC和BSW
在这里插入图片描述

Send/Receiver模式

其中包含了直接传输方式、Buffer缓冲区模式和Queue队列模式

  1. Direct(直接访问)
  • 原理:RTE提供一个全局变量(数据地址),发送方和接收方直接读写该地址,无数据副本
  • 特点
    • 零运行时开销,效率高(“Last is best”原则)。
    • 适用于实时性要求高的数据传输。
    • 在1:n的场景下会导致数据覆盖问题,新的writer将原有的未读取的数据直接覆盖
  • 接口示例
    Std_ReturnType Rte_Write_<Port>_<Data>(<DataType> data);
    Std_ReturnType Rte_Read_<Port>_<Data>(<DataType>* data);
    
  1. Buffered(缓存访问)
    在AUTOSAR中,多个Runnable可能同时读写同一个数据元素(如通过RTE的全局变量),导致脏读,写冲突,原子性破坏等风险,AUTOSAR通过**“Copy-In + Copy-Out”**的缓冲模型解决上述问题,这就是Buffered访问,分为以下几步:
  • RTE在Runnable启动前,将全局数据复制到Runnable的私有副本(Buffer)。复制是原子操作(通过禁用中断或任务锁保护)。
  • Runnable内部操作私有副本,与全局数据完全隔离 ,不会出现多个Runnable同时操作导致的脏读,写冲突,原子性破坏等风险
  • Copy-Out(退出Runnable时)Runnable结束前,RTE将私有副本写回全局变量,同样通过原子操作
  • 特点
    • 保证Runnable执行期间数据一致性。
    • 适用于数据一致性要求高的场景(如多个Runnable并发访问同一数据)。
    • 代价是增加了两次内存复制(Copy-In/Out)和写回延迟,适用于对一致性敏感但实时性要求适中的场景(如状态机同步、标定参数)。
  • 接口示例
    <DataType> Rte_IRead_<Runnable>_<Port>_<Data>(void);
    void Rte_IWrite_<Runnable>_<Port>_<Data>(<DataType> data);
    
  1. Queued(队列机制)
  • 原理:RTE维护一个FIFO队列,发送方将数据写入队列,接收方按顺序读取,不会丢失数据
  • 特点
    • 支持周期性不一致的场景(如发送周期1ms,接收周期5ms)。
    • 支持阻塞/非阻塞读取(可配置超时)。
  • 接口示例
    Std_ReturnType Rte_Send_<Port>_<Data>(<DataType> data);
    Std_ReturnType Rte_Receive_<Port>_<Data>(<DataType>* data);
    
模式实时性数据一致性是否丢数据典型应用场景
Direct高频传感器数据、控制信号
Buffered多个Runnable共享数据
Queued事件记录、诊断数据、日志传输

Client/Server模式

一种N:1的通信模式,Client会请求Server执行某个动作或函数,类似于我们常见的CS模式。支持同步/异步模式。
CS模式下的同步调用

http://www.dtcms.com/a/291869.html

相关文章:

  • lspci/setpci用法小结
  • Day 18:推断聚类后簇的类型
  • 支付网关系统前后端鉴权方案
  • LLaMA-Mesh:语言模型驱动的3D内容生成革命
  • LLaMA-Factory相关参数说明
  • VRRP-虚拟路由器冗余协议
  • 微调LLaMA 7B
  • Python通关秘籍(五)数据结构——元组
  • Apache Ignite扫描查询
  • 【机器学习深度学习】微调量化与模型导出量化:区分与应用
  • 苹果app应用ipa文件程序开发后如何运行到苹果iOS真机上测试?
  • 深度学习-算子
  • TI DLP3010光机与相机触发使用指南
  • halcon手眼标定z方向实操矫正
  • CAN基础知识
  • 基于 KeepAlived + HAProxy 搭建 RabbitMQ 高可用负载均衡集群
  • 92套毕业相册PPT模版
  • 【菜狗处理脏数据】对很多个不同时间序列数据的文件聚类—20250722
  • JavaWeb学习打卡11(session(会话)、cookie(甜点)详解)
  • 云服务器进行安全防护的必要性
  • [C++11]范围for循环/using使用
  • 录音智能转写:如何实现一键转写、灵活下载!
  • Kubernetes服务发布基础
  • 【C语言进阶】枚举和联合
  • thinkbook14+指针消失的解决方法 + Windows常见快捷键
  • 四大组件:ContentProvider学习
  • linux用户态各定时器抖动测试
  • java day16
  • Vue开发常用
  • rk平台(rv1126/rk3588)音视频-交叉编译FFmpeg7.1