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

Estoy programando una placa estándar STM32F407 bajo Linux. Y estoy buscando una forma 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?

Ingrese la descripción de la imagen aquí

stackoverflow.com podría ser un mejor lugar para hacer esta pregunta, ya que está preguntando cómo programar algo en lugar de algo relacionado con el hardware .
Este openstm32.org/forumthread269 dice que la actualización de variables en vivo aún no se ha implementado. Una solución (o truco) es escribir una aplicación que haga un telnet en OpenOcd para leer (o escribir) una estructura de datos en una ubicación de memoria fija.

Respuestas (1)

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.cfgel 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 myVar1y la dirección de la variable con info address myVar1comandos:

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;
    }
}
No ejecute openocd o gdb como root. Use una regla udev o lo que sea para otorgar acceso a su usuario habitual al adaptador de depuración. También es probable que desee una versión de destino de gdb, no la del host.