Comandos De GDB
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.
Primer Programa en Cortex-M0
Damos inicio a un interesante viaje directo a las entrañas inhóspitas de los microcontroladores y su parte más importante, Su CPU. Que en este caso sera un Cortex-M0.
En esta nueva serie de posts aprenderemos a programar en ensamblador un micro con un cpu Cortex-M0, como el que tiene el micro de nuestra tarjeta Nucleos-f072rb.
Ensamblador, debes estar bromeando, eso es cosa de la prehistoria!!!!.
Mmmmm No. Es verdad que mayormente se prefiere crear programas en un lenguaje como C, pero el ensamblador no esta desfasado y mucho menos obsoleto. Elejimos ensamblador porque es la mejor manera de conocer el funcionamiento a detalle de la máquina que estas programando, y a mayor nivel de conocimiento, mayor de nivel de control y confiabilidad tendrán sobre tus programas.
No voy a entrar en detalles describiendo la arquitectura del micro y como estan constituidas sus diferentes partes, para eso existe un excelente libro que lo explica a mucho mayor detalle de lo que lo haría yo. The Definitive Guide to the ARM Cortex-M0.
Semihosting Con OpenOCD
Si has tenido la oportunidad de programar en C para la computadora, entonces de seguro conocerás la función printf
. Esta función no es ninguna instrucción de C pero si es parte de la libreria estandar de C.
Sin entrar en mucho detalles la función printf
nos permite por lo general mandar información por pantalla. En la computadora típicamente es el monitor.
Cualquier compilador decente de C para cualquier plataforma, trae esta librería estándar incluida. El compilador GNU ARM no es la excepcion y podremos, en nuestro programa utilizar la función printf
. ¿Pero como?, si nuestro micro no tiene una pantalla!!.
Bueno nuestro micro no, pero la computadora que usamos para programar y debuggear si. Podemos usar el debugger ( en el caso de la tarjeta Nucleo-f072rb es el ST-Link ) para mandar la informacion de la función printf
de nuestro programa a la pantalla de OpenOCD.
Crearemos un nuevo proyecto con CMSIS incluido, como en el post Primer Programa con CMSIS. Llamaremos a ese proyecto test_semihosting
, y en el archivo main.c
escribimos lo siguiente
Debugging Con OpenOCD Y GDB (Pt II)
Continuamos con GDB y en esta ocasion veremos como observar el contenido de las variables y de los registros. Seguiremos retomando el programa que usamos en la primera parte.
Lo primero que haremos sera modificar un poco nuestro prgrama, agregaremos unas variables que seran las que observemos. Abre el archivo main.c
con tu editor favorito y modificalo de la siguiete manera
main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Debugging Con OpenOCD Y GDB (Pt I)
Llegó el momento de sacar mayor provecho al programador de nuestra tarjeta y es que nos solo sirve para programar. ST-Link nos sirve para depurar nuestro programa, realizar cosas como ejecuciones paso a paso, colocar breakpoints, revisar el contenido de una variable o registro, etc.
Antes de empezar deberemos tener un proyecto con el cual trabajar, así que tomaremos el proyecto del post Primer Programa con CMSIS. Asegúrate de que compile sin errores ( puedes probarlo antes en la tarjeta ).
Bien, hora de conectarse a nuestra Nucleo-f072 usando OpenOCD
1 2 |
|