Hardware-Tracing

Eine unterschätzte Debugging-Technik

3. November 2021, 8:30 Uhr | Von Felix Martin
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Trace-Schnittstellen

Um die Trace-Daten vom Mikrocontroller zu übertragen, gibt es zwei Möglichkeiten. Die erste Technik nutzt die reguläre Debug-Schnittstelle: Der On-Chip-Trace-Baustein speichert die Trace-Meldungen in einen Puffer, aus dem der Debugger sie über einen regulären Debug-Port wie JTAG oder DAP ausliest. Bei der zweiten und leistungsfähigeren Technik kommt ein Trace-Port zum Einsatz. Ein Trace-Port ist eine spezielle serielle oder parallele Schnittstelle, über die das Trace-System Ereignisse direkt an den Debugger senden kann. Im Allgemeinen bietet ein dedizierter Trace-Port viel höhere Datenraten, benötigt dafür aber eine höhere Anzahl an Pins.

Wer Trace verwenden möchte, muss zunächst herausfinden, ob sein Mikrocontroller über Trace-Funktionen verfügt. Je nach Mikrocontroller-Hersteller und -Familie ist die Information möglicherweise nicht ohne Weiteres verfügbar. Gegebenenfalls kann der Tool-Anbieter weiterhelfen.

passend zum Thema

Blockdiagramm eines AURIX-Mikrocontrollers von Infineon
Bild 2: Blockdiagramm eines AURIX-Mikrocontrollers von Infineon.
© Infineon

Als anschauliches Beispiel dient im Folgenden ein Infineon »Aurix«-Mikrocontroller. Für die MCU benötigt der Entwickler ein sogenanntes Multi-Core-Debug-System (MCDS) oder zumindest eine »MiniMCDS« zum Aufzeichnen der Trace-Daten. So zeigt der obere Teil des Blockdiagramms in Bild 2 den regulären Teil eines Aurix-Mikrocontrollers einschließlich des On-Chip-Debug-Systems und des DAP-Debug-Ports.

Der untere Teil zeigt das MCDS, das die Trace-Einheit enthält, sowie die Prozessorbeobachtungsblöcke (POBs) und Busbeobachtungsblöcke (BOBs). Sie haben Zugriff auf die CPU-Kerne, den Hauptsystembus und Peripheriegeräte, um den Programmfluss, die Datenverfolgung und mehr aufzuzeichnen.

Bemerkenswerterweise bietet der Aurix sowohl einen Debug-Port als auch einen Trace-Port. Nutzt der Anwender den Debug-Port, puffert das MCDS die Trace-Nachrichten im Emulationsspeicher, aus dem der Debugger die Daten über den Device-Access-Port ausliest. Für eine höhere Leistung kann der Nutzer die Aurora-Gigabit-Trace (AGBT)-Schnittstelle verwenden, über die das MCDS die Daten direkt vom Chip sendet. Erwartungsgemäß bietet die Trace-Schnittstelle eine deutlich höhere Datenrate als die Debug-Schnittstelle.

Jedoch ist nicht jeder Mikrocontroller ab Werk »Trace-ready«: Manche verfügen über gar keine Trace-Fähigkeiten oder – noch schlimmer – bieten Trace an, aber der Trace-Port auf dem PCB ist nicht zugänglich. Jedoch gibt es selbst hierfür Möglichkeiten, denn für viele Mikrocontroller-Familien gibt es sogenannte Emulationsadapter – die Adapter ersetzen den Mikrocontroller auf der Leiterplatte. Sie enthalten ein größeres Derivat des MCU inklusive einer Trace-Einheit und bieten je nach Familie ebenso einen Debug- und/oder Trace-Port. Für Aurix-Mikrocontroller der ersten Generation und für viele andere Familien, einschließlich TC3XX-Aurix-Prozessoren der zweiten Generation, sind bei iSystem und anderen Herstellern entsprechende Emulationsadapter erhältlich.

Trace aufzeichnen

