Cualquier desarrollador de firmware sabe que independientemente de que siga todas las buenas prácticas que existen, desarrollar en capas sobre una HAL,
encapsulamiento, etc, si tiene que cambiar de hardware tendrá que cambiar el firmware. Hoy existen herramientas muy interesantes para facilitar la creación de una HAL, mapeo de pines y seteo de periféricos, la mayoría de los fabricantes de MCU proveen estas herramientas y, si bien podemos abstraer gran parte del código del hardware, aún hay una dependencia muy fuerte entre firmware y hardware. Zephyr RTOS cambió eso al utilizar el mismo concepto que en Linux: el Device Tree Model.
Un programador no necesita compilar una aplicación para la PC de Jorgito, otra para la PC de Marcos y otra para la Notebook de Paola, hay un sistema operativo que se encarga de ser el "intermediario" entre el hardware y la aplicación. En el mundo de los embebidos no teníamos esa ventaja, necesitabamos crear una aplicación para cada microcontrolador, o incluso si utilizamos el mismo MCU en dos placas diferentes pero con pines mapeados distintos, requerirá que compilemos un binario para cada placa!
Hoy existen cientos de empresas que aún utilizan microcontroladores del paleolítico para no tener que migrar su código que les llevó años perfeccionar y prefieren continuar usando (o hasta hacer "atrocidades ingenieriles") para no tener que comenzar desde cero con un nuevo MCU. Zephyr es la solución a eso, gracias al DTS podemos utilizar la misma aplicación sin tener que cambiar una sóla línea de código aún si, por ejemplo,
cambiamos de un micro de ST a otro de NXP. Sólo tendríamos que cambiar el dts. Si tenemos dos placas similares con el mismo procesador, podemos crear un DTSI para lo que es común a ambas placas y un DTS para lo que es diferente en cada placa pero no necesitaremos tocar ni una sóla línea del código de la aplicación.
Otras ventajas de Zephyr RTOS:
- Utiliza una arquitectura común con Linux, los subsistemas, los mecanismos de sincronización, kernel y user space, device drivers, etc. Para un programador de Linux será súmamente fácil comenzar a programar con Zephyr y para los que aún no incursionaron con los RTOS, después de aprender Zephyr tendrán muchos conceptos que les permitirán entender más fácilmente como funciona Linux (Kernel).
- Soporta todas las arquitecturas más usadas y miles de placas de desarrollo, placas de aprendizaje (como Arduino), ESP32, etc. Además, es más fácil portar una nueva placa si no está soportada.
- Está basado en una licencia Apache y no GPL, lo que permite desarrollar aplicaciones comerciales sin costos de licencias y sin cláusula de copyleft (obligación de distribuir el código fuente de las modificaciones).
- Es modular.
- Soporte nativo de TCP, IPv4, IPv6, UDP, DNS, ICMP,
Bluetooth 5, LoRa,
MQTT, CANBus, USB, etc, lo que implica NO más dependencia de librerías externas o de implementaciones propias de cada fabricante.
- Altísima calidad de código y soporte a largo plazo.
- Hay mucho material de aprendizaje disponible (en inglés), ejemplos y tutoriales
Merece que lo prueben, y la mejor prueba que pueden hacer es, por ejemplo, desarrollar una aplicación para Arduino Nano y luego probar la misma aplicación en un STM32 Blue Pill o un ESP32, verán que la misma aplicación puede correr en las tres plataformas sólo instanciando el DTS correspondiente.
Éxitos!
PD: @Gustavo F. Paredes Delaloye excelente share!
Pablo Llanos Clariá
Embedded Linux Expert
UNITED CODERS