¿Tu código no funciona? Debuggea el proyecto con una Raspberry Pi Pico

Si alguna vez te ha pasado que tu código no funciona correctamente seguro has ideado alguna forma de colocar indicadores para ver cómo se comporta realmente tu programa. A esto se le llama comúnmente debuggear. Sin embargo, existen herramientas con hardware que te harán la vida más sencilla, o simplemente complementar la forma en que haces pruebas en tu código. En esta entrada queremos desarrollar un poco más estas técnicas y mostrarte cómo puedes hacerlo con una Raspberry Pi Pico

¿Qué significa debuggear un código?

En los inicios de la programación y la computación, el proceso de detectar los fallos en un código era una tarea compleja y tomaba un tiempo resolverla. El término «bug» surge de los primeros fallos en las computadoras, debido a la presencia de insectos en las tarjetas electrónicas. Así, se denomina debuggear o depurar un código al proceso de encontrar fallos en la escritura o en la ejecución de un código.

Un debugger es una herramienta que nos permite analizar la ejecución de un código cuando lo estamos trabajando en una tarjeta de desarrollo. Esta es una de las herramientas más importantes al desarrollar firmware para sistemas embebidos, ya que permite ejecutar de forma pausada nuestro código y observar como se comporta la memoria del programa.

La mayoria de los IDEs avanzados tienen modalidades y herramientas en software para llevar a cabo esta tarea. Tomando como ejemplo a Visual Studio Code, se tiene el modo de Debug o depuración para probar un código. También existen los denominados breakpoints que son puntos en donde le indicamos al compilador en donde detenerse para que analicemos los registros y datos que se mueven en la tarjeta.

Algunas de las secciones en Visual Studio Code dedicadas a la depuración del código. Vía: Visual Studio Code.

Cuando creamos un código para una tarjeta de desarrollo, las sentencias que usamos para programar no son exactamente las que transferimos a nuestro microcontrolador para ser programadas. El IDE usa un compilador que traduce el lenguaje que usamos para programar, por ejemplo C++, y lo convierte en instrucciones que pueda entender el micro, en este caso ensamblador.

El puerto JTAG

A medida que los dispositivos se volvieron más complejos aumentó la dificultad para leer las señales internas de los microcontroladores. En consecuencia se tuvo que estandarizar las señales de prueba y se creó el Joint Tag Action Group (JTAG). Esto permitió establecer estándares de que permitieran detectar errrores con unos cuantos pines. No todos los microcontroladores implementar JTAG; por ejemplo el ATMEGA328p del arduino no lo tiene, pero la Raspberry Pi Pico y el ESP32 sí.

El estándar JTAG está muy difundido en herramientas para programar y detectar errores. Cada fabricante maneja un número de pines distinto y las herramientas de depuración pueden llegar a ser costosas. Vía. Mouser Electronics

La Raspberry Pi Pico como debugger

La Raspberry Pi Pico tiene pines dedicados para mandar información serial con el que podremos saber un poco más acerca del contenido de la memoria. Para habilitarlo se requiere cargar un firmware especial llamado picoprobe, con el que podremos cargar otros programas a una Pico externa. Puedes encontrar un tutorial detallado en esta página de Digi-Key, con la que podrás configurar Visual Studio Code con todas los archivos necesarios.

Configuración de una Raspberry Pi Pico como programador y debugger de otra Raspberry Pi Pico. Este sistema se puede usar para otras tarjetas que usen el RP2040. Vía: Digi-Key

Desde Raspberry Pi Os y una Raspberry Pi también se puede configurar un entorno de programación con el que será más simple echar a andar nuestra herramienta de depuración. Podemos seguir esta guía para configurar el entorno de programación y las librerías faltantes.

Raspberry Pi Pico conectada a un Raspberry Pi para detectar fallas en programas. Via: Raspberry Pi Foundation

Conclusiones:

Hemos revisado cómo se implementan algunas herramientas para encontrar errores en el funcionamiento de nuestro programa. La Raspberry Pi Pico es sólo una de varias que podemos encontrar en el mercado. Lo destacable de usarla es que es una opción poderosa y bastante económica. Te recomendamos que revises las guías para cargar el picoprobe en tu tarjeta y puedas añadir una herramienta de desarrollo de software a tu caja.

Referencias:

Debugging embedded software with Raspberry Pi Pico

Hackspace Magazine Issue #43

Raspberry Pi Pico and RP2040 – C/C++ Part 2: Debugging with VS Code

Debugging the Raspberry Pi Pico on Windows 10

Raspberry Pi Pico funcionando como debugger con el firmware Picoprobe Vía: DigiKey