autoas/as 工程的RTE靜態消息總線實現與端口數據交換機制詳解

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三模型多變量時間序列預測效果一覽基本介紹程序設計參考資料 效果一覽 …