Debug con Arduino

Que es debugging: http://www.visualmicro.com/page/User-Guide.aspx?doc=Debugging-Explained.html

Como hemos visto podemos hacer debug con un HW externo adecuado para el microcontrolador y el puerto de debug correspondiente más una herramienta SW como Atmel Studio.

Generalmente con Arduino no disponemos de estas herramientas, pero podemos hacer debug usando el puerto serie y las directivas de preprocesamiento.

A la hora de hacer depuración de un sketch, tanto al desarrollarlo como cuando esté en producción y se detecten fallos, disponemos del puerto serie para que muestre datos de errores o datos de variables internas para la comprobación del funcionamiento interno que nos permite saber si todo va bien o que está fallando.

Es similar a cuando vemos a un técnico que conecta una consola a un equipo como una máquina climatizadora o en el taller cuando colocan la máquina de diagnóstico al coche para saber qué está pasando.

A la hora de realizar nuestro programa debemos establecer qué parámetros queremos tener monitorizados y sacarlos por el puerto serie para hacer el debug. Incluso podemos pensar en poner una pantalla LED que nos saque por un segundo puerto serie y nos sirva de pantalla de debug.

Un técnica para hacer debug es usar la directiva de preprocesamiento #define que permite asociar a una palabra un valor sin que ocupe espacio en memoria, lo que hace el compilador es sustituir esa palabra por el valor definido. Más información en: http://arduino.cc/en/pmwiki.php?n=Reference/Define

Además para mejorar la funcionalidad de #define tenemos otras directivas de preprocesamiento: #if y #endif que son directivas lógicas, es decir, no sólo no se ejecutan sino que ni se compilan. Las directivas de preprocesamiento nos permiten añadir o quitar código a nuestro antojo antes de compilar para tener una versión para debug o detección de errores y otra versión de producción.

Para hacer debug de nuestro sketch, usaremos Serial.print y sacaremos por el puerto serie para leer por consola aquellas variables o elementos que nos interese monitorizar y saber lo que está pasando con ellas en tiempo real.

Ejemplo:

 
#define DEBUG 0
void setup(){
  inicializa();
}
void loop(){
  compruebaTemperatura();
#if DEBUG
  imprimeVariablesDebug();
#endif
}

Ejercicio20: Hacer un programa sencillo que imprima cosas por puerto serie, la memoria libre, etc… y seleccionar que haga una cosas u otras en función de la directiva de preprocesamiento activada. Comprueba los tiempos de loop, el tamaño ocupado en la flash y el uso de memoria con las opciones DEBUG y VERBOSE y sin ellas.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio20-Debug

Anuncios

Un pensamiento en “Debug con Arduino

  1. Pingback: Saber Más Programación | Aprendiendo Arduino

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s