Ich arbeitete an der gleichen Sache. Hier, wie ich es gemacht habe (nicht der GUI-Teil).
Sie können OpenOCD und gdb zum Debuggen/Anzeigen von Variablen verwenden.
Starten Sie einen OpenOCD-Server:
sudo openocd -f /usr/local/share/openocd/scripts/board/st_nucleo_f4.cfg -c "init"
Ich nehme an, Sie arbeiten mit einem STM32F4DISCOVERY (STM32F407VG), also sollten Sie die stm32f4discovery.cfg
Konfigurationsdatei verwenden.
Starten Sie nun gdb in einem anderen Terminal:
sudo gdb
Stellen Sie gdb Ihre Objektdatei (.elf/.axf) zur Verfügung, die Debug-Informationen, Symbole usw. enthält. Wenn Sie Keil uVision (MDK-ARM) verwenden, finden Sie die .axf-Datei im Ordner myProject/MDK-ARM/myProject/
. Wenn Sie GNU Arm Embedded Toolchain verwenden, sollten Sie Ihr Programm als Debug-Programm kompilieren, damit der Compiler eine .elf-Datei im ../Build/
Ordner generiert.
In der gdb-Konsole:
file ~/myProject/Build/myProgram.axf
Jetzt können Sie Ihre Variablen mit gdb nach Namen überwachen, da Sie die Objektdatei bereitgestellt haben.
Verbinden Sie sich von gdb mit dem OpenOCD-Server:
target remote localhost:3333
Sie können nun Ihre Variablen aus gdb mit sehen p myVar1
, den Typ der Variablen mit ptype myVar1
und die Adresse der Variablen mit info address myVar1
Befehlen:
p myVar1
Hier ist ein einfaches Skript, das alle 1 Sekunde die gewünschten Variablen ausgibt. Sie können das Skript ausführen mit gdb --batch --command=script.gdb
:
shell sudo openocd -f /usr/local/share/openocd/scripts/board/st_nucleo_f4.cfg -c "init" &> /dev/null &
file b/BUILD/NUCLEO_F446RE/GCC_ARM/b.elf
target remote localhost:3333
#monitor reset run
display myVar1
display myVar2
while(1)
display
shell sleep 1s
Code auf STM32:
uint32_t myVar1 = 0;
uint32_t myVar2 = 0;
int main(void){
while(1){
myVar1 +=1;
myVar2 +=2;
}
}
Benutzer103380
JimFred