Es gibt Fälle, speziell bei Echtzeitanwendungen, in denen konventionelles Stop-Mode-Debugging allein nicht ausreicht. Nicht-intrusives Echtzeit-Tracing kann hier der Retter in der Not sein, um den Code zu optimieren und ein System sicherer zu machen – wie das Beispiel einer Roboteranwendung zeigt.
Stellen Sie sich vor, Sie hätten einen vollständigen Einblick in das, was Ihr Embedded-System tut, ohne seine Echtzeitleistung in irgendeiner Weise zu beeinträchtigen, indem Sie jeden Schritt auf dem Weg dorthin aufzeichnen. Sie könnten die Leistung Ihrer Anwendung und die Daten für die Zertifizierung Ihrer sicherheitskritischen Anwendung ermitteln. Sie könnten Ihre Embedded-Systeme schneller und zuverlässiger als je zuvor auf den Markt bringen und gleichzeitig ein sichereres und stabileres Produkt entwickeln. Das ist es, was Trace-basiertes Debugging bietet.
Der Lauterbach-Roboter, der auf Fischer Technik basiert, ist ein Multitasking-System, wie es in jeder Produktionsanlage zu finden ist, und die gleichen Prinzipien gelten auch für Systeme in der Automobil- und Luftfahrtindustrie. Hier nutzt der Kran ein Vakuum, um verschiedene Objekte zu sammeln und an ihren Bestimmungsort zu transportieren. Dabei hängen alle Arbeitsschritte voneinander ab. Alle Maschinen, Motoren, Mechanismen und das Display werden durch den Mikrocontroller-Turm gesteuert.
In diesem Beispiel kommt Lauterbachs All-in-One-Debug- und Trace-Tool zum Einsatz: der μTrace, kombiniert mit der Mixed Signal Probe, um die digitale Signalerfassung mit dem Programmablauf zu korrelieren. Das Tool kann Echtzeitinformationen wie System-Traces und parallele ETM-Flow-Traces erfassen und ermöglicht so z. B. Code Coverage und Code Profiling. Es unterstützt Datenraten bis zu 400 Mbit/s pro Trace-Leitung von der CoreSight-Trace-Port-Interface-Einheit (TPIU). Dies ist 30 % schneller als konkurrierende Trace-Produkte für Cortex-M-basierte Embedded-Systeme.
Das Zielsystem wird von einem ARM-Cortex-M4 gesteuert. Über eine Treiberstufe steuert die CPU direkt die DC-Motoren, Pneumatikventile und LEDs an und erfasst die Motordrehungen und Schalter.
Externe Komponenten wie das LC-Display werden über einen I2C-Bus angeschlossen. Es ist nicht immer möglich, ein System anzuhalten und die richtigen Daten zur Fehlersuche abzurufen. Wenn die Entwickler das System stoppen, wird im Beispiel das Vakuum angehalten und die Motorposition dekalibriert. Infolgedessen fällt die Murmel vom Kran oder bleibt im Turm stecken und muss schließlich zum Startpunkt zurückkehren (Bild 1). Das System ist gestört und kann nicht mehr von dem Punkt aus neu starten, an dem es gestoppt wurde. Es entspricht nicht mehr dem angenommenen Betriebszustand.
Traditionelles Debugging ist wie das Aufnehmen von Schnappschüssen eines Autorennens, während die Autos an einem vorbeirasen: Wer die Fotos betrachtet, verpasst das meiste, was während des Rennens passiert. Trace-basiertes Debugging ist wie der Zugriff auf die Telemetrie im Auto, die Streckenbedingungen und die Aktionen des Fahrers. Jede Aktion und ihr Zeitstempel werden aufgezeichnet.
Viele Embedded-Prozessoren sind in der Lage, diese Details über die ausgeführte Software zu liefern, ohne die zu testende Anwendung zu beeinträchtigen. Es braucht nur die richtigen Werkzeuge, um alle verfügbaren Informationen zu sammeln und zu analysieren. Durch den Einsatz von Echtzeit-Tracing können Embedded-Entwickler:
Die Tracing-Tools von Lauterbach bieten einen kompletten Satz von Analysefunktionen (Bild 2), Echtzeit-Datenvisualisierung und Codeabdeckung. Mit dem Program Flow Trace können Ingenieure zunächst überwachen, welche Aufgabe ausgeführt wurde, den Sequenzfluss identifizieren, in dem sie ausgeführt wurde, und messen, wie lange die Ausführung dauerte. All diese Informationen werden vom Zielsystem in Echtzeit und ohne Unterbrechung erfasst. Sie unterbrechen das System nicht und stören es nicht.
Manchmal ist eine zusätzliche Information erforderlich, um das Verhalten des Ziels zu verstehen. Zu diesem Zweck ist der Instrumentation Trace eine Software-Trace-Methode, die Debugging im printf-Stil unterstützt. Er kann Ausgaben in Hochsprache an benutzerdefinierten Positionen während des Programmablaufs erfassen und liefert Ausgabemeldungen, die die aktuellen Aufgaben beschreiben, die beispielsweise während der Ausführung der Kugelbahn stattfinden.
Ein weiteres wichtiges Merkmal der Verfolgung des Programmflusses ist die Bereitstellung von Informationen zur Codeabdeckung (Bild 3). Diese Funktion ist der Schlüssel zur Erstellung von Berichten, die die Einhaltung von Sicherheitsstandards unterstützen. Sie ermöglicht die einfache Identifizierung der Codestücke, die ausgeführt oder nicht ausgeführt wurden. Und sie ist eine Garantie dafür, dass die Test Bench den gesamten Code und seine Spezialfälle abdeckt.
Schließlich hilft die eingebaute Protokollanalysesoftware bei der Entschlüsselung der Kommunikationssignale (Bild 4). Im Roboter-Beispiel wird die Mixed-Signal-Probe verwendet, um die Signale des I2C-Busses abzutasten, und das Tool Trace32 übersetzt sie in lesbare I2C-Protokollinformationen.
Lauterbachs Tracing-Tools verschaffen Embedded-Entwicklern mehr Einblick in das laufende System. Die Daten werden aufgezeichnet und angezeigt, sodass die Ingenieure die Anwendungssoftware analysieren und optimieren können, ohne in sie einzugreifen. Ein Trace-Tool ist ein wesentlicher Bestandteil jeder Testumgebung.
Der Autor
Holger Lohn
studierte Elektrotechnik in München und ist seit 2004 bei Lauterbach tätig. Als Produktmanager für Debug- und Trace-Tools koordiniert und plant er die Zukunft des Lauterbach-Produktportfolios