Embedded Softwarearchitektur (ego)zentrisch: Datapool

Jürgen Welzenbach

22/04/2024


Im vorangegangenen Blog-Post (Architektur in Feierlaune) habe ich eine SW-Architektur beschrieben, die hilft, die Kommunikation zwischen Komponenten zu vereinfachen.

Einen Punkt habe ich in dem Zusammenhang allerdings noch nicht angesprochen: Die Datenhaltung.
Wenn Daten zwischen Modulen hin- und hergereicht werden müssen, ginge das mit der

  • althergebrachten Methode – tonnenweise getter- und setter-Funktionen – gähn,
  • globalen Variablen – gaanz dolle Idee, oder
  • mit Hilfe von Events, denen man Daten als Payload mitgibt.

Aber spätestens dann, wenn ein Modul z.B. periodisch aktuelle Daten benötigt, scheitert man damit. Man könnte ein Event schicken, das ein anderes Modul veranlasst, die aktuellen Daten zu verschicken. Aber ehrlich: Das ist von hinten durch die Brust, oder?

 

Es lebe der Zentral-(Daten)friedhof

Entschuldigt, aber diese Anspielung musste einfach sein. Vielen Dank, Joesi Prokopetz, für diesen zeitlosen Text

Was spricht denn dagegen, die Datenhaltung zu zentralisieren? Die Vorteile liegen auf der Hand:

  • Die Daten stünden allen Modulen zur Verfügung – das Ganze natürlich thread-safe über entsprechende Methoden.
  • Die Initialisierung erfolgt an zentraler Stelle – nicht über alle möglichen Module verteilt.
  • Der Zugriff mittels getter-/setter-Methoden erfolgt mit eindeutigem Identifier. Vorteil: Eine Suche über alle Module liefert schnell alle Stellen, wo auf ein Datum zugegriffen wird.
  • Unittests können viel einfacher ausfallen. Denn es müssen nicht wie zuvor die zig Module gemockt werden.
  • Dank C++ kann man den Zugriff auf die Daten sehr einfach typsicher gestalten.
  • Der thread-safe Zugriff erfolgt „unter der Haube“ – die Caller müssen sich nicht selbst darum kümmern bzw. muss es nicht bei allen Zugriffsfunktionen implementiert werden.

Aber war’s das schon? Wenn ein Modul darüber informiert werden soll, dass sich ein Wert geändert hat, müsste ja trotzdem ein entsprechendes Event verschickt werden.

 

Palim-Palim

Und schon wieder ein Zitat – wer war’s?

Selbstverständlich gibt’s auch dafür eine elegante Lösung: Wenn ein Modul einen Wert im Datapool ändert, verschickt der ein Change-Event mit dem Identifier im Bauch – „läutet sozusagen mit dem Glöckchen“, wie es ein ehemaliger Kollege mal formulierte. Module, die die Ohren aufsperren (also die, die als Change-Event-Listener beim Eventdispatcher registriert sind) lesen bei Bedarf den betreffenden Wert aus dem Datapool und können mit dem neuen Wert arbeiten.

Das Konzept ist – wie so oft – nicht neu. Im Embedded Kontext ist es stark vereinfacht und hat mit einem Data Warehouse nur noch konzeptuell zu tun. Ich selbst habe das Konzept in Verbindung mit Change-Events schon vor ca. 20 Jahren kennengelernt (3SOFT bzw. EB Graphics Target Framework – gibt’s leider inzwischen nicht mehr).

In Abbildung 1 „holt“ sich eine Softwarekomponente eine Referenz auf ein Datapool-Element IValue und ändert den Wert via IValue::set(). Diese Funktion teilt dem Datapool mit, dass sich der Wert des Datapool-Items mit der zugehörigen ID geändert hat. Der lässt sich von der EventFactory ein ChangeEvent mit der ID erzeugen und übergibt es dem EventDispatcher.

 

Abbildung 1: Change-Notification bei Wertänderung

 

Und jetzt?

Basierend auf den zwei einfachen Konzepten (Eventsystem, Datapool) kann man komplexe Software erstellen – auch auf kleinen Embedded Systemen. Derzeit entwickeln wir eine neue Software für einen Defibrillator in dem wir genau diese Architektur sehr erfolgreich einsetzen.

Code-Generatoren sorgen dafür, dass Source-Code mit Event-/Datapool-Enums etc. immer konsistent sind – diesen Code per Hand zu klopfen ist – wie der Frange sagt – „Dööderles“-Arbeit und äußerst fehlerträchtig. Aber das Thema Code-Generierung ist einen eigenen Blogpost wert.

Brauchen Sie Unterstützung beim Design einer Software-Architektur oder bei der Entwicklung von Embedded Software? Dann wenden Sie sich gerne an uns. Unsere erfahrenen MEDtech Ingenieurinnen und Ingenieure helfen ihnen gerne dabei ihr Medizinprodukt zu entwickeln oder offene Fragen zu klären.


Geschrieben von Jürgen Welzenbach

Jürgen hat nach seinem Elektrotechnikstudium in Erlangen seine Diplomarbeit in Kooperation mit einem Hersteller von ophthalmologischen Geräten und der Universitätsaugenklinik durchgeführt.

In zwei Erlanger Unternehmen fand er zur Embedded Software und hat vor allem HMIs für Baumaschinen und Laboranalysegeräte entwickelt.


Weitere Beiträge

  • 20/11/2025
  • Allgemein, Hardware, Qualität, Technik, Testen

Haben Sie schon einmal darüber nachgedacht, günstige Komponenten in China zu beschaffen? Die Versuchung ist groß, wir kennen das. Und wir haben bereits einige Erfahrungen gesammelt, von denen ich ...

Weiterlesen
  • 13/11/2025
  • Allgemein, Fertigung, Produktion, Qualität, Unternehmen

In unserer globalisierten Welt wirkt es auf den ersten Blick attraktiv, die Fertigung von Medizintechnik nach Fernost zu verlagern: Große Produktionskapazitäten und günstige Preise.Viele Jahre hat das Offshoring auch ...

Weiterlesen
  • 29/10/2025
  • Allgemein, Qualität, Unternehmen

Die Welt des Engineerings steht vor einem tiefgreifenden Wandel. Künstliche Intelligenz (KI) ist längst keine Zukunftsvision mehr – sie ist Realität. Und sie verändert bereits heute grundlegend, wie Produkte ...

Weiterlesen
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.

Unbedingt notwendige Cookies

Unbedingt notwendige Cookies sollten jederzeit aktiviert sein, damit wir deine Einstellungen für die Cookie-Einstellungen speichern können.