Der Applikation auf die Finger geschaut

Software-Debugging auf ARM-Cortex-M3/M4-basierten Bausteinen

4. Oktober 2010, 11:51 Uhr | Von Tomas Hedqvist
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Trace: den internen Abläufen auf der Spur

Einer der vier Watchpoints kann auch zum Triggern der ETM verwendet werden. Dies ist beim Debuggen von Anwendungen nützlich, die längere Zeit laufen. Damit lassen sich nicht nur einfache Trace-Start- und -Stop-Breakpoints setzen, die das Sammeln von Trace-Daten bei bestimmten Adressen starten und stoppen - es lassen sich auch komplexe Trace-Start- und -Stop-Bedingungen festlegen, die z.B. dann eintreten, wenn eine Variable einen bestimmten Wert erreicht.

DWT bietet auch eine Interrupt-Trace-Funktion. Tritt während eines Interrupts eine Änderung auf - also wenn die Anwendung in einen Interrupt-Zustand eintritt oder diesen verlässt - wird ein Event ausgelöst und ein ITM-Paket generiert. Das Paket wird über die ITM mit einem Zeitstempel versehen und über den SWO an den Debugger weitergeleitet, der die Events festhält und sie in Echtzeit darstellt. Damit ergibt sich eine gute Übersicht über die Interrupt-Aktivität innerhalb der Applikation.

Die DWT enthält einen Program-Counter-Sampler, der das Programmzähler-Register in regelmäßigen Abständen abfragt. Da diese Abfrage die meisten der ablaufenden Befehle verpasst, steht darüber keine Komplettansicht der Applikation zur Verfügung. Der PC-Sampler ist aber imstande, genügend Informationen darüber zu geben, in welchen Funktionen die Applikationen ihre Zeit verbracht hat.

Embedded Trace Macrocell: Königsdisziplin des On-Chip-Debugging

Die durch SWD zugängliche Debug-Funktion ist sehr nützlich und für die meisten Embedded-Projekte ausreichend. Manchmal ist aber ein leistungsfähigerer Debug-Modus erforderlich, um selbst schwierigste Probleme zu beseitigen. Dann ist ein Full Instruction Trace erforderlich, den die ETM-Einheit über einen 4-bit-Highspeed-Trace-Bus in Echtzeit bietet. Notwendigerweise sind die ETM-Daten komprimiert.

ETM wird nur in leistungsfähigere Bausteine implementiert, die diese Cores verwenden. Im Gegensatz zum Event Trace, der durch DWT und ITM bereitgestellt wird, erfährt der Entwickler mit der ETM, was innerhalb der Applikation geschieht, bevor ein Interrupt eintrifft, was während der ISR-Ausführung passiert und was nach dem Verlassen des Interrupts geschieht. Der genaue Verlauf der Anwendung wird ersichtlich, genauso der Weg, wie die Anwendung zu diesem Verlauf gelangt. Kurz gesagt, besteht volle Einsichtnahme in das Applikationsverhalten in Echtzeit, ohne dabei intrusiv zu sein.

Der einzige Nachteil ist, dass eine spezielle Trace-Debug-Probe erforderlich ist, um die ETM-Funktionen zu nutzen. Diese ist aber bei weitem nicht so teuer wie ein komplettes In-Circuit-Emulatorsystem.

Einige Bausteine bieten einen Embedded Trace Buffer (ETB), der in die MCU integriert ist und die gleiche Funktion bietet wie eine externe Trace Probe -- nur mit einem kleineren Puffer. Beim Einsatz des ETB müssen die Trace-Trigger sehr sorgfältig gesetzt werden, da sonst nicht so viele Befehle aufgezeichnet werden können, wie wenn der Puffer in einer externen Probe wäre. Der Vorteil ist, dass der ETB mit einer kostengünstigen Standard-JTAG-Probe verwendet werden kann und trotzdem Sequenzen eines kompletten Instruction Trace bereitstellt.

passend zum Thema

Der Interrupt-Graph, die Visualisieerung des Aufruf-Stacks und der Ausdruck der Variablen im Zeitfenster
Bild 2. Der Interrupt-Graph, die Visualisieerung des Aufruf-Stacks und der Ausdruck der Variablen im Zeitfenster der IAR Embedded Workbench.
© IAR

Die erfassten Trace-Daten dienen zur Darstellung des Applikationsverhaltens in mehreren Ansichten. Die IAR Embedded Workbench bietet eine nützliche Übersicht des Aufruf-Stacks, indem verschachtelte Funktionsaufrufe über der Zeit dargestellt werden (Bild 2).

Trace-Daten dienen auch zur Analyse einer Applikation. So basiert z.B. das Function Profiling, das mit SWD/SWO über statistisches Sampling des Program Counters durchgeführt wird, auf der kompletten Ausführungshistorie - wenn die ETM zum Einsatz kommt. Durch die Periodizität ergibt sich eine höhere Genauigkeit, und systematische Fehler lassen sich vermeiden.

Bausteine auf der Basis des ARM-Cortex-M3-/M4-Cores bieten nützliche On-Chip-Logik, die zusammen mit einem leistungsfähigen Tool-Paket wie der IAR Embedded Workbench das Debugging bei der Embedded-System-Applikationsentwicklung einfacher, schneller und genauer gestalten.

 

Der Autor:

Tomas Hedqvist
arbeitet seit fünf Jahren bei IAR. Anfangs war er Global Account Manager, inzwischen bekleidet er die Funktion des Produkt Marketing Manager. Er besuchte die Universität von Uppsala und schloss sein Studium mit einem Master in Betriebswirtschaft sowie einem Master in Ingenieurwesen ab.

Tomas.Hedqvist@iar.com



  1. Software-Debugging auf ARM-Cortex-M3/M4-basierten Bausteinen
  2. Trace: den internen Abläufen auf der Spur

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu IAR Systems GmbH