Was ist ein MCU-Programm-Trace?

Ich habe an einigen Stellen über Atmels Unterstützung von Programmablaufverfolgungen auf ihren High-End-Debuggern/MCUs gelesen. Es scheint so zu sein, dass einige der AVR32-Prozessoren vom AVROne 'verfolgt' werden können! Programmierer/Debugger. Siehe hier oder dieses PDF für Erwähnungen der Funktion.

Anfangs dachte ich, dies sei eine atmel-spezifische Funktion, aber nachdem ich mehr gelesen habe, scheint es, dass ihre Nanotrace-Implementierung atmel-spezifisch ist, während das Konzept einer Ablaufverfolgung vielen High-End-Mikrocontrollern gemeinsam ist.

Könnte mir jemand erklären, was das ist, warum es nützlicher wäre als herkömmliche Debugging-Techniken wie das Protokollieren von Debugging über UART oder Stepping auf Befehlsebene, und einige Ressourcen zur Verwendung einer solchen Funktion bereitstellen? Es ist mir nicht so wichtig, ob die Ressourcen für die von mir erwähnten Atmel-Chips bestimmt sind, da ich nicht vorhabe, das Feature in naher Zukunft tatsächlich zu verwenden, ich möchte nur informiert werden und wissen, was es kann.

Antworten (2)

Wenn Sie ein Programm verfolgen, zeichnet der Debugger Sprünge und Verzweigungen auf, während das Programm ausgeführt wird. Das heißt, wenn Sie das Programm stoppen oder es einen Haltepunkt erreicht, können Sie herausfinden, wie das Programm an diesen Punkt gelangt ist. Einige Debugger können auch Daten verfolgen, was bedeutet, dass Sie den historischen Inhalt von Variablen sehen können, nicht nur den aktuellen Wert. Beim "normalen" Debuggen können Sie also sehen, dass das Programm wegen eines "Divide by Zero"-Bugs in Zeile 432 abgestürzt ist, aber beim Tracing können Sie sehen, dass Zeile 432 ausgeführt wurde, weil der Test in Zeile 411 wahr war und die Verzweigung in 422 nicht genommen wurde und dass die Variable n 12 und 13 war, bevor sie schließlich auf Null gesetzt wurde.

Der NanoTrace ist wie ein normaler Trace, der anstelle des AUX-Ports in den On-Chip-Speicher ausgibt, sodass Sie ihn mit einem kostengünstigen (langsamen) Debugger auslesen können. Dadurch können Sie zwar weniger (ca. 550 US-Dollar) für den Debugger ausgeben, es verlangsamt jedoch den Betrieb des Ziel-Mikrocontrollers . Dies wird nur dann wirklich zu einem Problem, wenn Sie versuchen, einen zeitkritischen Vorgang zu debuggen. Für die meisten Bastler ist das nie ein Problem.

Dies wäre jedoch schneller als das Protokollieren von Debugging über UART, und das Stepping auf Befehlsebene geht nicht wirklich in den Vergleich ein (obwohl es normalerweise auch über die JTAG-Schnittstelle erfolgt).

Im Grunde ist es ein gemeinsames Merkmal von Mikrocontrollern mit einem ausgefallenen Namen.

Meine Frage bezog sich also nicht speziell auf Nanotrace. Ich möchte wissen, was ein "normaler Trace" genau kann und wann Sie ihn verwenden würden. Welche Art von Informationen können Sie während einer Ablaufverfolgung an den AUX-Port "ausgeben", die für das Debugging hilfreich wären?
Ein Trace ist wie ein Kommunikationskanal mit dem Mikrocontroller. Es kann verwendet werden, um printf-Anweisungen im Mikrocontroller-Code zu erstellen, die während des Debuggens von der IDE empfangen werden. Es funktioniert auch andersherum, Sie können die Werte einiger Register über die Debug-Schnittstelle ändern. Im Grunde macht es den Debug-Prozess weniger zu einem "Ok, es ist geschafft, wie ist es gelaufen?" und eher ein "wie läuft es in diesem Augenblick?". Hier gibt es ein bisschen mehr Informationen - electronicdesign.com/embedded/…