Lección Teach
STM32 Mbed CodeIDE (4/8): depuración serie con printf
El alumnado usa depuración serie con printf en STM32 Mbed CodeIDE para comparar comportamiento esperado y real, y corregir una discrepancia con evidencia.
Resultados de aprendizaje
Usar
printf()para observar qué está haciendo un programa Mbed en ejecución.Imprimir valores enteros en vez de depender de formato de punto flotante.
Usar salida serie para depurar un cambio controlado cada vez.
Vista previa de la actividad del estudiante
Contenido de la actividad
Solo vista previa. En una sesión de clase, los estudiantes pueden completar respuestas y entregar su trabajo al docente.
Por qué importa la salida serie
8 min
Cuando un controlador no se comporta como esperas, adivinar es lento. La salida serie permite imprimir valores y puntos de control:
printf("cycle=%d led=%d\n", cycle, led_state);
En estos programas Mbed, printf() envía texto desde la placa STM32 en ejecución a la consola serie de CodeIDE. Los marcadores %d se reemplazan por valores enteros, y \n empieza una línea nueva para que cada lectura sea más fácil de copiar.
Este curso usa salida serie con enteros. En este entorno Mbed, la salida printf("%f") de punto flotante no es una buena primera herramienta de depuración. Usa enteros como milisegundos, milivoltios, porcentajes y grados.
En el laboratorio STM32 Mbed CodeIDE, la salida serie aparece en el panel de consola cerca de la parte inferior de la vista del laboratorio. CodeIDE gestiona por ti la conexión USB serie y la velocidad en baudios; solo compila, carga y lee las líneas impresas.
Dónde leer la salida serie
Después de cargar, lee la zona de consola/estado cerca de la parte inferior de CodeIDE. Ahí aparecen las líneas impresas por printf().
¿Qué información imprimirías si una secuencia de LED se viera mal: el número de ciclo, el estado del LED, el valor de retardo u otra cosa?
Imprimir un latido en ejecución
26 min
Abre el laboratorio STM32 Mbed CodeIDE.
Abre
main.cpp.Reemplaza el archivo con el programa siguiente.
Guarda, compila y carga.
Abre u observa la zona de consola serie en CodeIDE.
Observa las líneas serie y confirma que el número de ciclo aumenta mientras el LED cambia.
Copia al menos tres líneas serie antes de cambiar el programa.
#include "mbed.h"
DigitalOut status_led(PB_5, 0);
int main() {
int cycle = 0;
const int delay_ms = 500;
const auto delay_time = 500ms;
printf("STM32 Mbed serial debug start\n");
while (true) {
status_led = !status_led.read();
cycle = cycle + 1;
printf("cycle=%d led=%d delay_ms=%d\n", cycle, status_led.read(), delay_ms);
ThisThread::sleep_for(delay_time);
}
}
Las primeras líneas deberían parecerse a estas:
STM32 Mbed serial debug start
cycle=1 led=1 delay_ms=500
cycle=2 led=0 delay_ms=500
cycle=3 led=1 delay_ms=500
Rellena tres filas de tabla usando tres líneas serie cycle=... distintas, no la línea inicial. En Línea de consola copiada, pega la línea completa. En Comportamiento visible del LED, registra el estado visible del LED que coincide con el valor impreso de led, por ejemplo encendido o apagado. En Qué me indica, escribe una interpretación breve, por ejemplo "el ciclo aumentó en 1 en cada parpadeo" o "el retardo impreso coincidió con la espera del código".
Tabla de evidencia serie
| Línea de consola copiada | Comportamiento visible del LED | Qué me indica |
|---|---|---|
Usa una fila de la tabla para explicar cómo la salida serie te ayudó a conectar el código con el comportamiento físico del LED. Nombra el valor impreso y el cambio visible correspondiente.
Encontrar una discrepancia serie
13 min
Haz un cambio deliberado y seguro: pon delay_time en 1000ms pero deja la etiqueta delay_ms en 500. Compila y carga.
Ahora el programa funcionará correctamente, pero el mensaje serie será engañoso. Tu versión final corregida debe usar const int delay_ms = 1000; y const auto delay_time = 1000ms; para que la etiqueta impresa y la espera real coincidan.
Pega una línea serie engañosa de la versión donde delay_time era 1000ms pero la etiqueta impresa delay_ms todavía decía 500. Después explica por qué ese mensaje de depuración engañoso es un problema y cómo lo corregiste.
Enviar tu código
8 min
Adjunta tu main.cpp final guardado
Pulsa Comprobar archivos guardados, confirma que main.cpp contiene la versión corregida y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad.