Entwicklungswerkzeuge

Der gläserne Mikrocontroller

5. Oktober 2012, 10:50 Uhr | Von Heiko Rießland
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Von Stop-and-Go bis zum Trace

Darstellung der CoreSight-Komponenten
Bild 2. Diese etwas vereinfachte Darstellung zeigt die CoreSight-Komponenten, die das Debugging im XMC4500 unterstützen.
© PLS Programmierbare Logik & Systeme GmbH

Die bei der neuen XMC4000-Familie eingesetzten CoreSight-Komponenten sind in Bild 2 als vereinfachtes Blockdiagramm dargestellt. Dem heutigen Stand der Technik entsprechende On-Chip-Debug-Funktionen werden über einen JTAG Debug Port (J-DP) mit fünf Signalleitungen oder die neuere Serial-Wire-Debug-Schnittstelle (SW-DP) mit zwei Signalleitungen bereitgestellt. Mit dem Serial Wire Viewer steht dem Anwender darüber hinaus auch Trace-Funktionalität mit geringer Bandbreite zur Verfügung.

Der Viewer gibt Trace-Informationen über einen einzelnen Pin aus. Als Informationsquellen dienen dabei zum einen die Instrumentation Trace Macrocell (ITM), zum anderen die Data Watchpoint and Trace Unit (DWT). Letztere enthält Statistik-Zähler für abgearbeitete Zyklen, Schlafzyklen, die Interrupt-Belastung, die durchschnittliche Anzahl der Zyklen pro Instruktion sowie die Anzahl bestimmter Befehlstypen. Die Zähler erzeugen pro Überlauf eine Trace-Nachricht. Diese Informationen können zur Optimierung der Anwendungs-Performance eingesetzt werden. Ferner enthält die DWT Logikfunktionen, mit deren Hilfe sich Änderungen von Programmvariablen erkennen, eine Trace-Nachricht generieren oder der Befehlszähler zyklisch ausgeben lässt. Die Applikations-Software kann sogar Trace-Ereignisse durch Beschreiben von ITM-Registern erzeugen (printf-Style-Debugging). Eine vollständige Rekonstruktion des Programmflusses ist mit den geschilderten Eigenschaften aber nicht möglich.

Dies ist insofern ärgerlich, als diese Rekonstruktion bei komplexen SoCs hilft, die Software effektiv zu testen, zu optimieren und Fehler mit vertretbarem Zeitaufwand zu finden. Aber kein Grund zur Panik: Mit der Embedded Trace Macrocell (ETM) des CoreSight-Baukastens lässt sich dieses Manko gut in den Griff bekommen. Hauptzweck der ETM ist die Generierung eines Datenstroms mit Informationen über die Operationen des Prozessors. Diese umfassen beim XMC4500 die Befehlsabarbeitung (Code-Trace); Daten-Trace ist parallel mit den Einheiten ITM und DWT möglich. Der von der ETM erzeugte und über die Trace Port Interface Unit (TPIU) ausgegebene Datenstrom muss aufgezeichnet und durch ein Debug-Werkzeug analysiert werden. Da im XMC4500 kein Embedded Trace Buffer implementiert ist, wird für diese Aufzeichnung eine externe Trace-Hardware wie beispielsweise das mit bis zu 4 GB Speicher ausgestattete Universal Access Device 3+ (siehe Titelbild dieses Beitrags) von PLS Programmierbare Logik & Systeme benötigt.

Zur Reduzierung der aufzuzeichnenden Datenmenge kommen unterschiedliche Verfahren zum Einsatz. Zum einen wird nur dann eine Adressinformation ausgegeben, wenn diese – wie bei bedingten Programmverzweigungen (Sprüngen) und Interrupts üblich – nicht aus der Analyse des Maschinencodes rekonstruierbar ist. Wenn möglich, werden zudem nur Offset-Werte zur Vorgängeradresse ausgegeben.

Neben der Generierung von Trace-Informationen durch die ETM werden noch Logikfunktionen der DWT für die Steuerung des Trace-Stroms verwendet. Dadurch lässt sich die Erzeugung von Trace-Informationen in Abhängigkeit von bestimmten Zuständen innerhalb des Prozessors steuern. Die integrierte Filter- und Triggerlogik, darunter Adress-Komparatoren, Daten-Komparatoren, Sequenzer und eine Start/Stopp-Logik – wird vom Debug-Werkzeug entsprechend konfiguriert und gestattet dann beispielsweise die Aufzeichnung bestimmter Code-Adressbereiche oder Start und Ende der Aufzeichnung in Abhängigkeit von einer bestimmten Ereignissequenz.

Wie erfolgt nun die Weiterverarbeitung der Trace-Daten außerhalb des Mikrocontrollers? Beim bereits erwähnten UAD3+ steht hierfür ein Stecker zum Anschluss eines Trace-Pod zur Verbindung mit dem XMC4500-Target zur Verfügung. Zur Unterstützung der ETM wird im Pod das am Trace-Port aufgezeichnete Bitmuster zu größeren Datenpaketen zusammengefasst und mit einem Zeitstempel versehen. Über PCI-Express werden die gewonnenen Daten dann im bis zu 4 GB großen Speicher des UAD3+ abgelegt. Die Verbindung zwischen dem Grundgerät und dem Pod mittels PCI-Express sichert übrigens nicht nur den erforderlichen hohen Datendurchsatz. Mittels dieser Lösung lassen sich auch Leitungslängen von mehreren Metern realisieren.

passend zum Thema

Trace-Daten
Bild 3. Aus den Trace-Daten lassen sich allerlei Auswertungen erzeugen, die für das Debugging auf Systemebene nützlich sind.
© PLS Programmierbare Logik & Systeme GmbH

Auslesen lassen sich die Daten anschließend über Gigabit-Ethernet, FireWire 800 oder USB 2.0 mit Hilfe der Universal Debug Engine (UDE) von PLS, einer modularen Software-Lösung, die in Abhängigkeit von der jeweiligen Applikation für eine effiziente Aufbereitung und zweckmäßige Präsentation der Trace-Daten sorgt.

Die Bearbeitung der Trace-Daten erfolgt in architektur- und protokollspezifischen Trace-Add-ons, die Ergebnisse der Trace-Datendekodierung und -aufbereitung über eine für die restlichen Programmkomponenten einheitliche Schnittstelle zur Verfügung stellen. Damit kann nicht nur das klassische Trace-Window die Ergebnisse nutzen, auch Funktionen wie Code-Coverage-Anzeige im Programm-Window, grafische Profiling-Analyse oder ein Ausführungs-Sequenz-Diagramm dienen den Trace-Add-Ons als Datenquelle (Bild 3).


  1. Der gläserne Mikrocontroller
  2. Von Stop-and-Go bis zum Trace
  3. Sehen, wo es hakt

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu pls Programmierbare Logik & Systeme GmbH

Weitere Artikel zu Mikrocontroller