Guía profesional de herramientas y técnicas de depuración para dispositivos IoT

Por Jacob Beningo

Colaboración de Editores de DigiKey de América del Norte

El desarrollo de un sistema embebido, en el que el software y el hardware deben jugar bien juntos, se ha convertido en algo extremadamente complejo y desafiante, incluso para lo que puede parecer los dispositivos más simples del Internet de las cosas (IoT). Tanto es así, que cuando algo va mal -como inevitablemente ocurrirá- los tiempos de depuración no suelen ser de unas pocas horas, sino que pueden tardar semanas o meses. Estos retrasos añaden costes de desarrollo, impiden que un producto llegue al mercado a tiempo, retrasan los programas de fabricación y destruyen las cadenas de suministro y los planes de negocio.

La mejor manera de reducir el tiempo dedicado a la depuración y de mantener un proyecto en marcha es utilizar una combinación de herramientas de depuración de hardware y de software disponible de forma gratuita para obtener información sobre el rendimiento de un sistema y dónde se producen los problemas. Por ello, tanto para los profesionales como para los aficionados, disponer de las herramientas adecuadas para el trabajo ayuda mucho a realizarlo de forma rápida y correcta.

En este artículo se analizan las herramientas de desarrollo y el software que pueden utilizarse para depurar y analizar el rendimiento de un dispositivo IoT. Utilizará una placa de desarrollo de STMicroelectronics como dispositivo IoT de ejemplo, y utilizará las herramientas y el software de SEGGER Microcontroller Systems para comprender y depurar el sistema. También se discutirán varios consejos y trucos sobre cómo minimizar el tiempo de depuración y entregar un proyecto de IoT a tiempo.

El típico dispositivo IoT a depurar

Los dispositivos IoT se han convertido en algo habitual en casi todos los sectores, desde el hogar inteligente hasta el control de la supervisión industrial. A pesar de la variedad de aplicaciones, hay varios componentes típicos que va a tener un dispositivo IoT. Entre ellos se incluyen:

  • Un microprocesador
  • Una radio para la conectividad
  • Sensores

Un desarrollador no va a querer hacer girar su propia placa para explorar técnicas de depuración o para probar piezas de su código de aplicación. Es demasiado tiempo. En su lugar, es más prudente trabajar con una placa de desarrollo de bajo coste como la B-L4S5I-IOT01A Discovery Kit for IoT Node de STMicroelectronics. Tiene casi todo lo que se encuentra en un dispositivo típico de IoT (Figura 1).

Diagrama del kit de descubrimiento B-L4S5I-IOT01A de STMicroelectronicsFigura 1: El kit de descubrimiento de STMicroelectronics B-L4S5I-IOT01A para el nodo IoT incluye todos los componentes que suelen ser necesarios en un dispositivo IoT. (Fuente de la imagen: STMicroelectronics)

La placa incluye el STM32L4S5VIT6, un microcontrolador Arm® Cortex®-M4 que funciona a 120 megahercios (MHz). Para ello cuenta con hasta 2 megabytes (Mbytes) de flash y 640 kilobytes (Kbytes) de RAM. Para los propósitos de este ejercicio, es importante que la placa incluya Wi-Fi y una plétora de sensores que se pueden utilizar para construir rápidamente un dispositivo de prueba de IoT.

Herramientas de hardware de depuración profesional

Casi todas las placas de desarrollo vienen con una interfaz JTAG/SWD incorporada para que los desarrolladores no tengan que salir a buscar su propio programador. En cambio, pueden trabajar con la placa de desarrollo nada más sacarla de la caja. Si bien esto es estupendo para el marketing, no lo es para la ingeniería real: los depuradores integrados suelen ser versiones muy reducidas que tienen limitaciones, como el número de puntos de interrupción disponibles y la velocidad de transmisión de la interfaz. Para los no iniciados, estas limitaciones pueden no parecer un gran problema, pero tener puntos de interrupción ilimitados evita tener que activar y desactivar constantemente los puntos de interrupción, y se necesitan velocidades de baudios rápidas para el rastreo de aplicaciones (más sobre el rastreo en la sección de herramientas de software).

