Estaba trabajando en lo mismo. Aquí cómo lo hice (no la parte de la GUI).
Puede usar OpenOCD y gdb para depurar/ver variables.
Inicie un servidor OpenOCD:
sudo openocd -f /usr/local/share/openocd/scripts/board/st_nucleo_f4.cfg -c "init"
Supongo que está trabajando con un STM32F4DISCOVERY (STM32F407VG), por lo que debe usar stm32f4discovery.cfg
el archivo de configuración.
Ahora inicie gdb en otra terminal:
sudo gdb
Proporcione su archivo de objeto (.elf/.axf) a gdb que contiene información de depuración, símbolos, etc. Si está utilizando Keil uVision (MDK-ARM), puede encontrar el archivo .axf en la carpeta myProject/MDK-ARM/myProject/
. Si está utilizando GNU Arm Embedded Toolchain, debe compilar su programa como un programa de depuración, de modo que el compilador genere un archivo .elf en la ../Build/
carpeta.
En la consola gdb:
file ~/myProject/Build/myProgram.axf
Ahora puede monitorear sus variables por nombre con gdb ya que proporcionó el archivo de objeto.
Conéctese al servidor OpenOCD desde gdb:
target remote localhost:3333
Ahora puede ver sus variables de gdb con p myVar1
, el tipo de variable con ptype myVar1
y la dirección de la variable con info address myVar1
comandos:
p myVar1
Aquí hay un script simple que imprime las variables deseadas cada 1 segundo. Puede ejecutar el script con 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
Código en STM32:
uint32_t myVar1 = 0;
uint32_t myVar2 = 0;
int main(void){
while(1){
myVar1 +=1;
myVar2 +=2;
}
}
usuario103380
JimFred