AUTOSAR_AP_EXP_ARARustApplications
FIG-ad99fe1d2a813209
566 × 355 px
3 Release(s)
Figure 6.10: Creating a service
SHA-256 Inhalts-Fingerabdruck:
ad99fe1d2a8132093bcbf6476f763f1413c2de5b59505ce160246e6e7f752cea
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Sequenzdiagramm (Interaktionsdiagramm) mit Sprachdomänen-Partitionierung (Rust vs. C++).
- Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Spezifikation
AUTOSAR_AP_EXP_ARARustApplications(R23-11 bis R25-11). - Technischer Zweck: Darstellung des Foreign Function Interface (FFI)- und Adapter-Musters zur Instanziierung und Bereitstellung (Service Offering) eines
ara::com-Service-Skeletons aus einer in Rust implementierten Adaptive Application (App) über einen bestehenden, standardisierten C++-ara::com-Middleware-Stack.
2. Komponenten, Entitäten & Schnittstellen
Das Diagramm unterteilt die Interaktionspartner strikt in zwei Sprach- und Laufzeitdomänen:
Rust-Laufzeitdomäne
Executor: Asynchroner Task-Scheduler / Event-Loop der Rust-Applikation, steuert Thread-Aktivierung und Idle-Zustände.App: Domänenspezifische Applikationslogik; implementiert den konkreten Service-Trait bzw. das StructRadarImp.Skeleton (gen): Codegeneriertes Rust-Skeleton (aus ARXML-Service-Interfaces generierte typsichere Rust-Fassade).ara crate: Statische Rust-Laufzeitbibliothek (ara-Crate); fungiert als Registry und Speicherschutz für Function-Pointer-Tabellen und FFI-Handle-Verwaltung.
C++-Laufzeitdomäne
Adapter (gen): Codegenerierter C++/C-Bridge-Adapter; stellt C-kompatible ABI-Symbole bereit, instanziiert C++-Objekte und konvertiert Typen/Vtables.Adapter (static): Statische C++-Adapter-Laufzeitbibliothek; kapselt generischeara::com-Skeleton-Interaktionen (z. B.OfferService()).Skeleton (gen): Nativer, aus ARXML generierter C++-ara::com-Service-Skeleton (radarSkeleton).
Datenstrukturen & Schnittstellen
RadarImp: Konkrete Rust-Instanz der Service-Geschäftslogik.Function Table(Vtable): C-kompatible Funktionstabelle (extern "C"-Funktionszeiger) zur späten dynamischen Auflösung von Methodenaufrufen über die Sprachgrenze hinweg.- Objekt-Handles: Opaque Pointers zur Identifikation der C++-Skeleton-Instanz in der Rust-Domäne.
3. Dynamisches Verhalten & Sequenzablauf
Phase 1: Service-Erzeugung & FFI-Registrierung (create_service)
- Trigger:
Appinitiiert die Service-Erstellung synchron übercreate_serviceam generierten Rust-Skeleton (gen). - Lokale Instanziierung:
Skeleton (gen)fordert überRadarImp::newdie Instanz der Anwendungslogik vonAppan. - Cross-Language-Allokation:
Skeleton (gen)ruft über C-FFImake_radarimpam C++Adapter (gen)auf. - C++-Konstruktion:
Adapter (gen)erzeugt intern die Instanz (new radarimp) und ruft synchron den KonstruktorradarSkeleton ctordes C++Skeleton (gen)auf. - Handle- & Vtable-Rückgabe:
Adapter (gen)übergibtobject and implementations(Instanz-Zeiger und Funktionszeigertabellen) zurück an Rust-Skeleton (gen). - Vtable-Persistierung:
Skeleton (gen)registriert die FFI-Dispatch-Tabelle überset_implementationsim statischenara crate(„Remember implementations function table“). - Return: Beendigung von
create_service; Kontrolle kehrt zuAppzurück.
Phase 2: Service-Bereitstellung (offer_service)
- Offering-Trigger:
Appruftoffer_serviceam Rust-Skeleton (gen)auf. - Indirekter FFI-Dispatch:
Skeleton (gen)dispatcht den Aufruf über die zuvor hinterlegte Funktionstabelle (via function table) an den C++Adapter (gen). - Stack-Delegation:
Adapter (gen)delegiert an die statische BasisinfrastrukturAdapter (static)viaOfferService. - Middleware-Aktivierung:
Adapter (static)führt den Methodenaufrufobject method(radarSkeleton::OfferService()) auf dem nativen C++-Skeleton (gen)aus. Das Service-Interface ist damit am Bus (z. B. SOME/IP, IPC) registriert. - Return: Synchrone Rückkehr der Aufrufskette bis zur
App.
Phase 3: Übergang in den Ruhezustand
- Thread-Yield:
Appübergibt die Thread-Kontrolle viasleepan denExecutor, um auf asynchrone Ereignisse/Methoden-Invocations zu warten.
4. Normative Relevanz & Entwickler-Hinweise
- Konsequenz für Applikationsentwickler (Rust):
- Die Rust-Applikation interagiert ausschließlich mit Safe-Rust-Abstraktionen (
Skeleton (gen)). Unsafe-FFI-Operationen sind vollständig in generierten Adaptern und derara-Crate gekapselt. - Das Lifecycle-Management erfordert nach
offer_servicedas Verharren des Ausführungsfadens über denExecutor(kein unkontrolliertes Terminieren dermain-Funktion).
- Die Rust-Applikation interagiert ausschließlich mit Safe-Rust-Abstraktionen (
- Konsequenz für Stack- und Toolchain-Entwickler:
- Zweistufiger Codegenerator: Es müssen zwei synchrone Artefaktpaare aus dem ARXML generiert werden: Das reguläre C++-Skeleton inkl. C-Bridge (
Adapter (gen)) sowie das Rust-Skeleton inkl. Bindings. - Speicher-Ownership & Lebensdauer: Das erzeugte C++-Skeleton-Objekt und die Rust-Instanz
RadarImpmüssen über native Heap-Handles synchron gehalten werden (Box/Pinning). Vorzeitiges Deallokieren auf einer Seite führt zu Use-After-Free bei nachfolgenden IPC-Callbacks. - ABI-Stabilität: Der Aufrufmechanismus
via function tableerzwingt eine strikte C-ABI-Kompatibilität (#[no_mangle],extern "C") ohne C++-spezifische Name-Mangling- oder Exception-Mechanismen über die Sprachgrenze hinweg.
- Zweistufiger Codegenerator: Es müssen zwei synchrone Artefaktpaare aus dem ARXML generiert werden: Das reguläre C++-Skeleton inkl. C-Bridge (
- Spezifikatorische Einordnung: Als
EXP(Explanation) definiert das Dokument den Referenzansatz für hybride Rust/C++-Architekturen in der Adaptive Platform, um bestehende C++-zertifizierte Kommunikationsstacks ohne Neuzertifizierung in Rust wiederzuverwenden.
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.