»TRACE32« von Lauterbach

Effizientes Debugging der Xilinx-»Zynq-7000«-Familie

28. November 2012, 13:24 Uhr | Norbert Weiss, Lauterbach GmbH
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Debug-Konzept für AMP-Systeme

In AMP-Systemen werden jedem Core bestimmte Aufgaben fest zugeteilt. Die Entscheidung über die Zuteilung wird in der Designphase des Systems getroffen. Beim Debugging von AMP-Systemen wird für jeden Core eine eigene TRACE32-Instanz gestartet (Bild 4). Jeder Core arbeitet einen separaten Teil der Applikation ab. Das heißt, die Symbol- und Debug-Informationen sind größtenteils exklusiv dem jeweiligen Core zugeordnet. Um das Zusammenspiel der Cores zu testen, muss jedoch auch die Möglichkeit für ein Core-übergreifendes Debugging bestehen. Dafür ist auf dem Zynq-7000 ein Cross-Trigger-System implementiert, welches das synchrone Debugging beider Cores ermöglicht: Hält ein Core an einem Breakpoint, wird der andere Core synchron dazu gestoppt. Auf diese Weise lässt sich der Kontext der einzelnen Cores an einer ausgewählten Programmstelle gut visualisieren.

Debug-Konzept für SMP-Systeme

Im Gegensatz zu AMP-Systemen, bei denen genau definiert ist, welche Aufgaben von welchem Core bearbeitet werden, wird diese Zuordnung bei SMP-Systemen nicht mehr vom System-Designer, sondern von einem SMP-Betriebssystem übernommen. Damit die Aufgaben frei jedem Core zugeteilt werden können, müssen alle Cores wie beim Zynq-7000 vom gleichen Typ sein. Die Aufgabenzuteilung erfolgt dynamisch, das heißt abhängig vom aktuellen Systemzustand. Eine Aufgabeneinheit, die ein Betriebssystem zuteilen kann, wird als Task oder Thread bezeichnet. Eine zur Bearbeitung anstehende Task wird, vereinfacht gesagt, dem Core zugeteilt, der gerade frei ist.

Für das Debugging von SMP-Systemen wird nur eine einzige TRACE32-Instanz geöffnet, von der aus alle Cores kontrolliert werden (Bild 5). Da für den Entwickler das Debugging einer einzelnen Task im Vordergrund steht, visualisiert die TRACE32-Bedienoberfläche den Zustand des Gesamtsystems immer aus Sicht eines einzelnen Tasks bzw. aus Sicht des Cores, auf dem diese Task gerade läuft. Selbstverständlich lässt sich diese Visualisierung auch auf andere Tasks bzw. Cores umschalten.

TRACE32 übernimmt eine ähnliche Funktion wie das SMP-Betriebssystem. Es organisiert das Debuggen aller Cores, ohne dass sich der Entwickler um die Details des SMP-Systems kümmern muss. Wird beispielsweise ein Breakpoint gesetzt, so sorgt TRACE32 dafür, dass dieser in beiden Cores eingetragen wird. Dies ist notwendig, weil zum Zeitpunkt des Breakpoint-Setzens noch nicht klar ist, welcher Core den Programmteil mit dem Breakpoint ausführen wird. Hält ein Core dann am Breakpoint, wird automatisch auch der zweite Core gestoppt. Die Anzeige in TRACE32 wechselt auf die Task bzw. den Core, bei dem der Breakpoint zugeschlagen hat. Wird das Programm wieder gestartet, laufen beide Cores gemeinsam los. Das Debuggen von SMP-Systemen mit TRACE32 ist einfach. Nachdem eine TRACE32-Instanz gestartet und für das SMP-System konfiguriert wurde, arbeitet man damit im Wesentlichen genauso, als würde man nur einen Core debuggen.

Trace-Konzept für AMP-Systeme

Weil das Debugging der einzelnen Cores eines AMP-Systems über separate TRACE32-Instanzen durchgeführt wird, erfolgt auch die Darstellung der Trace-Informationen in den einzelnen Bedienoberflächen. AMP-Systeme können aus verschiedenartigen Cores bestehen, deshalb kommen unter Umständen unterschiedliche Trace-Protokolle zum Einsatz. Die einzelnen Protokolle lassen sich durch ihre Aufteilung in die einzelnen Bedienoberflächen separat dekodieren und für die Auswertung aufbereiten.

Um die Zusammenarbeit der Cores zu testen und komplexe Systemfehler schnell zu finden, ist es möglich, die einzelnen Trace-Darstellungen in ihrem zeitlichen Bezug zueinander darzustellen. »TRACE32-PowerTrace« stellt dafür eine gemeinsame Zeitbasis zur Verfügung. Diese erlaubt es, in einer Bedienoberfläche einen Zeitpunkt in der Trace-Darstellung auszuwählen und in der anderen Bedienoberfläche genau den Befehl zu sehen, der dort zum etwa gleichen Zeitpunkt ausgeführt wurde (Bild 6).

Trace-Konzept für SMP-Systeme

Obwohl die Informationen zum Programmablauf in einem SMP-System für alle Cores in einem gemeinsamen Trace-Speicher abgelegt werden, ist es von Vorteil, dass TRACE32 unterschiedliche Sichtweisen auf diese Information anbietet. Für die Fehlersuche in einer Task bzw. für task-spezifische Laufzeitmessungen lässt sich die Trace-Information gezielt für eine einzelne Task darstellen.

Stehen Fragestellungen wie »Von welchen Cores wurde mein Task bearbeitet?« oder »Wie sieht die Laufzeit-Auslastung meiner Cores aus?« im Vordergrund, ist es zweckdienlich, die Trace-Information für beide Cores gemeinsam darzustellen (Bild 7). Die Core-Nummer (0 oder 1) gibt hier an, auf welchem Core die einzelnen Programmabschnitte gelaufen sind.

Untersucht man das SMP-System als Ganzes, hat man unter Umständen kein Interesse daran, zu erfahren, von welchem Core welche Task bzw. welcher Programmabschnitt bearbeitet wurde. Auch für diese Sichtweise auf das SMP-System bietet TRACE32 Darstellungsoptionen. (nw) n

passend zum Thema


  1. Effizientes Debugging der Xilinx-»Zynq-7000«-Familie
  2. Debug-Konzept für AMP-Systeme

Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Lauterbach GmbH