Ein erstes Anwendungsbeispiel beschreibt das Aufzeichnen eines OS-Aware-Trace mit Hilfe des Debugging-Tools winIDEA. Das AUTomotive-Open-System-Architecture- (AUTOSAR)-Betriebssystem liefert zusammen mit dem winIDEA Profiler (RTE-Profiling) detaillierte Einblicke in das Timing-Verhalten von Tasks, Interrupt Service Routines (ISRs) und Runnables. Einerseits ist das hilfreich für das Debuggen von Timing-Problemen. In manchen Anwendungen ist es jedoch ebenso zwingend erforderlich, um Anforderungen hinsichtlich quantifizierter Daten über die CPU-Auslastung zu erfüllen.

In dem Anwendungsbeispiel nutzt der Entwickler in seinem Tracing-Setup einen PC mit 64-Bit-Windows-Betriebssystem und winIDEA, eine »BlueBox IC5700« und »Active Probe« von iSystem. Außerdem nutzt er als Zielsystem den NXP »S32K148«-Mikrocontroller mit dem AUTOSAR-Betriebssystem »ETAS RTA«. Der S32K148 hat einen Cortex-M4-Kern und ist auf einem iSystem-Evaluierungsboard montiert. Weiterhin bietet das Evaluierungsboard einen 20-poligen Cortex-Debug- und ETM-Anschluss, der die vierpolige Parallel-Trace-Schnittstelle für den Debugger verfügbar macht. In dem Beispiel wird ein paralleles Trace verwendet, jedoch ist Tracing ebenso ohne ETM-Anschluss möglich. Dank einem sogenannten Single-Wire-Output (SWO)-Trace, der Teil der Arm Cortex-M CoreSight IP ist.

Um das Tracing zu starten, ruft der Anwender winIDEA auf und fügt dem Workspace für das Betriebssystem-Profiling ein »OSEK Runtime Interface« (ORTI) hinzu. Die ORTI-Datei zeigt die zwei globalen Variablen »RUNNINGTASK« und »RUNNINGISR«, die per Data-Tracing aufzeichnen und Tasks und ISRs sichtbar machen.

OS-Aware-Tracing für das Debuggen von Timing-Problemen und Messung der CPU-Auslastung
Bild 3: OS-Aware-Tracing für das Debuggen von Timing-Problemen und Messung der CPU-Auslastung.
© iSystem

Nach dem Datei-Download erstellt der Anwender in der Funktion winIDEA-Analyzer eine neue Trace-Konfiguration. Unter anderem ist im Menüpunkt »Hardware« die Trace-Einheit und der Rekorder innerhalb des Debuggers konfigurierbar, einschließlich der Komparatoren zur Auswahl der Ressourcen, die aufzuzeichnen sind. Im »Profiler« legt der Anwender fest, wie die Trace-Rohdaten vom Zielprozessor zu interpretieren und visualisieren sind. Ein besonderes Interesse gilt hier den Tasks und ISRs, deshalb wählt der Anwender für die Datenverfolgung Betriebssystem-Objekte aus, aktiviert entsprechende Datenbereiche und fügt gegebenenfalls eine aussagekräftige Variable hinzu. Startet der Anwender die Aufzeichnung, zeigt die Profiler-Zeitleiste innerhalb weniger Sekunden Tasks, ISRs und die Zählervariablen an (Bild 3). Graue Bereiche deuten darauf hin, dass ein Objekt im Leerlauf ist, während die roten Abschnitte anzeigen, dass eine Aufgabe oder ISR aktiv ist. Blau weist auf eine hohe Aktivität hin – für eine Detailansicht muss der Nutzer näher heranzoomen. Alternativ zur Zeitleistenansicht ist die Trace-Ansicht wählbar. Sie zeigt die bereits dekodierten Trace-Nachrichten an, die vom Ziel übermittelt wurden. Oder eine Statistik-Ansicht, die neben vielen anderen Metriken die CPU-Auslastung anzeigt, die von bestimmten Betriebssystem-Objekten verursacht wird.


  1. Eine unterschätzte Debugging-Technik
  2. Trace-Schnittstellen
  3. Resets auf der Spur

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu iSystem AG

Weitere Artikel zu Entwicklungswerkzeuge

Weitere Artikel zu Soft-SPS/Programmier-undRuntime

Weitere Artikel zu Industrie-Computer / Embedded PC

Weitere Artikel zu Betriebssysteme