Hay varias herramientas disponibles que pueden proporcionar una experiencia de depuración profesional, pero las herramientas en sí mismas son sólo la mitad de la solución. Las herramientas deben estar respaldadas por un buen software. Un conjunto de herramientas que destaca tanto desde el punto de vista del hardware como del software es la serie J-Link de SEGGER. Esta serie cuenta con una versión de depurador para casi cualquier tipo de desarrollador, desde estudiantes y aficionados hasta profesionales empedernidos.

Hay dos modelos que la experiencia ha demostrado que son los más útiles para el desarrollador general: el J-Link Base y el J-Link Ultra+ (Figura 2). En cuanto al factor de forma, las dos unidades son idénticas, pero el J-Link Ultra+ ofrece al desarrollador una mayor velocidad de descarga a la RAM (3 Mbytes/s frente a 1,0 Mbyte/s) y una mayor velocidad de la interfaz SWD (100 MHz en lugar de 30 MHz). Las velocidades más rápidas marcan la diferencia cuando un desarrollador quiere rastrear su aplicación para obtener información sobre el rendimiento, el comportamiento del RTOS y depurar su sistema.

Imagen de SEGGER J-Link Ultra+Figura 2: El SEGGER J-Link Ultra+ proporciona a los desarrolladores una experiencia de depuración mejorada a través de una interfaz de destino de 50 MHz. (Fuente de la imagen: SEGGER Microcontroller Systems)

Lo bueno del J-Link y de la placa de desarrollo B-L4S5I-IOT01A es que ambos pueden conectarse a través de un cable Tag-Connect TC2050-IC-NL y del clip de retención TC2050-CLIP-3PACK. Permiten conectar un depurador a la placa de desarrollo a través de la "almohadilla de clavos" (Figura 3). Puede ser necesario adaptar el conector de 20 pines del J-Link al conector de 10 pines del cable TC-2050. Una opción que se puede utilizar para esto es el adaptador de aguja de 10 pines J-Link 8.06.04.

Imagen de la placa de desarrollo B-L4S5I-IOT01A de STMicroelectronicsFigura 3: En la placa de desarrollo B-L4S5I-IOT01A, el conjunto de cables Tag-Connect puede conectarse a través de una huella en la placa de PC (derecha). (Fuente de la imagen: STMicroelectronics)

Una vez que el desarrollador tiene cerrada esta vía en el lado del hardware, puede utilizar las herramientas de software para analizar y depurar su aplicación.

Herramientas de software de depuración profesional

Hay bastantes herramientas de software que funcionan bastante bien con las herramientas SEGGER J-Link, que sorprendentemente no son proporcionadas por SEGGER. A continuación, echaremos un vistazo a varias de estas herramientas gratuitas y veremos cómo los desarrolladores pueden utilizar cada una de ellas para depurar su software.

El primero es J-Scope. J-Scope es una herramienta similar a un osciloscopio que muestra valores variables en el tiempo. Los desarrolladores pueden controlar una sola variable o varias decenas de ellas. Tenga en cuenta, sin embargo, que a medida que se controlan más variables, se pueden tomar menos muestras antes de que el búfer de muestras se desborde y se pierdan los datos.

Las variables se seleccionan proporcionando a J-Scope el archivo elf que sale del compilador. Esto proporciona las ubicaciones de memoria que se deben leer, y el desarrollador puede entonces establecer sus tasas de muestreo y monitorear cómo la(s) variable(s) cambia(n) con el tiempo. En la figura 4 se puede ver un ejemplo sencillo de una traza de tres variables.

La imagen del SEGGER J-Scope se puede utilizar para controlar las variablesFigura 4: J-Scope puede utilizarse para monitorizar variables a través del J-Link mientras una aplicación se ejecuta en tiempo real. (Fuente de la imagen: SEGGER Microcontroller Systems)

El siguiente es Ozono. Ozone es una interfaz de depuración y un analizador de rendimiento. Los desarrolladores pueden cargar su archivo elf en la herramienta y realizar la depuración a nivel de fuente. Pueden establecer puntos de interrupción y actualizar su código. Una característica especialmente útil para los desarrolladores es que también pueden realizar un seguimiento de las instrucciones (si su hardware lo admite) e identificar qué sentencias de código ensamblador y C se han ejecutado. Esto es especialmente útil para verificar la cobertura de código de las pruebas de hardware en bucle (HiL).

