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

  • 25/09/2025
  • Allgemein, Elektrodermale Aktivität, Hardware, Produktion

Darf ich vorstellen? Das ist EDA – unsere Eule für elektrodermale AktivitätDas ist EDA, unsere kleine Eule mit einem besonderen Talent. EDA kann elektrodermale Aktivität (kurz: EDA) messen – ...

Weiterlesen
  • 09/09/2025
  • Allgemein, Software

In vorangegangenen Blogbeiträgen habe ich zwei wesentliche Komponenten einer einfachen und universell einsetzbaren Software-Architektur vorgestellt: Events mit Dispatcher, Listeners und Datapool. Damit lassen sich bereits sehr viele einfache Use-Cases ...

Weiterlesen
  • 19/03/2025
  • Allgemein, Unternehmen, Veranstaltungen

Wir freuen uns, euch zu einem exklusiven VDI-Event des Netzwerk Systems Engineering einzuladen, das bei uns im Büro stattfindet!Am Freitag, den 28. März 2025, wird sich alles um die ...

Weiterlesen
Cookie-Übersicht

Die Internetseiten der MEDtech Ingenieur GmbH verwenden Cookies. Cookies sind Textdateien, welche über einen Internetbrowser auf einem Computersystem abgelegt und gespeichert werden.

Zahlreiche Internetseiten und Server verwenden Cookies. Viele Cookies enthalten eine sogenannte Cookie-ID. Eine Cookie-ID ist eine eindeutige Kennung des Cookies. Sie besteht aus einer Zeichenfolge, durch welche Internetseiten und Server dem konkreten Internetbrowser zugeordnet werden können, in dem das Cookie gespeichert wurde. Dies ermöglicht es den besuchten Internetseiten und Servern, den individuellen Browser der betroffenen Person von anderen Internetbrowsern, die andere Cookies enthalten, zu unterscheiden. Ein bestimmter Internetbrowser kann über die eindeutige Cookie-ID wiedererkannt und identifiziert werden.

Durch den Einsatz von Cookies kann die MEDtech Ingenieur GmbH den Nutzern dieser Internetseite nutzerfreundlichere Services bereitstellen, die ohne die Cookie-Setzung nicht möglich wären.

Mittels eines Cookies können die Informationen und Angebote auf unserer Internetseite im Sinne des Benutzers optimiert werden. Cookies ermöglichen uns, wie bereits erwähnt, die Benutzer unserer Internetseite wiederzuerkennen. Zweck dieser Wiedererkennung ist es, den Nutzern die Verwendung unserer Internetseite zu erleichtern. Der Benutzer einer Internetseite, die Cookies verwendet, muss beispielsweise nicht bei jedem Besuch der Internetseite erneut seine Zugangsdaten eingeben, weil dies von der Internetseite und dem auf dem Computersystem des Benutzers abgelegten Cookie übernommen wird.

Die betroffene Person kann die Setzung von Cookies durch unsere Internetseite jederzeit mittels einer entsprechenden Einstellung des genutzten Internetbrowsers verhindern und damit der Setzung von Cookies dauerhaft widersprechen. Ferner können bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme gelöscht werden. Dies ist in allen gängigen Internetbrowsern möglich. Deaktiviert die betroffene Person die Setzung von Cookies in dem genutzten Internetbrowser, sind unter Umständen nicht alle Funktionen unserer Internetseite vollumfänglich nutzbar.

Weitere Informationen erhalten Sie in unserer Datenschutzerklärung.

Unbedingt notwendige Cookies

Dieses Cookie wird benötigt, um Ihre Cookie-Einstellungen zu merken und weitere Hauptfunktionen zur Verfügung zu stellen

Um Ihnen eine Auskunft über Ihre gespeicherten personenbezogenen Daten hier (https://medtech-ingenieur.de/gespeicherte-daten-2/) geben zu können, benötigen wir einen Cookie, um Sie bei der Datenabfrage identifizieren zu können. Dieser Cookie muss aus Sicherheitsgründen deshalb aktiviert sein. Ein weiterer Cookie wird gesetzt, um diesen Banner nicht erneut anzeigen zu müssen.

Cookie-Name Beschreibung
PHPSESSID Name: PHP session
Anbieter:
Eigentümer der Webseite (MEDtech Ingenieur)
Zweck:
Wir benötigt, um Sie bei der Anfrage von personenbezogenen Daten identifizieren zu können. Das Cookie wird nur gesetzt, wenn Sie eine Anfrage hier (https://medtech-ingenieur.de/gespeicherte-daten-2/) stellen.
Laufzeit: Sitzungsende
Kategorie: Unbedingt notwendige Cookies
moove_gdpr_popup Name: Cookie-Box Einstellungen
Anbieter:
Eigentümer der Webseite (MEDtech Ingenieur)
Zweck:
Wird benötigt, um Ihre Cookie-Einstellungen zu speichern, um den Cookie-Banner nicht erneut anzeigen zu müssen.
Laufzeit: 1 Jahr
Kategorie: Unbedingt notwendige Cookies
comment_author_9c90e388e3e1be4a6c594fa6ac8a3eec
comment_author_email_9c90e388e3e1be4a6c594fa6ac8a3eec
comment_author_url_9c90e388e3e1be4a6c594fa6ac8a3eec
Name: Kommentar Einstellungen
Anbieter:
Eigentümer der Webseite (MEDtech Ingenieur)
Zweck:
Cookie wird angelegt, wenn Sie ein Kommentar auf MEDtech Ingenieur veröffentlichen wollen, um Sie als Autor identifizieren und den aktuellen Status Ihres Kommentars anzeigen zu können. Das Cookie enthält den angegebenen Namen. Das Cookie wird erst gesetzt, wenn Sie der Speicherung Ihrer personenbezogenen Daten zustimmen.
Laufzeit: 1 Jahr
Kategorie: Unbedingt notwendige Cookies
rmp-rate Name: RMP Rate
Anbieter: Eigentümer der Webseite (MEDtech Ingenieur)
Zweck: Cookie wird angelegt, wenn Sie eine Bewertung eines Blogbeitrags mithilfe des Sternebewertungssystems abgeben. Ihnen wird eine anonymisierte ID zugewiesen, um zu erkennen, ob Sie einen Artikel bereits bewertet haben oder nicht. Das Cookie wird nur verwendet, um zu verhindern, dass mehrfache Bewertung abgegeben werden und erst gesetzt, wenn Sie auf einen Stern klicken.
Laufzeit: 1 Jahr
Kategorie: Unbedingt notwendige Cookies
medtech-download-page Name: Download Page
Anbieter: Eigentümer der Webseite (MEDtech Ingenieur)
Zweck: Cookie wird angelegt, wenn Sie den Landing-Page Prozess erfolgreich durchlaufen haben. Dies geschieht nur, wenn Sie einen Content-Download von unserer Website anstreben.
Laufzeit: 1/2 Jahr
Kategorie: Unbedingt notwendige Cookies