Bildergalerie
Bild 1: Coresight-Funktionen in einem Cortex-M3- oder M4-Mikrocontroller geben dem Entwickler sehr weitreichende Kon- trolle über die Programmausführung, Daten  und alle Ereignisse.
Bild 2: Ulink Pro im Betrieb: An einem Debug- und  ETM-Anschluss leitet das Gerät in Echtzeit zahlreiche  Informationen an den Entwicklungsrechner weiter.
Bild 3: Die Zeitanalyse des Anwenderprogramms per Performance-Analyzer gibt die realen Daten aus einem Lauf auf dem Mikrocontroller wieder und zeigt die Anteile einzelner Funktionen.
Bild 4: Beim Multicore-Debugging eines NXP LPC4000-Systems mit Ulink Pro und µVision nutzt der Anwender zwei Instanzen des Debuggers, die mit jeweils einem Prozessorkern verbunden sind. Beide Instanzen der Software teilen sich die gemeinsame Debug-Schnitt

ARM stattet seine Cortex-M-Prozessoren mit der Coresight-Technologie aus, die Entwicklern beim lästigen Debugging und Tracen von Software unterstützt: Jeder Cortex-M3- oder Cortex-M4-basierende Mikrocontroller erlaubt damit, zusätzlich zum normalen Run-Control-Debugging, Speicherzugriff während der Programmausführung (On-the-Fly), Daten- und Event-Tracing sowie Code-Instrumentierung.

Viele Hersteller statten ihre Cortex-M-Mikrocontroller außerdem mit einer Embedded-Trace-Macrocell aus (ETM), die auf Wunsch die komplette Befehlsausführung aufzeichnet. Mit diesem Befehls-Trace lassen sich sowohl sporadische Programmfehler finden, als auch eine komplette Code-Coverage- und Zeitanalysen durchführen. Coresight unterstützt zudem Multiprozessor-Systeme und zusammen mit Entwicklungswerkzeugen nach neuestem Stand der Technik gelingen Software-Verifikation und -Debugging viel schneller als bisher.

Fehlersuche in Mikrocontroller-Software

Bevor es On-Chip-Debugging gab, setzten viele Softwareentwickler teure In-Circuit-Emulatoren (ICE) zum Applikationstest ein. Diese Emulatoren wurden über komplexe Adapter angeschlossen und boten weitreichende Befehls- und Daten-Tracing-Fähigkeiten mit komplexen Triggerfunktionen. Typischerweise basierte ein ICE auf einem speziellen Bond-out-Chip, der vom Mikrocontroller aus der Serienproduktion abwich und sehr teuer war.

Da moderne Mikrocontroller mit hohen Taktraten arbeiten und in miniaturisierten Bauformen angeboten werden, scheitert die traditionelle ICE-Technologie. Viele Mikrocontroller verfügen heute daher über On-Chip-Debug-Logik, die meist jedoch nur Speicher- und Registerzugriffe sowie Programmausführung mit Breakpoints erlaubt. Die volle Leistungsfähigkeit der früheren ICE-Lösungen ist aber mit gewöhnlichen Cortex-M-Mikrocontrollern dank der Coresight-Debug-Technologie möglich (Bild 1).

Über einen konventionellen Jtag-Anschluss stellt die MCU bereits im Serial-Wire-Modus einen Daten- und Event-Trace zur Verfügung. Mit einem ETM-Anschluss, der nur fünf weitere Trace-Leitungen benötigt, kann der Chip auch den kompletten Befehls-Trace übertragen. ARM hat die Cortex-Debug- und -ETM-Anschlüsse standardisiert, wobei preisgünstige Miniatursteckverbinder zum Einsatz kommen.

Entwicklungswerkzeuge

Die Entwicklungstool-Industrie unterstützt ARM-basierende Mikrocontroller in großem Umfang. Zum Beispiel liefert Keil das Mikrocontroller-Development-Kit MDK mit spezifischem Support für mehr als 600 Standard-Mikrocontroller. Das MDK kombiniert ARM C/C++-Compiler, µVision IDE/Debugger und RTX RTOS in einer leistungsfähigen Entwicklungsumgebung. Mit dem USB-Jtag-Adapter Ulink Pro kann der Entwickler den vollen Funktionsumfang von Coresight nutzen.

Ulink Pro ist ein Streaming-Trace-Adapter, der die komplette Trace-Information eines Cortex-M-Mikrocontrollers lückenlos aufzeichnet. Das Gerät wird über USB mit dem Entwicklungsrechner verbunden (Bild 2) und kann sowohl den Serial-Wire-, als auch den ETM-Trace aufzeichnen.

Serial-Wire-Trace

