AUTOSAR-Konfigurationen

Unsauberes Konfigurieren führt zu instabilen Systemen

13. April 2016, 9:59 Uhr | Stefanie Eckardt
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Das generierte Code für RTE und die Task

Das Schreiben in ReZ und das Lesen in Re1 finden in derselben Task statt
Bild 2. Das Schreiben in ReZ und das Lesen in Re1 finden in derselben Task statt.
© Scheid Automotive

In dem in Bild 2 abgebildeten Beispiel wäre kein konkurrierender Zugriff auf die Daten möglich, weil sowohl das Schreiben in ReZ als auch das Lesen in Re1 in derselben Task stattfinden und dadurch eben nicht gleichzeitig erfolgen können.

Die generierte RTE wird in diesem Fall also vermutlich keinen Schutzmechanismus, beispielsweise durch Interrupt-Sperren oder OS-Resources, einfügen. Im einfachsten Fall wird der in Listing 2 abgebildete Code für die RTE generiert. Liest nun aber auch das Runnable Re2 die Daten aus dem Port und hat die Task B eine höhere Priorität als Task A, kann ein Schreibvorgang aus ReZ durch Re2 unterbrochen werden und die in Re2 ausgelesenen Daten wären inkonsistent - vorausgesetzt es handelt sich bei DtSpd1 nicht um ein "atomares" Datum.

Listings 1-4

Listing 1
© Scheid Automotive
Listing 2
© Scheid Automotive
Listing 3
© Scheid Automotive

Alle Bilder anzeigen (4)

Probleme ergeben sich für ähnliche Szenarien, zum Beispiel für den Fall, dass ReZ in Task C läuft. In diesem Fall müsste der RTE-Generator zwar einen Schutzmechanismus zwischen Re1 aus Task A und ReZ (aus Task C) vorsehen. Auf diesen Schutzmechanismus, wie OS-Resources, hat jedoch Re2 aus Task B keinen Zugriff, was im besten Fall mit einem OS_Error signalisiert wird. Für andere Zugriffsarten, beispielsweise dataReadAccess oder auch Client-Server-Kommunikation, ergeben sich ähnliche Situationen. Die Konfiguration müsste also korrekterweise um einen Zugriff von Re2 auf Port RpRx ergänzt werden, wie in Bild 3 veranschaulicht ist.

Bild 3. Ergänzung der Konfiguration um einen Zugriff von Re2 auf Port RpRx.
Bild 3. Ergänzung der Konfiguration um einen Zugriff von Re2 auf Port RpRx.
© Scheid Automotive

Alle drei abgebildeten Runnables könnten damit auf die Ports über die generierten APIs nach Listing 3 zugreifen. Im Vergleich zu vorangegangenem Beispiel wird keine neue API erzeugt. Der generierte Code für die APIs wird damit - je nach RTE-Generator und weiteren Konfigurationsparametern - komplexer, s. Listing 4.

Durch Umgehen der Konfiguration durch das Verwenden generierter APIs für andere Runnables können sporadisch inkonsistente Daten entstehen. Die Fehlersuche zu einem solchen Problem kann sehr viel vermeidbare Zeit kosten. Deshalb ist es wichtig, das System vollständig zu konfigurieren und sich bei der Implementierung strikt an die Konfiguration zu halten. Das bedeutet, nur die APIs zu verwenden, welche auch für das entsprechende Runnable generiert wurden.


  1. Unsauberes Konfigurieren führt zu instabilen Systemen
  2. Das generierte Code für RTE und die Task

Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!