0. 概述

autoas/as 工程的RTE(Runtime Environment)通过自动生成C代码,将各SWC(软件组件)之间的数据通信全部静态化、结构化,实现了类似“静态消息总线”的通信模型。所有端口的数据交换都必须经过RTE接口完成,从而保证了组件之间的彻底解耦和AUTOSAR风格的分层设计。

1. RTE自动生成与代码主流程

1.1 配置与建模

  • 每个SWC用 Python 脚本(如 rte.py)描述端口(P-Port / R-Port)、Runnable(行为)等。
  • 这些脚本定义了端口名称、方向、数据类型、定时事件等信息,作为RTE代码生成的输入。

1.2 RTE生成工具

  • 工程中的 tools/generator/Rte.py 脚本会读取配置,自动导入并执行各 SWC 的 rte.py
  • 这些脚本会调用 main(genDir),输出针对每个 SWC 的 RTE C 代码和头文件。

1.3 生成的RTE代码内容

  • 生成的C代码(如 Rte_SwcTelltale.c)会包括:
    • 端口数据的静态变量(数据缓冲区)
    • 针对每个端口的读写函数(如 Rte_Write_TPMS(...)Rte_Read_TPMS(...)Rte_Write_Led1Sts(...)Rte_Read_Led1Sts(...)
    • Runnable 相关的调度函数和事件定义

2. 端口访问机制(静态“消息总线”)

  • 每个端口的数据都用静态C变量存储。
  • 写端口:调用RTE生成的写函数,将数据写入对应变量。
  • 读端口:调用RTE生成的读函数,从变量读取数据。
  • 所有SWC都通过这些RTE函数访问数据,实现了解耦和统一调度。

3. 代码与建模示例

3.1 Python建模

class Telltale(autosar.Template):@classmethoddef addPorts(cls, swc):swc.apply(TPMS.Send)        # P-Portswc.apply(Led1Sts.Receive)  # R-Port@classmethoddef addBehavior(cls, swc):swc.behavior.createRunnable('Telltale_run', portAccess=[...])swc.behavior.createTimingEvent('Telltale_run', period=20)

3.2 生成的C代码

static OnOff_T TPMS_Buffer;      // 静态缓冲区
static OnOff_T Led1Sts_Buffer;   // 静态缓冲区Std_ReturnType Rte_Write_TPMS(OnOff_T value) {TPMS_Buffer = value;return E_OK;
}
Std_ReturnType Rte_Read_TPMS(OnOff_T* value) {*value = TPMS_Buffer;return E_OK;
}
Std_ReturnType Rte_Write_Led1Sts(OnOff_T value) {Led1Sts_Buffer = value;return E_OK;
}
Std_ReturnType Rte_Read_Led1Sts(OnOff_T* value) {*value = Led1Sts_Buffer;return E_OK;
}
  • SWC通过Rte_Write_TPMSRte_Read_TPMS完成TPMS端口数据的写入和读取。
  • 通过Rte_Write_Led1StsRte_Read_Led1Sts完成Led1Sts端口的数据通信。
  • 数据存储在静态变量,实现“静态消息总线”功能。

4. 端口数据交换的原理与时序

4.1 背景说明

  • AUTOSAR架构下,SWC间不能直接访问彼此的数据,而只能通过端口通信。
  • 端口是数据传递的通道,例如SWC_A有P-Port(输出),SWC_B有R-Port(输入),二者通过端口和RTE关联。
  • 所有数据交换都必须通过RTE接口(如Rte_Write_TPMS、Rte_Read_TPMS、Rte_Write_Led1Sts、Rte_Read_Led1Sts)进行。

4.2 场景举例与流程

假设有两个SWC:

  • SWC_A(发送者):有P-Port(如TPMS输出)
  • SWC_B(接收者):有R-Port(如Led1Sts输入)
数据流动流程
  1. SWC_A想要发送TPMS数据
    • SWC_A调用Rte_Write_TPMS(value),不是直接赋值给SWC_B的变量。
  2. RTE接口实现
    • Rte_Write_TPMS函数把数据写入RTE内部的静态缓冲区(如TPMS_Buffer)。
  3. SWC_B想要读取TPMS数据
    • SWC_B不直接访问SWC_A变量,而是调用Rte_Read_TPMS(&value)
  4. RTE接口实现
    • Rte_Read_TPMS函数从RTE缓冲区读取SWC_A写入的数据,返回给SWC_B。

同理,Led1Sts端口的通信流程一致。

5. Mermaid逻辑结构与时序图

5.1 静态结构图

SWC_B
RTE
SWC_A
写入数据
赋值给
读取数据
读取自
调用 Rte_Read_TPMS
静态变量 TPMS_Buffer
Rte_Write_TPMS
Rte_Read_TPMS
调用 Rte_Write_TPMS

说明:

  • SWC_A 用 RTE 的写函数写入TPMS端口数据,数据保存在 RTE 的静态变量中。
  • SWC_B 用 RTE 的读函数读取TPMS端口数据,读取的就是同一份静态变量,实现“总线”式数据传递。