Ozone también puede ayudar a los desarrolladores a analizar el rendimiento de su sistema (Figura 5) y visualizar las variables a lo largo del tiempo. Esto proporciona capacidades como J-Scope pero de una manera más integrada. Incluso puede utilizarse para controlar el consumo de energía y sincronizar todos estos eventos en un solo lugar.

La imagen del SEGGER Ozone se puede utilizar para rastrear variables a través del J-LinkFigura 5: Ozone puede utilizarse para rastrear variables a través del J-Link mientras una aplicación se ejecuta en tiempo real, además de la cobertura de código y la depuración consciente del RTOS. (Fuente de la imagen: SEGGER Microcontroller Systems)

Una tercera herramienta es SystemView. SystemView permite a los desarrolladores analizar el comportamiento en tiempo de ejecución de su sistema RTOS. La conmutación de tareas se registra en un búfer de seguimiento y luego se informa a SystemView a través del depurador (Figura 5). A continuación, SystemView muestra esta información de forma que el desarrollador pueda ver sus interruptores de contexto y medir el rendimiento de su sistema. También es una forma estupenda de visualizar un sistema y encontrar fallos y otros problemas.

El diagrama de SEGGER SystemView proporciona un enlace a un RTOSFigura 6: SystemView proporciona un enlace a un RTOS que permite a los desarrolladores medir el rendimiento de las tareas y visualizar lo que el RTOS está haciendo y cuándo lo está haciendo. (Fuente de la imagen: SEGGER Microcontroller Systems)

Consejos y trucos para depurar un sistema embebido

La depuración de un dispositivo IoT requiere que los desarrolladores dispongan de las herramientas adecuadas tanto desde el punto de vista del hardware como del software. Ambas piezas deben estar en su lugar si los desarrolladores van a minimizar el tiempo que pasan depurando. Para depurar con éxito, hay varios "consejos y trucos" que los desarrolladores deben tener en cuenta, como por ejemplo

  • Utilice un depurador profesional que maximice la velocidad de transmisión de la interfaz. La cantidad de datos útiles que se pueden obtener de un sistema dependerá de la rapidez con la que se puedan recibir esos datos. Las velocidades más lentas dan lugar a una sesión de depuración más larga.
  • Configure el software de depuración al principio del ciclo de desarrollo. Los desarrolladores no deberían esperar a tener un problema para configurar sus herramientas de depuración.
  • Utilizar herramientas de rastreo desde el inicio del desarrollo. Esto permitirá a los desarrolladores supervisar el rendimiento de su sistema y comprender inmediatamente cómo le afectan los cambios de software.
  • Aproveche el rastreo de instrucciones o el muestreo de contadores de programa para comprender la cobertura del código del sistema durante las pruebas. Los errores existirán en las ramas condicionales y en el código no probado.
  • Aproveche los protocolos de transferencia rápida para obtener datos fuera del chip, como las bibliotecas de transferencia en tiempo real (RTT).

Los desarrolladores que sigan estos "consejos y trucos" descubrirán que se ahorran bastante tiempo y disgustos cuando intentan desarrollar un dispositivo IoT.

Conclusión:

El software de los dispositivos IoT se ha vuelto complejo, pero eso no significa que los desarrolladores profesionales o aficionados tengan que atascarse constantemente depurando sus sistemas. El uso de herramientas y software de desarrollo profesional puede proporcionar a los desarrolladores la información que necesitan no sólo para depurar un sistema, sino para analizar y mejorar su rendimiento. Al invertir en estas herramientas, los usuarios pueden reducir drásticamente el tiempo dedicado a la depuración y conseguir que sus proyectos funcionen y salgan al mercado en un plazo razonable.

DigiKey logo

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.

Información sobre el autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo es un consultor de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente sus negocios mejorando la calidad del producto, el costo y el tiempo de comercialización. Ha publicado más de 200 artículos sobre técnicas de desarrollo de software embebido, es un conferenciante y entrenador técnico muy solicitado y tiene tres títulos que incluyen una Maestría en Ingeniería de la Universidad de Michigan. No dude en ponerse en contacto con él en jacob@beningo.com, en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes Newsletter.

Información sobre la editorial

Editores de DigiKey de América del Norte