En anteriores post referentes al uso de OpenOCD nos dimos cuenta, que en lugar de pasar comandos al momento de invocarlo en la terminal, decidimos crear un archivo especial con terminacion .cfg que contenia dichos comandos y de esa manera nos ahorraria tener que esribirlos continuamente.

Bueno pues con el uso de gdb es probable que tambien hayas notado el uso de ciertos comandos que repetimos en cada proyecto y muy probablemente te estes preguntando si se podra haser lo mismo que con OpenOCD y de ese modo evitar la fatiga.

Recordemos un poco el anterior post de Semihosting. Una vez ya compilado nuestro programa y conectados a la tarjeta con OpenOCD, era el turno de gdb.

Una manera alterna que pudimos aver empleado al momento de invocar gdb fue la siguiente

1
arm-none-eabi-gdb -ex "target remote localhost:3333" -ex "mon arm semihosting enable" -ex "mon reset halt" Output/test.elf

Como puedes ver en lugar de escribir los comandos una vez inciado gdb, aqui lo estamos haciendo al momento de invocarlo en la terminal, y para ello cada comando lo agregamos con la bandera -ex

Creo que no es tan flexible de esta otra manera. Ahora tenemos otra cadena kilometrica que escribir cada que invoquemos gdb.

Afortunadamente la solucion que se ejecuto con OpenOCD es tambien la que usaremos con gdb. crea un nuevo archivo con extension .gdb. En la carpeta de tu proyecto por supuesto.

1
$ touch commands.gdb

Abre el archivo y en el escribe los comandos que quieres que gdb ejcute cuando inciliza. que tal estos.

1
2
3
4
5
6
target remote localhost:3333 # conectamos el puerto de OpenOCD
mon enable semihosting       # habilitamos la opcion semihosting (si se va a utilizar)
load                         # cargamos el programa
mon reset halt               # reset
break main                   # breakpoint en la funcion main
c                            # corenmos el programa y que se detenga en la funcion main

Y cuando invoquemos a gdb lo haremos de la siguiente manera

1
$ arm-none-eabi-gdb Output/test.elf -x=commands.gdb

Mucho mejor no es asi.

Comandos

Te dire que ni siquiera has visto ni la mitad de los comandos que puedes ejecutar con gdb. Puedes echarle un ojo a esta web si gustas mas informacion.

A que no encuentras los comnados mon enable semihosting y mon reset halt en la pagina. Es porque estos comandos en realidad son especificos de OpenOCD. GDB puede ejecutar comandos pertenecientes al servidor que se esta usando, anteponiendo la palabra mon ( de monitor mode ). Puedes revisar los comandos que admite OpenOCD en la pagina 76 del manual de usuario.

Incluso existen comandos que realizan la misma operacion. Ejemplo

1
(gdb) p/x $pc

es lo mismo que

1
(gdb) mon reg pc

Y como este ejemplo hay otros.

Comments