5.2 时序图

SWC_A RTE SWC_B Rte_Write_TPMS(value) RTE将value存入TPMS_Buffer Rte_Read_TPMS(&value) RTE从TPMS_Buffer取出数据 返回最新的value SWC_A RTE SWC_B

6. 详细说明与总结

  • SWC_A 只管调用RTE提供的写接口,不关心谁会用数据,也不知道数据会被谁用。
  • RTE 就像一个中介或“数据中转站”,把数据缓存在自己的缓冲区里。
  • SWC_B 只管调用RTE的读接口,不关心数据是哪里来的,只管要。
  • 整个过程中,SWC_A和SWC_B完全没有直接联系,一切都通过RTE接口完成。

代码片段示意

// 写入端口数据
Std_ReturnType Rte_Write_TPMS(OnOff_T value) {TPMS_Buffer = value;return E_OK;
}// 读取端口数据
Std_ReturnType Rte_Read_TPMS(OnOff_T* value) {*value = TPMS_Buffer;return E_OK;
}
  • SWC_A调用Rte_Write_TPMS(new_value);,数据写进RTE缓冲区。
  • SWC_B调用Rte_Read_TPMS(&myValue);,从RTE缓冲区读取数据。

总结

“端口的所有数据交换都通过RTE接口完成”就是:每个软件组件之间的数据传递,都必须通过RTE生成的读写接口函数,数据实际存放在RTE的缓冲区里,谁也不能直接访问别人的数据,所有交互都是中转。

这种设计保证了组件间彻底解耦,便于管理、测试和安全性分析,也使得@autoas/as工程的RTE如同一个静态高效的消息总线,完全契合AUTOSAR的分层和解耦思想。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87225.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87225.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87225.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习第四期(Python)】LightGBM 方法原理详解

LightGBM 概述 一、LightGBM 简介二、LightGBM 原理详解⚙️ 核心原理🧠 LightGBM 的主要特点 三、LightGBM 实现步骤(Python)🧪 可调参数推荐完整案例代码(回归任务 可视化) 参考 LightGBM 是由微软开源的…

时序数据库IoTDB监控指标采集与可视化指南

一、概述 本文以时序数据库IoTDB V1.0.1版本为例,介绍如何通过Prometheus采集Apache IoTDB的监控指标,并使用Grafana进行可视化。 二、Prometheus聚合运算符 Prometheus支持多种聚合运算符,用于在时间序列数据上进行聚合操作。以下是一些常…

React安装使用教程

一、React 简介 React 是由 Facebook 开发和维护的一个用于构建用户界面的 JavaScript 库,适用于构建复杂的单页应用(SPA)。它采用组件化、虚拟 DOM 和声明式编程等理念,已成为前端开发的主流选择。 二、React 安装方式 2.1 使用…

.NET MAUI跨平台串口通讯方案

文章目录 MAUI项目架构设计平台特定实现接口定义Windows平台实现Android平台实现 MAUI主界面实现依赖注入配置相关学习资源.NET MAUI开发移动端开发平台特定实现依赖注入与架构移动应用发布跨平台开发最佳实践性能优化测试与调试开源项目参考 MAUI项目架构设计 #mermaid-svg-OG…

BUUCTF在线评测-练习场-WebCTF习题[MRCTF2020]你传你[特殊字符]呢1-flag获取、解析

解题思路 打开靶场&#xff0c;左边是艾克&#xff0c;右边是诗人&#xff0c;下面有个文件上传按钮 结合题目&#xff0c;是一个文件上传漏洞&#xff0c;一键去世看源码可知是提交按钮&#xff0c;先上传个一句话木马.php试试 <?php eval($_POST[shell]); ?> 被过…

【容器】容器平台初探 - k8s整体架构

目录 K8s总揽 K8s主要组件 组件说明 一、Master组件 二、WokerNode组件 K8s是Kubernetes的简称&#xff0c;它是Google的开源容器集群管理系统&#xff0c;其提供应用部署、维护、扩展机制等功能&#xff0c;利用k8s能很方便地管理跨机器运行容器化的应用。 K8s总揽 K8s主…

C++--继承

文章目录 继承1. 继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承方式和访问限定符1.2.3 继承基类成员访问方式的变化1.2.3.1 基类成员访问方式的变化规则1.2.3.2 默认继承方式 1.3 继承类模版 2. 基类和派生类的转化3. 继承中的作用域3.1 隐藏3.2 经典…

无REPOSITORY、TAG的docker悬空镜像究竟是什么?是否可删除?

有时候&#xff0c;使用docker images指令我们可以发现大量的无REPOSITORY、TAG的docker镜像&#xff0c;这些镜像究竟是什么&#xff1f; 它们没有REPOSITORY、TAG名称&#xff0c;没有办法引用&#xff0c;那么它们还有什么用&#xff1f; [rootcdh-100 data]# docker image…

创建一个基于YOLOv8+PyQt界面的驾驶员疲劳驾驶检测系统 实现对驾驶员疲劳状态的打哈欠检测,头部下垂 疲劳眼睛检测识别

