AUTOSAR_EXP_ARAComAPI
FIG-477e81b5cf07d76d
962 × 438 px
1 Release(s)
Figure 6.18: Event Allocate/Send sample
SHA-256 Inhalts-Fingerabdruck:
477e81b5cf07d76dcd58423f8375f89ce8cca9a9297b78aaecd52897d689bb62
✦
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: C++11/C++14 Code-Listing / API-Verwendungsbeispiel (Skeleton-seitiges Event-Publishing).
- Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Teilsystem
ara::com(Communication Management). - Technischer Zweck: Demonstration des optimierten Zero-Copy- bzw. In-Place-Allokationsmusters für Service-Events auf der Provider-/Skeleton-Seite (
Allocate()/Send()-Pattern), um redundante Speicherkopien bei großen Datensätzen (z. B. Radar-Objektlisten) zwischen Applikation und IPC-/Netzwerk-Binding zu eliminieren.
2. Komponenten, Entitäten & Schnittstellen
- Service Skeleton / Service-Instanz:
myRadarService: Lokale Instanz einer generierten Skeleton-Klasse (Service-Provider).BrakeEvent: Service-Event-Member der Skeleton-Instanz (Typ:ara::com::skeleton::Event<SampleType>).
- Speicher- und Zeigertypen:
SampleAllocateePtr<BrakeEvent::SampleType>: Spezieller Move-Only-Smart-Pointer vonara::com(konzeptionell analog zustd::unique_ptr), der den exklusiven Besitz eines durch das Binding verwalteten Puffers kapselt.BrakeEvent::SampleType: Generierte Datenstruktur / Payload des Events (enthält Memberactive[bool] undobjects[Container/Vector]).
- Schnittstellen & Methoden:
BrakeEvent.Allocate(): Binding-spezifische Speicheranforderung (z. B. Shared Memory Puffer oder SOME/IP-Serialisierungspuffer).BrakeEvent.Send(SampleAllocateePtr<SampleType>&&): Asynchrone/synchrone Verteilungs-API mit Ownership-Transfer.std::move(): Standard-C++-Utility zur expliziten Übertragung der Eigentümerschaft an die Middleware.
3. Dynamisches Verhalten & Sequenzablauf
- Puffer-Allokation (
Allocate):- Die Applikation triggert
myRadarService.BrakeEvent.Allocate(). - Das darunterliegende Binding (IPC/Shared Memory oder Transport-Stack) reserviert einen geeigneten Speicherbereich aus dem vorkonfigurierten Pufferpool und gibt ihn gekapselt in
curSamplePtrzurück.
- Die Applikation triggert
- In-Place Nutzdaten-Initialisierung:
- Der Applikations-Thread schreibt die Nutzdaten direkt in den allokierten Speicherbereich (
curSamplePtr->active = true,fillVector(curSamplePtr->objects)). Es findet keine Zwischenspeicherung im applikationseigenen Heap/Stack statt.
- Der Applikations-Thread schreibt die Nutzdaten direkt in den allokierten Speicherbereich (
- Eigentumsübergabe & Dispatch (
Send):- Aufruf von
myRadarService.BrakeEvent.Send(std::move(curSamplePtr)). - Durch
std::movegeht die exklusive Eigentümerschaft an das Binding über. Die Middleware übernimmt die Verteilung (z. B. Benachrichtigung lokaler Subscriber via IPC / Shared Memory Pointer Exchange oder Serialisierung ins Netzwerk via SOME/IP).
- Aufruf von
- Invalidierung des lokalen Zeigers:
- Nach dem Move befindet sich
curSamplePtrim Zustand moved-from (nullptr). - Jeder nachfolgende Zugriff führt zu Null-Pointer-Dereferenzierung / Segmentierungsfehler (Compile- und Runtime-Schutz gegen Data-Races).
- Nach dem Move befindet sich
4. Normative Relevanz & Entwickler-Hinweise
- Zero-Copy IPC-Optimierung:
- Für plattforminterne Kommunikation (IPC) allokiert das Binding Speicher direkt im Shared-Memory-Segment. Dadurch können Consumer denselben Speicherbereich (ReadOnly via
SamplePtr) einhängen, ohne dass Nutzdaten im Kernel oder User-Space kopiert werden müssen.
- Für plattforminterne Kommunikation (IPC) allokiert das Binding Speicher direkt im Shared-Memory-Segment. Dadurch können Consumer denselben Speicherbereich (ReadOnly via
- Lebenszyklus & Move-Semantik:
- Der Entwickler muss die Move-Semantik zwingend einhalten. Zugriff auf
curSamplePtrnachSend()ist verboten (Use-After-Move).
- Der Entwickler muss die Move-Semantik zwingend einhalten. Zugriff auf
- Fehlerbehandlung bei Allokationsengpässen:
Allocate()kann bei Pool-Erschöpfung fehlschlagen (Rückgabe vonnullptrin R17-03/R18-03 bzw. späterara::core::Result). Für ASIL-konforme Software ist eine Überprüfung des Pointers vor Dereferenzierung architektonisch zwingend erforderlich (im Beispiel zugunsten der Lesbarkeit ausgelassen).
- Konfigurationsabhängigkeit:
- Die maximale Sample-Größe und Anzahl verfügbarer Puffer müssen im Execution- und Service-Instance-Manifest (
CommunicationDeployment) präzise auf die Systemlast und Latenzanforderungen abgestimmt sein.
- Die maximale Sample-Größe und Anzahl verfügbarer Puffer müssen im Execution- und Service-Instance-Manifest (
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.