Los dispositivos integrados son el alma del Internet de las cosas. Cualquier red de IoT es inherentemente un medio para conectar "cosas" alimentadas por microcontroladores a través de Internet. Los microcontroladores en el corazón de la mayoría de los dispositivos IoT son chips más simples, de bajo consumo y con recursos limitados que no pueden ejecutar un sistema operativo estándar. Los microcontroladores suelen actualizarse con códigos de firmware mínimos destinados a realizar trabajos específicos. Conectarse a Internet y comunicarse con servicios en la nube en tiempo real es un gran problema para el software integrado. Los sistemas operativos en tiempo real (RTOS) son el negocio de los controladores integrados.
RTOS son sistemas operativos avanzados que permiten que los controladores y procesadores integrados ejecuten aplicaciones integradas a gran escala de manera ordenada, de modo que se ejecuten múltiples tareas simultáneamente en un solo núcleo y al mismo tiempo cumplan con los plazos en tiempo real. En los ecosistemas de IoT, RTOS permite que los dispositivos se conecten a plataformas en la nube y dispositivos de borde e intercambien datos de manera eficiente en tiempo real mientras realizan tareas multitarea integradas.
Un RTOS popular es FreeRTOS. La comunidad integrada lo adopta ampliamente porque es de código abierto y está disponible gratuitamente. También hay disponibles otros derivados gratuitos y con licencia de FreeRTOS. Una de las mejores cosas de FreeRTOS es que puedes empezar a jugar con placas Arduino o ESP. Además, FreeRTOS se puede ampliar con bibliotecas adicionales para adaptarse a una aplicación específica. Este artículo analiza qué es FreeRTOS y por qué lo necesitamos.
Sistema operativo en tiempo real (RTOS)
Un sistema operativo en tiempo real (RTOS) es un sistema operativo multitarea para aplicaciones en las que el tiempo es crítico. Un RTOS ejecuta tareas bajo restricciones de tiempo real, donde las tareas deben ejecutarse en el intervalo de tiempo entre la ocurrencia de un evento y la respuesta esperada del sistema al evento. Las tareas RTOS tienen latencias predecibles que coinciden estrechamente con los plazos esperados.
Los RTOS son sistemas operativos en miniatura, normalmente de menos de un megabyte de tamaño. Al no ser un sistema operativo completo, a menudo estos pequeños sistemas operativos pueden carecer de algunas características comunes del sistema operativo, como el sistema de archivos, las redes y las interfaces de línea de comandos. Aún así, están bien equipados con procesos, recursos, dispositivos y subsistemas de gestión. Un RTOS puede estar controlado por eventos o en tiempo compartido y permitir solo la asignación de memoria estática o dinámica de acuerdo con un algoritmo determinista del programa de aplicación. La unidad de administración de memoria (MMU) está desactivada o se aplican bloqueos de memoria. Los bloqueos de memoria detienen el intercambio de páginas entre la memoria física y el disco, lo que reduce la inestabilidad y hace que las latencias de las tareas sean predecibles.
El programador en un RTOS está diseñado para un patrón de ejecución determinista. Esto es útil en sistemas integrados donde el dispositivo debe responder a un evento dentro de un plazo estricto. Los subprocesos del programa de aplicación se ejecutan en el espacio del kernel de rendimiento. De esta manera, el programa de aplicación tiene acceso a los códigos del kernel, así como a los datos de la pila y al espacio de memoria, lo que puede provocar un kernel desprotegido.
Un programa de aplicación en RTOS está escrito como una colección de tareas independientes; un hilo de ejecución es una de esas tareas. Un RTOS proporciona gestión de prioridades de procesos definidas por el usuario, y a cada tarea se le asigna una prioridad. Las prioridades a nivel de usuario, también llamadas prioridades en tiempo real, son más altas que las prioridades asignadas dinámicamente a las funciones del sistema operativo y las prioridades inactivas asignadas a subprocesos de baja prioridad. El RTOS se adelanta a las tareas de menor prioridad cuando ocurre un mensaje o evento para ejecutar una tarea de mayor prioridad. Para tareas con igual prioridad, un RTOS depende de dividir el tiempo de ejecución de los procesos.
RTOS vs. SO de propósito general
En un sistema operativo típico, el programador está diseñado para seguir respondiendo a la aplicación actual que ejecuta el usuario. En un sistema operativo multiusuario, el programador está diseñado para garantizar un tiempo de procesamiento justo y un uso compartido de la memoria entre varios usuarios. En RTOS, las tareas o los subprocesos de la aplicación reciben prioridades y el programador está diseñado para completar primero la tarea de mayor prioridad dentro del plazo previsto.
Un RTOS puede tener un funcionamiento duro o suave en tiempo real. Se denomina sistema complejo en tiempo real si el RTOS funciona para cumplir con estrictas limitaciones de tiempo; y si el RTOS opera tolerando algunas latencias pero de manera predecible, se le llama un sistema fluido en tiempo real. Los equipos médicos que salvan vidas son un ejemplo de un sistema duro en tiempo real. El decodificador Aavideo es un ejemplo de un sistema suave en tiempo real.
¿Por qué utilizar RTOS?
Los sistemas operativos en tiempo real suelen ser necesarios para los sistemas duros en tiempo real. El único otro escenario en el que se puede emplear un RTOS es cuando un dispositivo integrado necesita manejar muchas tareas multitarea. La mayoría de los sistemas integrados están diseñados para realizar una única tarea específica realizada únicamente con programación básica. Sin embargo, muchas aplicaciones integradas requieren la operación simultánea de múltiples tareas o implican comunicación entre procesos. Aquí es donde RTOS es la opción más viable en comparación con escribir un programador personalizado y diseñar una rutina entre procesos.
Además del procesamiento en tiempo real y la multitarea, RTOS beneficia a una aplicación integrada de varias maneras. RTOS es la mejor manera de gestionar una aplicación compleja o grande. Garantiza que el sistema integrado ejecute tareas de alta prioridad bajo limitaciones de tiempo real para que todas las posibilidades de riesgos, fallas y fallas se aborden correctamente. RTOS le permite lograr esto con un código de aplicación más pequeño y simple. Le permite dividir el código de la aplicación en tareas independientes con latencia predecible. Los sistemas integrados basados en RTOS son más fáciles de mantener. Los módulos tienen menos interdependencias y, a menudo, dependen de los recursos del kernel en lugar del hardware subyacente. De esta manera, los cambios de hardware, como un procesador o un periférico, generalmente no afectan una aplicación basada en RTOS.
Debido a que la aplicación está diseñada como un conjunto de tareas independientes, la mayor parte del código es reutilizable. Es más fácil probar sistemas que ejecutan RTOS gracias a ejercicios de prueba bien establecidos. Es posible que la prueba ni siquiera requiera una interfaz de hardware.
¿Qué es FreeRTOS?
FreeRTOS es un sistema operativo de código abierto en tiempo real diseñado para microcontroladores y microprocesadores pequeños. Fue desarrollado por Richard Barry en 2003 y mantenido por su empresa Real Time Engineers Ltd, hasta 2017. En 2017, Amazon Web Services se hizo cargo de la administración del proyecto FreeRTOS. La derivación de Amazon FreeRTOS es una extensión del kernel FreeRTOS original e incluye varias bibliotecas de soporte de IoT. Amazon FreeRTOS es ampliamente conocido simplemente como "FreeRTOS".
La mayoría de los microcontroladores no requieren una implementación RTOS completa. FreeRTOS no es un RTOS completo, sino un programador en tiempo real con pila TCP/IP incluida. A menudo se utiliza como kernel RTOS para programación en tiempo real, gestión de comunicación entre procesos (IPC) y sincronización de tareas con IPC. No existe ningún sistema de archivos, memoria virtual ni modelo de seguridad en FreeRTOS. Si es necesario, se pueden agregar a FreeRTOS funciones adicionales como redes e intérprete de línea de comandos mediante bibliotecas complementarias.
¿Por qué FreeRTOS?
FreeRTOS es básicamente un programador en tiempo real escrito en lenguaje de programación C con un núcleo que consta de sólo tres archivos .c. Es el pequeño tamaño del kernel FreeRTOS lo que lo hace adecuado para microcontroladores. FreeRTOS está disponible para más de 40 arquitecturas, incluida ARM. Dado que es de código abierto bajo una licencia del MIT, está disponible gratuitamente e incluso puede modificarse para migrarlo a plataformas de hardware nuevas o personalizadas. Debido a que el código fuente es de código abierto, los ingenieros integrados pueden examinar el código del kernel siempre que sea necesario para resolver un problema. Aunque FreeRTOS no es una implementación completa de RTOS, el kernel garantiza que se cumplan estrictas restricciones en tiempo real.
FreeRTOS se puede integrar en una aplicación sin exponer el código fuente propietario. Proporciona soporte de seguimiento integrado, una pila TCP/IP y un intérprete de línea de comandos. Como núcleo confiable desarrollado mediante la colaboración de más de 15 fabricantes de chips, está diseñado para integrarse fácilmente en aplicaciones de IoT. Puede trasladarse a placas de evaluación basadas en microcontroladores y probarse con demostraciones preconfiguradas que aceleran enormemente el tiempo de comercialización. Amazon ofrece IoT Device Tester, una herramienta de automatización de pruebas que le permite probar automáticamente si una plataforma de hardware es compatible con FreeRTOS. FreeRTOS ha evolucionado para interoperar con Amazon Web Services (AWS) y viene con todas las funciones posibles de IoT. El RTOS se puede actualizar de forma inalámbrica (OTA) para instalar parches de seguridad y bibliotecas complementarias cuando sea necesario.
Ampliando FreeRTOS
Las funcionalidades RTOS de FreeRTOS se pueden ampliar con bibliotecas complementarias. La biblioteca FreeRTOS+TCP permite la implementación de una pila TCP/IP completa y ligera. La biblioteca FreeRTOS+IO agrega interfaces similares a POSIX a FreeRTOS para conectarse a dispositivos periféricos. La biblioteca FreeRTOS+Trace agrega soporte de seguimiento y nos permite monitorear el comportamiento en tiempo real de RTOS. La biblioteca FreeRTOS+CLI le ayuda a agregar una interfaz de línea de comandos al sistema operativo.
Aplicaciones RTOS gratuitas
FreeRTOS es muy útil en aplicaciones de IoT, especialmente si necesitan interoperar con AWS. Es ampliamente utilizado en aplicaciones comerciales en los segmentos industrial y de consumo. Al ser un programador minimalista en tiempo real, FreeRTOS es la opción preferida en muchos dispositivos industriales en tiempo real. Se ejecuta en gran medida mediante microcontroladores en muchos productos de consumo, como luces inteligentes, dispositivos portátiles y diversos electrodomésticos.
Alternativas a FreeRTOS
Es posible que FreeRTOS no siempre sea la mejor opción. Esto es especialmente cierto cuando un dispositivo realmente requiere una implementación RTOS completa. Estas aplicaciones pueden requerir un sistema de archivos, memoria virtual o una interfaz de usuario de alto nivel. En tales situaciones, es adecuada una variante de Linux integrada. Algunos RTOS alternativos que pueden ser adecuados en tal situación incluyen embOS, Yocto, Zephyr, ThreadX, Nucleus, Keil RTX, SafeRTOS, etc. Para aquellas aplicaciones que no implican multitarea o limitaciones de tiempo real, FreeRTOS será excesivo. Estas aplicaciones deben resolverse con programación básica.
Introducción a FreeRTOS en Arduino o ESP
FreeRTOS se utiliza ampliamente en aplicaciones comerciales integradas, es de código abierto y está disponible gratuitamente. Lo mejor es que se puede cargar en placas de microcontroladores populares como Arduino, ESP y STM32. Para que cualquiera pueda comenzar rápidamente y probar FreeRTOS en placas de microcontroladores populares.