如何使用Yolov8创建一个基于YOLOv8的驾驶员疲劳驾驶检测系统 文章目录 1. 数据集准备2. 安装依赖3. 创建PyQt界面4. 模型训练1. 数据集准备2. 模型训练数据集配置文件 (data.yaml)训练脚本 (train.py) 3. PyQt界面开发主程序 (MainProgram.py) 4. 运行项目5. 关键代码解释数据集…

使用FFmpeg将YUV编码为H.264并封装为MP4,通过api接口实现

YUV数据来源 摄像头直接采集的原始视频流通常为YUV格式&#xff08;如YUV420&#xff09;&#xff0c;尤其是安防摄像头和网络摄像头智能手机、平板电脑的摄像头通过硬件接口视频会议软件&#xff08;如Zoom、腾讯会议&#xff09;从摄像头捕获YUV帧&#xff0c;进行预处理&am…

tcpdump工具交叉编译

本文默认系统已经安装了交叉工具链环境。 下载相关版本源码 涉及tcpdump源码&#xff0c;以及tcpdump编译过程依赖的pcap库源码。 网站&#xff1a;http://www.tcpdump.org/release wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz wget http://www.tcpdump.org/r…

神经网络中torch.nn的使用

卷积层 通过卷积核&#xff08;滤波器&#xff09;在输入数据上滑动&#xff0c;卷积层能够自动检测和提取局部特征&#xff0c;如边缘、纹理、颜色等。不同的卷积核可以捕捉不同类型的特征。 nn.conv2d() in_channels:输入的通道数&#xff0c;彩色图片一般为3通道 out_c…

在MATLAB中使用GPU加速计算及多GPU配置

文章目录 在MATLAB中使用GPU加速计算及多GPU配置一、基本GPU加速使用1. 检查GPU可用性2. 将数据传输到GPU3. 执行GPU计算 二、多GPU配置与使用1. 选择特定GPU设备2. 并行计算工具箱中的多GPU支持3. 数据并行处理&#xff08;适用于深度学习&#xff09; 三、高级技巧1. 异步计算…

【unitrix】 4.12 通用2D仿射变换矩阵(matrix/types.rs)

一、源码 这段代码定义了一个通用的2D仿射变换矩阵结构&#xff0c;可用于表示二维空间中的各种线性变换。 /// 通用2D仿射变换矩阵&#xff08;元素仅需实现Copy trait&#xff09; /// /// 该矩阵可用于表示二维空间中的任意仿射变换&#xff0c;支持以下应用场景&#xff…

android RecyclerView隐藏整个Item后,该Item还占位留白问题

前言 android RecyclerView隐藏整个Item后,该Item还占位留白问题 思考了利用隐藏和现实来控制item 结果实现不了方案 解决方案 要依据 model 的第三个参数&#xff08;布尔值&#xff09;决定是否保留数据&#xff0c;可以通过 ​filter 高阶函数结合 ​空安全操作符​ 实…

地图瓦片介绍与地图瓦片编程下载

前沿 地图瓦片指将一定范围内的地图按照一定的尺寸和格式&#xff0c;按缩放级别或者比例尺&#xff0c;切成若干行和列的正方形栅格图片&#xff0c;对切片后的正方形栅格图片被形象的称为瓦片[。瓦片通常应用于B/S软件架构下&#xff0c;浏览器从服务器获取地图数据&#xf…

手机屏亮点缺陷修复及相关液晶线路激光修复原理

摘要 手机屏亮点缺陷严重影响显示品质&#xff0c;液晶线路短路、电压异常是导致亮点的关键因素。激光修复技术凭借高能量密度与精准操控性&#xff0c;可有效修复液晶线路故障&#xff0c;消除亮点缺陷。本文分析亮点缺陷成因&#xff0c;深入探究液晶线路激光修复原理、工艺…

MySQL数据一键同步至ClickHouse数据库

随着数据量的爆炸式增长和业务场景的多样化&#xff0c;传统数据库系统如MySQL虽然稳定可靠&#xff0c;但在海量数据分析场景下逐渐显露出性能瓶颈。这时&#xff0c;ClickHouse凭借其列式存储架构和卓越的OLAP&#xff08;在线分析处理&#xff09;能力脱颖而出&#xff0c;成…

Android中Compose常用组件以及布局使用方法

一、基础控件详解 1. Text - 文本控件 Text(text "Hello Compose", // 必填&#xff0c;显示文本color Color.Blue, // 文字颜色fontSize 24.sp, // 字体大小&#xff08;注意使用.sp单位&#xff09;fontStyle FontStyle.Italic, // 字体样式&…

SCI一区黑翅鸢优化算法+三模型光伏功率预测对比!BKA-CNN-GRU、CNN-GRU、GRU三模型多变量时间序列预测

SCI一区黑翅鸢优化算法三模型光伏功率预测对比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多变量时间序列预测 目录 SCI一区黑翅鸢优化算法三模型光伏功率预测对比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 …