Debugging mit Cortex-M3-Mikrocontrollern

31. Juli 2008, 15:11 Uhr |
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Trace-Ereignisse und Instrumentierungs-Trace-Register

Der Cortex-M3-Prozessor liefert Verarbeitungs-Statistiken, die Hilfestellung beim Ermitteln der Leistungsfähigkeit der jeweiligen Hard- und Software-Implementierung leisten. Der in Bild 5 gezeigte Event-Counters-Dialog gibt neben der Information über die Gesamt-Verarbeitungszeit auch die folgenden Detailangaben aus:

  • Zusätzliche, in Wait-States verbrachte Zyklen (beim Warten auf langsame Speicher),
  • Zusatzaufwand durch CPU-Exceptions,
  • Sleep- oder Idle-Phasen des Bausteins,
  • Load/Store-Einheiten und gefaltete Instruktionen zur Beschleunigung der Verarbeitung.

passend zum Thema

Die ITM-Einheit (Instrumentation Trace Macrocell) implementiert 32 Stimulus-Register, mit deren Hilfe die Ausgabe zusätzlicher Trace-Daten über den Serial Wire Viewer möglich ist. Der hierfür entstehende Mehraufwand in der Anwender-Applikation ist minimal, da lediglich ein Schreibzugriff auf ein ITM-Register erforderlich ist. Die ITM-Trace-Ausgabe kann optional mit Timing-Informationen versehen werden, sodass diese Code-Instrumentierung auch zum Analysieren von Verarbeitungszeiten herangezogen werden kann.

Die ITM-Einheit lässt sich für unterschiedliche Informationen nutzen. Im ITM-Viewer-Fenster ist die Übertragung von ASCII-Textstrings über die ITM-Register möglich. Bild 6 zeigt das Beispiel eines Debuggings nach dem printf-Prinzip, das lediglich die Implementierung der folgenden Routine für die serielle Ausgabe erfordert:

int SendChar (int ch)
{
/* Write serial output to ITM */
    while (ITM_Port32(0) == 0);
    ITM_Port8(0) = ch;
    return (ch);
}

Auf den Spuren der Interrupts

Durch Freigabe des Exception Tracing wird veranlasst, dass der Serial-Wire-Viewer-Ausgang Informationen über die Verarbeitung von Interrupt-Routinen in der Applikation ausgibt. Auch Angaben über die Zahl der Aufrufe, minimale und maximale Verarbeitungszeiten sowie minimale und maximale Zeitabstände zwischen Interrupt-Aufrufen lassen sich – mit Zeitstempeln versehen – ausgeben.

8140406_af_02.jpg
Bild 6. printf-Ausgabe mithilfe der ITM-Register.

Reinhard Keil
studierte Elektrotechnik an der Fachhochschule München. Anschließend war er als Software-Entwickler bei Siemens tätig. 1985 gründete er zusammen mit seinem Bruder die Keil Elektronik GmbH. Er ist Co-Entwickler des Keil-C51-Compilers, der die Grundlage für den weltweiten Erfolg von Keil Software ist. Nach der Übernahme von Keil Software durch ARM ist er jetzt Direktor für Microcontroller Development Tools bei ARM.

Reinhard.Keil@arm.com

Ein Beispiel hierzu:

BS write my_value

/* stop on write to my_value */

Der ULINK2 kann so programmiert werden, dass er den Ausgangspin des Serial Wire Viewer nutzt. In dieser Betriebsart kann der Anwender Trace-Informationen über folgende Abläufe erhalten:

  • Daten-Lese- und Schreibzugriffe auf ausgewählte Variablen (optional mit Zeitstempel und Programmzähler-Werten) können in einem Logikanalysator-Fenster überprüft werden.
  • Ereigniszähler geben Auskunft über die CPU-Zyklusstatistik, aus der wiederum die erforderlichen Wait-States oder Leerlaufzeiten des Bausteins abgelesen werden können.
  • Exception- und Interrupt-Verarbeitung mit Timing-Statistiken, die beim Optimieren der Interrupt-Funktionen helfen.
  • Periodisches Abfragen des Programmzählers zum Aufspüren des Punkts, an dem ein Programm in eine Endlosschleife gerät.
  • User-Trace-Daten, die über 32 ITM-Register (Instrumentation Trace Macrocell) ausgegeben werden können und für die Timing-Analyse oder einfaches Debugging nach der printf-Methode dienen können.

8140402_af_03.jpg
Bild 2. JTAG-Adapter ULINK2, angeschlossen an die Ziel-Hardware.

Der nicht-invasive Serial-Wire-Viewer-Modus kommt ohne Monitor-Software oder zusätzliche Wait-Zyklen der CPU aus. Um den Bandbreitenbedarf der Trace-Informationen zu reduzieren, kann die Datenerfassung selektiv aktiviert werden. Überprüfen lassen sich die erfassten Trace-Daten im μVision-Trace-Records-Fenster (Bild 3), das außerdem zusätzliche Filter für die Datenausgabe bereithält.

Bild 4 zeigt die typische Ausgabe des integrierten μVision-Logikanalysators, der Auskunft über Werteänderungen von bis zu vier ausgewählten Variablen über die Zeit gibt. Wenn Programmzählerstände in den Trace-Informationen enthalten sind, lässt sich durch Anklicken des Buttons „Code Show“ der Quellcode darstellen, der die Variablenmodifikation anstößt.

8140403_af_03.jpg
Bild 3. Trace-Records-Fenster zur selektiven Prüfung sämtlicher Trace-Informationen des Cortex-M3. Logikanalysator-Darstellung des Variablen-Tracings. Bild 4. Das Tracing zeichnet z.B. auf, wie sich Variablen ändern. In einer Logikanalysator-Darstel
8140404_af_03.jpg
Bild 3. Trace-Records-Fenster zur selektiven Prüfung sämtlicher Trace-Informationen des Cortex-M3. Logikanalysator-Darstellung des Variablen-Tracings. Bild 4. Das Tracing zeichnet z.B. auf, wie sich Variablen ändern. In einer Logikanalysator-Darstel
8140405_af_03.jpg
Bild 3. Trace-Records-Fenster zur selektiven Prüfung sämtlicher Trace-Informationen des Cortex-M3. Logikanalysator-Darstellung des Variablen-Tracings. Bild 4. Das Tracing zeichnet z.B. auf, wie sich Variablen ändern. In einer Logikanalysator-Darstel

  1. Debugging mit Cortex-M3-Mikrocontrollern
  2. Trace-Ereignisse und Instrumentierungs-Trace-Register
  3. Die On-Chip-Debug-Technologie von ARM

Jetzt kostenfreie Newsletter bestellen!