Simulation? Wozu, hab doch ’ne Hardware

Jürgen Welzenbach

29/11/2022

Endlich – das neue Projekt soll demnächst starten. Die Hardware ist soweit fertig, wenn auch erst mal nur auf dem Papier. Naja, dafür gibt’s ja die Referenzboards. Es kann also gleich mit der Entwicklung auf der Zielplattform losgehen. Soweit – so gut.

Die Realität sieht meist anders aus: Entwicklerboards sind möglicherweise nicht lieferbar oder nicht in ausreichender Menge verfügbar. Schlussendlich heißt das, das Team kann sich die erste Zeit um die wenigen Exemplare kloppen. Aber was können die Software-Entwickler tun, damit sie trotz wideriger Umstände loslegen können? Die Lösung lautet: Simulieren. (nicht zu verwechseln mit „Blau machen“). Aber selbst wenn die Hardwareverfügbarkeit kein Problem darstellt, gibt es noch viele weitere Gründe, die für eine Simulation sprechen.

Warum Simulieren?

Zu den schon erwähnten Gründen gibt es noch eine ganze Reihe weiterer Vorteile:

  • Bei häufigen Wechseln zwischen Arbeiten im Büro und Heimarbeit möchte man nicht jedes Mal das ganze Equipment mit umziehen. Irgendwas vergisst man ja immer.
  • Eine Hardwareabstraktion ist prinzipiell erstrebenswert, denn sie erleichtert die Portierung auf Hardwarevarianten oder komplett neue Hardware-OS-Kombinationen. Wechselt man später die Hardware, kann es sein, dass man auf ein anderes Betriebssystem oder SDK umsteigen muss. Mit einem Osal bleibem die Änderungen überschaubar.
  • In vielen meiner bisherigen Projekte hatten die Geräte z.B. eine oder mehrere CAN-Verbindungen zu den Controllern des Gesamtsystems. Baut man an der „richtigen“ Stelle eine Weiche ein, kann man die Applikation z.B. mittels USB2CAN-Interface (mit den SDKs von z.B. IXXAT oder Vector ist das relativ schnell erledigt) am PC testen. Kunden konnten auf diese Art mit dem Laptop in der „echten“ Umgebung erste Tests durchführen – lange bevor die erste Hardware überhaupt verfügbar war.
    Es gab auch Fälle, wo wir Fehlern in der Controller-Software mit dem Debugger sehr schnell auf die Schliche gekommen sind. Mit der Applikation auf dem Target wäre das ein schwierigeres Unterfangen.
  • Wie woanders auch, ist Diversität ein Gewinn für alle. In diesem speziellen Fall meine ich, dass unterschiedliche Compiler zum Einsatz kommen können (Zielplattform: gcc, clang – Entwicklerplattform: z.B. VisualStudio). Compiler sind wie wir auch: Mimosen – und jeder meckert über ‚was anderes. In diesem Fall bringen also unterschiedliche Compiler einen Zugewinn an Sicherheit – natürlich vorausgesetzt, alle Compiler-Warnungen sind eingeschaltet (alles andere ist eh ein no-go!).
  • In jedem Fall ist allein schon das um ein Vielfaches einfachere Debugging eine Simulation Wert. Anstatt der üblichen Turn-around-Zyklen (Compile/Link – Download – Debugging starten; manchmal auch über den Zwischenschritt einer SD-Karte/USB-Stick – besonders schön!) genügt ein F5 und los geht’s (ok – ich habe mich als VS-User geoutet).
  • Obendrein kann man noch von zusätzlichen Sicherheitsnetzen der Laufzeit-Umgebung profitieren. So lassen sich z.B. bei VS oder Clang Checks für Buffer-Overruns, Memory-Leaks, Uninitialized-Memory-Access, Stack-Overflows etc. einschalten. Das erspart den Einsatz von extra Tools oder zeitaufwändige Fehlersuche/Debuggen auf dem Target. Denn spätestens wenn so ein Fehler im Feld auftritt, kann’s verdammt teuer oder sogar gefährlich werden!

Wie?

Zunächst trennt man die Applikation in einen Hardware-bzw. OS-unabhängigen Teil und erstellt eine OSAL-Schicht (OSAL=Operating System Abstraction Layer). Natürlich könnte man den Applikationscode auch mit #ifdefs versehen, um den Target-spezifischen Code nur im Target-Build einzuschalten. Viele von uns hatten mit solchem Code bestimmt schon mal zu tun. Schön ist das nicht wirklich. Und das ist nicht der einzige Nachteil. Es leiden Lesbarkeit, Wartbarkeit, Testbarkeit, Portierung auf andere Hardware/OS/… .

if-def-Hell
Das hat wohl jeder so oder noch schlimmer mal gesehen

Für das Betriebssystem, auf dem die Entwickler arbeiten (meist Windows, Linux nicht ganz so häufig) implementiert man eine Version das OSAL. Natürlich werden OSAL und Applikation für die Entwicklungsumgebung ein etwas anderes Laufzeitverhalten haben als das der Zielplattform. Das ist zunächst aber nicht so wichtig. Hauptsache, die Applikationsentwicklung wird nicht unnötig blockiert.

In Fällen, wo die Applikation zum Beispiel auf Flash– oder EEPROM-Speicher zugreifen muss, kann man diese meist recht einfach z.B. über Dateizugriffe simulieren. Damit eröffnen sich obendrein noch zusätzliche Möglichkeiten, Hardwarefehler (wie z.B. Lesefehler) automatisiert zu testen.
Etwas schwieriger kann die Simulation in Fällen von z.B. seriell angebundener Hardware sein. Aber auch hier kann man sich behelfen. Die Daten vom externen Gerät kann man Aufzeichnen und in die Simulation (per Datei oder Pipe) einspielen.

Letztendlich ist es nur eine Frage, auf welcher Ebene man die Weiche einbaut und mit welchem Mechanismus man die Funktionalität abbildet.
Ein ganz anderer Ansatz könnte auch sein, von Vornherein auf abstraktere Schnittstellen zu setzen, wie z.B. Kommunikation über Sockets. Damit wäre sogar die Kommunikation über Rechnergrenzen zu bewerkstelligen.

Wie so oft sind der Kreativität – mit Maß und Ziel – keine Grenzen gesetzt. In jedem Fall ist es lohnenswert, sich zu Projektbeginn mit diesem Aspekt zu befassen.

Zögern Sie nicht, mit Anmerkungen, Anregungen oder Fragen auf uns zuzugehen – sei es über die Kommentarfunktion oder direkt via E-Mail (info@medtech-ingenieur.de) oder Telefon (09131/691240). Und wenn Sie auf der Suche nach einem Job als Software-Entwickler sind, dann freuen wir uns über Verstärkung!


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