Depuración y comunicación con el ordenador
Comenzar arrow_downwardSimilar a printf de C, pero diseñado para sistemas embebidos sin sistema operativo completo.
Función de salida del kernel de Zephyr. Imprime directamente a la consola serie.
printf
%d, %s, %x, %p
CONFIG_PRINTK=y en prj.conf. Generalmente ya está habilitado por defecto.
Sistema profesional con niveles, filtrado y múltiples backends de salida.
Los niveles permiten filtrar la cantidad de información según la necesidad.
Errores que impiden el funcionamiento normal
Situaciones anormales pero recuperables
Información general del funcionamiento
Detalles para depuración de código
Si configuras LOG_LEVEL_WRN, solo verás mensajes de nivel WRN y ERR (los más severos).
Usar LOG_LEVEL_DBG para ver todos los mensajes
Usar LOG_LEVEL_WRN para reducir overhead
CONFIG_LOG_MAX_LEVEL en prj.conf define el máximo en compilación. Los mensajes de nivel superior no se compilan.
Cada método tiene sus usos. Conoce cuándo usar cada uno.
Universal Asynchronous Receiver/Transmitter - El protocolo serie más común.
El API asíncrono usa callbacks para notificar eventos sin bloquear la CPU.
uart_callback_set(dev, callback, user_data)
uart_rx_enable(dev, buf, len, timeout)
uart_tx(dev, buf, len, timeout)
uart_rx_disable(dev)
El callback se ejecuta cuando ocurren eventos de transmisión o recepción.
UART_TX_DONE
UART_RX_RDY
UART_RX_DISABLED
UART_RX_BUF_REQUEST
UART_RX_DISABLED debes llamar a uart_rx_enable() de nuevo con un buffer válido.
Ejemplo completo de manejo de eventos en el callback.
UART_TX_DONE
UART_RX_RDY
UART_RX_DISABLED
Usar dos buffers permite recibir datos sin perder ningún byte.
Mientras un buffer se procesa, el otro recibe datos nuevos. Se alternan continuamente.
UART_RX_BUF_REQUEST
UART_RX_RDY
UART_RX_BUF_RELEASED
Implementación completa del patrón de doble buffer en UART.
printk() para salida básica
LOG_ERR/WRN/INF/DBG para logging profesional
"El logging es tu mejor herramienta de depuración en sistemas embebidos."
LOG_MODULE_REGISTER(name, level)
LOG_ERR/WRN/INF/DBG(fmt, ...)
uart_callback_set(dev, cb, data)
uart_tx(dev, buf, len, timeout)
uart_rx_enable(dev, buf, len, timeout)
uart_rx_buf_rsp(dev, buf, len)
Aprenderemos a comunicarnos con sensores y periféricos usando el protocolo I2C.