¿Cómo visualizo las variables en OpenSTM32? ¿Es como en Open STM Studio?

2

Estoy programando una placa STM32F407 estándar en Linux. Y estoy buscando una manera de visualizar las variables en un gráfico en un entorno OpenSTM32.

¿Cómo visualizo las variables en OpenSTM32? ¿Es como en Open STM Studio?

    

1 respuesta

1

Estaba trabajando en lo mismo. Aquí cómo lo hice (no la parte GUI).

Puedes usar OpenOCD y gdb para depurar / ver variables.

Iniciar 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 el archivo de configuración stm32f4discovery.cfg .

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 carpeta ../Build/ .

En la consola gdb:

file ~/myProject/Build/myProgram.axf

Ahora puede controlar sus variables por nombre con gdb ya que proporcionó el archivo de objeto.

Conéctate al servidor OpenOCD desde gdb:

target remote localhost:3333

Ahora puede ver sus variables desde gdb con p myVar1 , el tipo de la variable con ptype myVar1 y la dirección de la variable con los comandos info address myVar1 :

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;
    }
}
    
respondido por el pmundt

Lea otras preguntas en las etiquetas