Software-Entwicklung am offenen Herz

Debugging mit Cortex-M3-Mikrocontrollern

27. Mai 2010, 11:43 Uhr | Von Reinhard Keil
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Live-Zugriff auf den Speicher

Bild 1
Bild 1. Die Komponenten des RealView Microcontroller Development Kit.
© Elektronik

Mikrocontroller auf der Basis von ARM-Prozessoren werden von der Entwicklungs-Tool-Industrie in großem Umfang unterstützt. Zum Beispiel bietet das ARM RealView Microcontroller Development Kit (MDK) vonARM/Keil bausteinspezifischen Support für mehr als 260 Standard-Mikrocontroller. Das Kit kombiniert den ARM-RealView-Compiler mit dem μVision Debugger/IDE und dem RTXEchtzeit-Kernel (Bild 1).

Der μVision Debugger wird über den USB-JTAG-Adapter ULINK2 an Mikrocontroller auf Basis des Cortex-M3-Prozessors angeschlossen (Bild 2). Der ULINK2 ermöglicht die Flash-Programmierung sowie das Hardware-Debugging und unterstützt sämtliche CoreSight-Betriebsarten. Mit der Kombination aus MDK undULINK2 erhält der Anwender eine komplette Software-Entwicklungsumgebung für Projekte auf Cortex-M3-Basis.

passend zum Thema

Bild 2
Bild 2. JTAG-Adapter ULINK2, angeschlossen an die Ziel-Hardware.
© Elektronik

Der μVision Debugger kann Speicherinhalte und Variablen in mehreren Daten-Formaten darstellen.

Da Speicherinhalte und Variablen auch während der Programmausführung laufend aktualisiert werden, hat der Anwender stets den Überblick über den jeweiligen Programmstatus. Zusätzlich können Breakpoints gesetzt werden, deren Triggerung beim Zugriff auf bestimmte Variable mit oder ohne Wert erfolgt. 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.
Bild 4
Bild 3. Das Tracing zeichnet z.B. auf,wie sich Variablen ändern. In einer Logikanalysator- Darstellung kann der Variableninhalt visualiert werden.
© Elektronik

User-Trace-Daten, die über 32ITM-Register (Instrumentation Trace Macrocell) ausgegeben werden können und für die Timing-Analyse oder einfaches Debugging nach der printf-Methode dienen können. 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, das außerdem zusätzliche Filter für die Datenausgabe bereithält.

Bild 3 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 „CodeShow“ der Quellcode darstellen, der die Variablenmodifikation anstößt.

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.

Bild 5
Bild 4: Der Event-Counters-Dialog gibt Auskunft über Timing- Statistiken.
© Elektronik

Der in Bild 4 gezeigte Event-Counters-Dialog gibt neben der Information über die Gesamt-Verarbeitungszeitauch 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. 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.

Bild 6
Bild 5. printf-Ausgabe mit Hilfe der ITMRegister.
© Elektronik

Im ITM-Viewer-Fenster ist die Übertragungvon ASCII-Textstrings über die ITM-Register möglich. Bild 5 zeigt das Beispiel eines Debuggings nach dem printf-Prinzip, das lediglich die Implementierung der folgendenRoutine für die serielle Ausgabe erfordert:

int SendChar (int ch)

{

/* Write serial output toITM */

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. Die Trace-Informationen, die über den Serial Wire Viewer ausgegeben werden, lassen sich mittels eines Konfigurations-Dialogs selektiv freigeben.Die selektive Trace-Ausgabe stellt einerseits gezielt die zum Analysieren des anstehenden Problems benötigten Informationen zur Verfügung und reduziert andererseits den Bandbreitenbedarf. Indem sie mit nur drei I/O-Pins eine umfassende Debug- und Trace-Verbindung zur Verfügung stellt, erfüllt die CoreSight-Technologie somit die Anforderungen bei der Entwicklung von Mikrocontroller-Software.


  1. Debugging mit Cortex-M3-Mikrocontrollern
  2. Live-Zugriff auf den Speicher

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu ARM Germany GmbH