Skip to content

Arduino: Depuración serie (II)

5 mayo, 2013

En una entrada anterior vimos cómo se puede hacer uso de la comunicación serie para transmitir información que nos permita conocer el estado del dispositivo en tiempo de ejecución, de modo que si falla algo podemos tratar de averiguar cuál es el problema desde nuestro monitor serie.  En este post veremos una aproximación para mejorar el nivel de información en el paupérrimo sistema de depuración de Arduino.

Hay muchas maneras de conseguir esto.  Quizá la más lógica sería poner un marcador en cada mensaje de depuración, por ejemplo Serial.print(“Paso 1: “); Serial.print(“mensaje”); de modo que en la salida del monitor serie veamos un texto similar a éste “Paso 1: mensaje”  Luego sólo quedará buscar los marcadores en el código fuente.

Pero también podemos hacer uso de alguna directivas del compilador para facilitarnos la tarea de localizar el punto en el que se encuentra la ejecución del programa.

Una técnica sencilla de mostrar información sobre la función en la que se está ejecutando el código de depuración es mediante la directiva __FUNCTION__  De este modo podemos seguir con mayor facilidad el curso de nuestro programa y localizar el punto exacto por donde pasó.  Existen otras directivas como__PRETTY_FUNCTION__, __FILE__  o  __LINE__ que nos indican el prototipo, el fichero y la línea en la que ocurrió esto.   En ocasiones también se hace uso de la función millis() que devuelve el número de milisegundos transcurridos desde la última vez que se reinició el Arduino con el programa actual.  Devuelve un valor entero, de 32 bit, por lo que es capaz de llevar la cuenta casi hasta 50 días antes de desbordar y comenzar de nuevo (exactamente podrá contar hasta 4.294.967.295 milisegundos)

Resumiendo:

__FILE__ nos devuelve el nombre del fichero y su extensión

__FUNCTION__ devuelve el nombre de la función

__PRETTY_FUNCTION__ devuelve el prototipo completo de la función

__LINE__ devuelve el número de línea donde es llamada.

millis() devuelve el número de milisegundos transcurridos desde la última vez que se reinició el Arduino.

Y un ejemplo de uso:

Teniendo activada la depuración serie, podemos probar este código en cualquier parte de nuestro sketch.

 Serial.print(millis());
 Serial.print(" ms ");
 Serial.print(__FILE__);
 Serial.print("!");
 Serial.print(__PRETTY_FUNCTION__);
 Serial.print(" (linea: ");
 Serial.print(__LINE__);
 Serial.println(")");

Más adelante veremos otras posibilidades de depuración mucho más potentes.

Recuerda que nos mudamos. nuestra nueva dirección es:

http://arrizen.com

Anuncios

From → Arduino

One Comment
  1. Si la verdad no quisiera dejar arduino es que la ventaja ante depuracion se la gana ccs y la verdad prefiero manejar codigo linea a line que no saber nada de lo que esta pasando. A ver si se puede depudrar asi como ccs si es asi dejo ccs por arduino gracias por el post. intentare con lo que me dicen…

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

A %d blogueros les gusta esto: