Ich programmiere ein STM32 Cortex M0 Discovery Board (32F0308DISCOVERY) mit OpenOCD, arm-none-eabi-gcc und gdb. Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, Debug-Meldungen über SWD zu protokollieren. Ich habe über die Semihosting-Option gelesen, aber dies erfordert anscheinend das Einlesen von newlib oder anderen großen Bibliotheken. (Es sind nur 64-KByte-Flash-Speicher verfügbar.) Gibt es eine einfachere Möglichkeit, Text über SWD zu protokollieren, oder ist die Verwendung des UART die einzige praktikable Option?
15
Antworten:
Danke für die Hinweise, Markt und Chris-Stratton. Die Semihosting-Option erwies sich als recht einfach. Ich konnte die Quelle für einige einfache Protokollierungsroutinen finden, die Nachrichten an die OpenOCD-Konsole senden können. Ich werde sie hier posten, da (i) sie einige Modifikationen für die Arbeit benötigten und (ii) ich denke, dass diese Informationen für Leute, die gerade erst anfangen, nicht sehr einfach zu finden sind.
Erstens kann der D-Code hier leicht angepasst werden, um die folgende C-Funktion bereitzustellen:
Beispiel für den Aufruf von send_command, um einen String in die OpenOCD-Konsole zu schreiben:
Zweitens, da die putchar Funktion in den Kommentaren hier funktioniert gut, außer dass ich ein ‚#‘ hinzuzufügen , bevor 0x03:
Um die Ausgabe dieser Funktionen zu betrachten, starte ich zuerst OpenOCD und verbinde mich dann mit arm-none-eabi-gdb wie folgt:
Beachten Sie, dass die Meldungen im Standard des OpenOCD-Prozesses und nicht in der GDB-Konsole angezeigt werden.
quelle
putchar
so einfach schreiben wievoid putchar(char c) { send_command(3,&c); }