Die Entwickler von Embedded-Software sind recht gut mit der Verwendung eines Code-Editors, eines Compilers, Linkers, Debuggers und natürlich eines Evaluierungsboards vertraut. Und meist reichen diese Tools völlig zur Entwicklung und zur Fehlerbehebung eines Embedded-Systems aus. Was aber, wenn man den Betrieb von dynamischen Systemen wie beispielsweise einer Motorregelung, einer Prozesssteuerung oder von Flugsystemen verifizieren möchten? In einer solchen Situation ist ein tiefer Einblick in ein laufendes System erforderlich.

Glücklicherweise sind moderne Prozessoren mit einer speziellen Debugging-Hardware ausgerüstet, die es Tools ermöglicht, bei laufendem Betrieb des Zielsystems Speicherplätze anzuzeigen und zu ändern. In diesem Beitrag geht es um die Frage, wie man mithilfe einer derartigen Debugging-Hardware den Status eines Embedded-Systems mit wenig oder keinerlei CPU-Eingriffen sowie bei laufendem Betrieb des Zielsystems visualisieren kann.

Wenn man schon eine Zeitlang Embedded-Systeme entwickelt hat, weiß man, wie komplex die Bausteine inzwischen geworden und wie schwer sie zu debuggen sind. Mikrocontroller (MCUs) sind eigenständige Bausteine (Blackboxes) mit einem Speicher auf dem Chip, der mit buchstäblich Hunderten oder sogar Tausenden von Registern vollgepackt ist, die zur Steuerung des Betriebs unterschiedlicher Peripheriegeräte Verwendung finden.

Debugger

Bild 1: Beobachtungsfenster eines Debuggers in einer Eclipse-Umgebung. Micrium

Zu jeder Tool-Kette gehört ein Debugger, der es mindestens erlaubt, das Zielsystem anzuhalten und Variable sowie I/O-Register im Beobachtungsfenster zu untersuchen (Bild 1). Diese Fähigkeit ist zwar zum Debuggen von Algorithmen, die keine Echtzeitkomponenten enthalten, durchaus nützlich. Sie bietet freilich wenig Nutzen, wenn man es sich nicht leisten kann, das Ziel wie zum Beispiel eine Motorregelung oder Prozesssteuerung anzuhalten.

Zur Überwachung des einwandfreien Betriebs eines laufenden Embedded-Systems bedienen sich Entwickler einer Reihe von Techniken, die im Folgenden näher beschrieben werden.

LEDs als Anzeige

Im Allgemeinen haben Entwickler von Embedded-Systemen Zugriff auf mindestens eine LED, die anzeigt, dass irgendetwas arbeitet: Wenn das Licht grün wird, hat die CPU beispielsweise eine Verbindung zum Netz hergestellt. LEDs eignen sich hervorragend zur Anzeige eines Go-/No-Go-Zustands. Wenn man jedoch den Status weiterer Operationen verifizieren möchte, braucht man dazu entweder mehr LEDs, oder man muss mit denen, die man hat, kreativ werden: zum Beispiel in Form von Unterbrechungsmustern (Blip) oder Blinkfrequenzen.

7-Segment-Anzeigen

Debugger

Bild 2: Eine 7-Segment-Anzeige kommt häufig bei günstigen Embedded-Systemen zum Einsatz. Micrium

Preisgünstige Embedded-Systeme sind zur Verwendung durch den Endverbraucher oft entweder mit LED- oder mit 7-Segment-LCD-Anzeigen ausgestattet (Bild 2). Der Embedded-Entwickler kann sich die Anzeige während der Entwicklung „ausborgen“, um Hinweise zu erhalten, was im Embedded-System passiert. Eine 7-Segment-Anzeige kann numerische Werte binär, dezimal, hexadezimal oder begrenzt alphanumerisch darstellen.

Im Allgemeinen ist man auf den Wertebereich eingeschränkt, der sich – basierend auf der Anzahl der zur Verfügung stehenden Stellen – anzeigen lässt. Außerdem braucht man, wenn man verschiedene Werte anzeigen möchte, eine Methode, um zwischen den unterschiedlichen Darstellungen zu wechseln. Benötigt das Embedded-Design an sich keine Anzeige, könnte man nur für Testzwecke ein Display hinzufügen. Damit dieses jedoch funktioniert, muss man allerdings speziell für diesen Zweck zusätzlichen Code schreiben.

 

Themen auf der nächsten Seite: Zeichenmodule, printf()-Funktion und Grafikdisplay.

Seite 1 von 3123