Der Serial-Wire-Trace wird über die Cortex-M-Debug-Schnittstelle (mit zehn Pins) genutzt: Für Debug und Trace genügen drei Mikrocontroller-Pins. Damit ist Serial-Wire-Trace auch bei Mikrocontrollern mit wenigen I/O-Pins problemlos einsetzbar. Ulink Pro betreibt den Serial-Wire-Trace-Pin im so genannten Manchester-Modus, bei dem sich bis zu 100 MBit pro Sekunde aufzeichnen lassen. Diese Trace-Information zeigen die Debug-Fenster von µVision in Realzeit:

  • Trace-Window: Anzeige von PC-Samples sowie von Schreib- und Lese-Speicherzugriffen.
  • Debug (printf) Viewer: Instrumented Trace (ITM) mit einer „printf“-Funktion im Anwenderprogramm.
  • Exceptions-Window: Statistische Information der Ausführung von Exception- und Interrupt-Funktionen.
  • Event Counters: Indikatoren über Sleep- und Wait-States, die das Anwenderprogramm benötigt.
  • Logic Analyzer: Zeigt Werteveränderungen von bis zu vier Variablen grafisch an.
  • RTOS Event Viewer: Nutzt ITM, um die Task-Umschaltung des RTX RTOS anzuzeigen.

ETM-Trace

Für ETM-Trace ist die Cortex-M-Debug- und -ETM-Schnittstelle zuständig; sie verwendet 20 Pins. Zusätzlich zur Serial-Wire-Trace-Funktionalität stellen hier vier weitere Trace-Pins den gesamten Befehlsstrom zur Verfügung. Ulink Pro zeichnet alle Befehle lückenlos auf und bietet damit als einziger Adapter in dieser Preisklasse vollständige Code-Coverage einschlie?lich Branch- und Decision-Coverage. Damit kann der Entwickler überprüfen, ob bei einem Programmlauf alle Pfade im Quellcode vollständig ausgeführt wurden.

Tests dieser Art gewährleisten eine bessere Softwarequalität und sind daher Voraussetzung bei Sicherheitsstandards wie IEC61508 oder DO-178B. Der µVision Debugger zeigt Code-Coverage-Ergebnisse in einem Übersichts-Window, den C-Quellcode-Fenstern, sowie im Disassembly-Window an. Außerdem kann der Anwender Code-Coverage-Ergebnisse speichern und laden.

Zudem ermöglicht ETM-Trace es, das zeitliche Verhalten eines Anwenderprogramms zu analysieren. Da jede Befehlsausführung lückenlos aufgezeichnet ist, kann der µVision Debugger im Performance-Analyzer-Window (Bild 3) statistische Informationen der Programmausführung zeigen. Zeitinformation ist zudem für jede C-Source-Zeile und jeden Assembler-Befehl verfügbar. Mit dieser Information kann man beispielsweise einen Algorithmus optimieren und damit die Effizienz der Programme steigern.

Multiprozessor-Debugging

Die neue Mikrocontroller-Familie LPC4000 von NXP integriert neben einem Cortex-M4- auch einen Cortex-M0-Prozessor. Dieses asymmetrische Multiprozessorsystem stellt daher zusätzliche Anforderungen an die Entwicklungstools. In der Jtag-Betriebsart erlaubt Coresight die gleichzeitige Kommunikation mit den Debug- und Test-Interfaces der beiden Cortex-M-Prozessoren und der Ulink Pro Debug- und Trace-Adapter lässt sich gleichzeitig mit zwei unabhängigen Instanzen des µVision Debuggers betreiben (Bild 4). Der Systemprogrammierer kann so die Applikationssoftware der beiden Prozessoren analysieren und komplexe Inter-Prozessor-Kommunikationsfehler identifizieren und korrigieren. Sobald die Inter-Prozessor-Kommunikation fehlerlos funktioniert, kann der Entwickler den zweiten Prozessor wieder als Peripherie auffassen und lediglich mit einer Instanz des µVsion Debuggers arbeiten. Das Multi-Prozessor-Debugging des Ulink Pro ist übrigens nicht nur auf den NXP LPC4000 beschränkt, sondern eignet sich auch für Systeme, die mit mehreren einzelnen Mikrocontrollern bestückt sind.

Analyse am lebenden Objekt

Die Vorteile der Coresight-Technologie erlauben zusammen mit modernen Debug- und Analyse-Tools eine genaue und effektive Analyse der Programmausführung. Dabei werden auch Multiprozessorsysteme unterstützt. Mit Ulink Pro kann man das Anwenderprogramm detailliert verifizieren und optimieren. Zudem bieten µVision und Ulink Pro offene Schnittstellen, die zum Beispiel von Parasoft für automatisierten C/C++-Tests und von Hitex für Power-Scale zur Energieoptimierung genutzt werden.