Ist es möglich, Druckströme zum Debugger im Atmel-System umzuleiten?

Ist es möglich, es so zu konfigurieren stderrund / oder stdoutzu machen, dass beim printf()Aufruf von a die Zeichenfolge in der Debug-Konsole in Atmel Studio angezeigt wird?

Ich weiß, dass es möglich ist, alles so einzurichten, dass printf()der UART oder ein LCD oder etwas anderes verwendet wird.

Ich habe Hinweise darauf gesehen, dass dies mit AVR32-Chips und JTAGICE2-Debuggern möglich war, aber das war damals, als es AVR Studio und AVR32 Studio als separate IDEs, Toolchains, Debugging-Hardware usw. gab. Aus Gründen der Genauigkeit möchte ich dies tun dies mit einem AVR 8-Bit Chip und einem ATMEL ICE (dem Nachfolger des JTAGICE3) Debuggers. Ich arbeite mit PDI, aber ein alternatives Kommunikationsprotokoll (wie JTAG) wäre auch akzeptabel.

Antworten (1)

Sie können Nachrichten und Werte mit Atmel Studio 7 in das Ausgabefenster ausgeben (es funktioniert möglicherweise mit anderen Versionen, aber ich verwende Version 7.0.1006 und verwende Atmel ICE), indem Sie Folgendes tun:

  1. Erstellen Sie einen normalen Haltepunkt, wo Sie die Ausgabe haben möchten.
  2. Klicken Sie mit der rechten Maustaste auf den Haltepunkt und wählen Sie "Aktionen".
  3. Ein Fenster wird unter der Haltepunktlinie angezeigt, wenn das Kontrollkästchen "Aktionen" nicht bereits aktiviert ist, aktivieren Sie es, indem Sie auf das Kontrollkästchen klicken, aber es sollte wegen Schritt 2 sein.
  4. Es gibt ein Textfeld mit der Bezeichnung "Nachricht im Ausgabefenster protokollieren", geben Sie ein, was Sie ausgeben möchten. Dies funktioniert mit Klartext, wenn Sie nur so etwas wie "eingegebene Funktion a" anzeigen oder einfach den gewünschten Wert in Klammern setzen möchten. Ein Beispiel für die Ausgabe eines Variablenwerts: „Der Wert von x ist {x}“, wobei x der Variablenname ist.
  5. Wenn Sie nicht möchten, dass die Ausführung angehalten wird, aktivieren Sie "Ausführung fortsetzen" und das Programm wird nicht wirklich am Haltepunkt anhalten (wie es normalerweise der Fall wäre).

Achten Sie auch auf die Optimierung! Möglicherweise müssen Sie es vollständig deaktivieren, damit Ihr Debug-Build bestimmte Werte oder Zustände sehen kann.

Diese Lösung hat einen Nachteil. Wenn Sie einen Einzelschritt ausführen, setzt der Debugger einen temporären Haltepunkt (BP) in der nächsten Codezeile und startet die CPU. Wenn Sie einen Funktionsaufruf überspringen, der den vorbereiteten BP passiert, löscht der Debugger den temporären BP, nachdem er den vorbereiteten BP erreicht hat. Der Effekt ist, dass die Ausführung nicht bei der nächsten Zeile stoppt. Einzelschritte sind also nicht mehr zuverlässig. Einen besseren Vorschlag habe ich leider nicht.