Software-Design

Embedded Software

Das Software-Design steht an erster Stelle einer erfolgreichen Softwareentwicklung, auch für eingebettete Systeme. Ausgehend von der Problemanalyse werden zunächst Module identifiziert. Diese werden dann spezifiziert und umgesetzt. Diese Modularisierung erlaubt eine gute Kapselung, verbessert die Wiederverwendbarkeit, Testbarkeit und Qualität der Software.

Eine weitere Methode die Qualität der Software zu verbessern ist Verwendung einer Schichtenarchitektur. Auf unterster Ebene wird die verwendetet Hardware abstrahiert. Das ist wichtig, denn das ermöglicht es viele Softwarekomponenten wiederzuverwenden. Eine Ebene darüber werden Softwarekomponten eingegliedert, die grundlegende Funktionen des Systems realisieren. In der obersten Ebene wird das Verhalten des Gesamtsystems realisiert.

Betriebssysteme

Auch für kleine Mikrocontroller werden meist Betriebssysteme eingesetzt. Die Softwareentwicklung wird durch ein Betriebssystem deutlich erleichtert. Parallel Abläufe werden mit Hilfe von Threads realisiert. Das Betriebsystem verwaltet die Threads. Diese werden vom Scheduler je nach Priorität gestartet. Queues oder Mailboxes dienen zum Datenaustausch zwischen den einzelnen Threads. Daneben gibt es eine Vielzahl von weiteren Funktionen die das Betriebssystem bietet.

  • Synchronisation mit Semaphore und Mutexes
  • Speicherverwaltung
  • Software-Timer
  • ...

Modultests

Eine gute Modularisierung der Software erlaubt es die einzelnen Module, herausgelöst aus ihrer Umgebung, zu testen. Dazu werden die Module in einer Simulationsumgebung gestartet und auf verschiedenen Wegen stimuliert. Die Reaktion des Moduls ist durch die definierte Stimulation ebenfalls definiert. Zustand und Ausgabewerte des Moduls werden dann auf Korrektheit geprüft.

Continuous Integration

Eine Continuous Integration Umgebung wird verwendet um eine permanente Systemintegration zu ermöglichen. Wird der Source-Code eines Entwicklers in ein Versionsverwaltungssystem eingecheckt, wird automatischen eine Systemintegration mit anschließenden Tests ausgeführt. Das Ergebnis wird per E-Mail an die Entwickler versendet. Mit dieser Methode werden Programmierfehler frühzeitig erkannt.

Auch eingebettete Systeme mit echter Hardware können so getestet werden. Dazu wird ein Testrechner so konfiguriert, dass er den Source-Code kompilieren und die angeschlossenen Hardware programmieren kann. Das Testergebnis wird dann über die Debug-Schnittstelle oder eine andere Schnittstelle übertragen.