Introducción a RTOS, sistemas operativos en tiempo real

Discutiremos cómo, cuándo y quizá el por que utilizar un sistema operativo en tiempo real (RTOS) en su sistema embedded. 

Existe la percepción generalizada de que un sistema operativo en tiempo real está conectado solo con tecnología de alta gama y dispositivos complicados que realizan operaciones críticas o de vida o muerte. Esto es cierto solo a medias.

Hoy en día, un RTOS se puede usar en casi todos los chips para implementar diferentes tipos de tareas, y no es necesario que todas sean de importancia crítica. Este artículo lo ayudarán a explorar las oportunidades de RTOS para su propio proyecto.

¿Qué es un sistema operativo (SO)?

Antes de empezar a hablar de RTOS, veamos brevemente qué es un sistema operativo. Generalmente, un sistema operativo, o SO, es el sistema de soporte vital de una computadora o sistema integrado.

Es una pieza de software que asegura el funcionamiento del hardware y es responsable de la interacción entre el hardware y las aplicaciones que se ejecutan por encima, en la computadora.

Un sistema operativo cumple una serie de funciones importantes, incluida la gestión de la CPU, la memoria y los dispositivos periféricos de entrada / salida. Además, un sistema operativo interactúa entre el usuario y la máquina proporcionando una interfaz de usuario y servicios para todas las aplicaciones.

Sin embargo, hay casos en los que es posible que no necesite un sistema operativo. En estos casos, todas las operaciones deben ser preestablecidas por un desarrollador y la ejecución de la tarea y sub tareas está asegurada por los algoritmos desarrollados.

Esto funciona bien para sistemas simples con hardware simple y una pequeña cantidad de tareas o cuando un microcontrolador (MCU) o cualquier otro chip no es compatible con un sistema operativo.

En general, un sistema operativo sigue siendo la solución más eficaz para la multitarea. El uso de un sistema operativo ahorra tiempo y esfuerzo al usuario al eliminar la necesidad de una gran cantidad de programación.

¿Qué es un sistema operativo en tiempo real (RTOS)?

Un sistema operativo se ocupa de muchas tareas diferentes entre si, algunas de las cuales son críticas y deben ejecutarse de inmediato, por ejemplo, con aplicaciones en tiempo real. Otras tareas pueden ser de menor importancia y también hay casos en los que el incumplimiento o incluso el retraso en la ejecución de una tarea de alta prioridad pueden ser cruciales y tener consecuencias.

Un sistema operativo, que también puede denominarse sistema operativo de propósito general, puede ejecutar tareas críticas y no críticas de acuerdo con la priorización establecida por el desarrollador.

El principal problema es que lo que un GPOS es capaz de hacer en teoría puede no traducirse en la práctica. Por ejemplo, un GPOS puede cambiar de una tarea crítica a otra operación, completando la tarea crítica solo cuando surge la oportunidad.

Entonces, ¿Cómo puede obtener una garantía de que una tarea de alta prioridad se ejecutará a su debido tiempo sin demoras? Mediante el uso de un sistema operativo en tiempo real o RTOS. Este es un tipo de sistema operativo que garantiza que la ejecución de las tareas se lleve a cabo dentro del período de tiempo especificado.

Al aplicar limitaciones al tiempo de ejecución, un RTOS permite ejecutar aplicaciones en tiempo real que necesitan una respuesta inmediata. Este tipo de respuesta normalmente se mide en milisegundos o incluso microsegundos.

Real time operating system 2
El uso de RTOS es muy importante para los sistemas relacionados con las industrias de la salud.

El uso de RTOS es muy importante para los sistemas relacionados con las industrias de la salud, automotriz y aeroespacial, o cualquier otro sistema donde la falla podría ser catastrófica o potencialmente mortal.

RTOS se usa comúnmente en sistemas integrados basados ​​en microcontroladores, así que profundicemos en esto.

Conceptos y principios de RTOS

Un sistema operativo en tiempo real proporciona un enfoque determinista que excluye todo lo que sea aleatorio de la secuencia de operaciones realizadas en un sistema. En otras palabras, el sistema se comporta de forma predecible.

Siempre que los algoritmos se desarrollen e implementen correctamente, un RTOS asegura una gestión adecuada de los recursos para que una tarea se ejecute con el tiempo exacto. El comportamiento temporal de un RTOS se considera determinista.

Excepto por el tiempo garantizado, un RTOS asegura el cambio de tareas en el intervalo previsto. Las tareas se interrumpen y se adelantan entre sí de acuerdo con la priorización establecida por el desarrollador. A esto se le llama programación preventiva.

La programación es un procedimiento importante para el desempeño de un sistema operativo que administra la lista de espera de tareas y determina la secuencia de eventos de acuerdo con las prioridades predefinidas.

En la programación RTOS, que es preventiva, cualquier proceso puede ser interrumpido por una tarea de más alta prioridad siempre que se le asigne. Por lo tanto, las tareas críticas siempre prevalecerán sobre las tareas de baja prioridad.

Lo opuesto a la programación preventiva es la programación no preventiva o cooperativa. Un RTOS con un programador cooperativo era la primera versión de un sistema operativo en tiempo real y no permitía interrumpir y cambiar a otra tarea hasta que una de ellas se completara o se pusiera en estado de espera.

En la programación preventiva, las tareas cambian en períodos de tiempo iguales, mientras que en la programación no preventiva, no hay un tiempo estricto en el cambio de tareas
En la programación preventiva, las tareas cambian en períodos de tiempo iguales, mientras que en la programación no preventiva, no hay previsto un tiempo estricto en el cambio de tareas

Otro principio importante establecido por un RTOS es la herencia prioritaria. Esto ocurre cuando las tareas de menor y mayor prioridad comparten un mismo recurso del sistema.

Para liberar el recurso lo antes posible para una tarea de alta prioridad, un subproceso con baja prioridad se bloquea y luego se restaura para que pase su sección crítica.

En otras palabras, la tarea hereda la prioridad y tan pronto como se completa la parte crítica de la operación, la priorización vuelve al estado inicial.

La herencia de prioridad no funciona para un GPOS: una tarea de alta prioridad tendrá que esperar hasta que una tarea de baja prioridad pase todas las secciones y luego se ejecute. Significa que una tarea de alta prioridad puede retrasarse durante un período de tiempo impredecible, esto es inaceptable en un RTOS.

Real time operating system 4
Los subprocesos de baja prioridad en un GPOS no heredan la prioridad de los subprocesos de mayor prioridad. 
Este gráfico muestra un sistema con dos subprocesos, pero puede tener muchos más.

Los principios descritos anteriormente muestran la confiabilidad de RTOS, especialmente para aplicaciones en tiempo real que necesitan tiempo de latencias predecibles. Así es como funciona RTOS: siempre conoce el tiempo de respuesta exacto de cualquier operación que se ejecute en su sistema.

Por lo tanto, un sistema operativo en tiempo real es el líder absoluto en la competencia entre RTOS y SO cuando se trata de capacidad de respuesta.

RTOS en sistemas integrados

Los sistemas modernos requieren una mejor funcionalidad, más opciones y oportunidades. Es por eso que la popularidad de los sistemas operativos en tiempo real está creciendo rápidamente en el mundo de las soluciones integradas.

Garantizar la ejecución oportuna de las tareas de alta prioridad es extremadamente importante para las aplicaciones críticas o que salvan vidas y los sistemas en tiempo real que tienen plazos estrictos de ejecución.

Hoy en día, se puede instalar un RTOS en prácticamente todos los MCU modernos. De hecho, mi equipo implementó aplicaciones RTOS en casi todos los proyectos basados ​​en MCU que entregamos dentro de nuestros servicios de diseño electrónico en los últimos años.

Este tipo de sistema operativo ofrece una amplia gama de beneficios. Entonces, ¿por qué usar RTOS integrados en MCU?

Una de las razones más obvias es la multitarea. Esto es innecesario con un sistema simple que solo tiene un par de tareas ejecutándose en secuencia. Pero si necesita realizar muchas tareas simultáneamente, RTOS está a su servicio. Permite al desarrollador ejecutar varias tareas al mismo tiempo.

En caso de que su sistema integrado tenga una priorización estricta de tareas, el programador preventivo de un RTOS permite cambiar a una operación de alta prioridad en cualquier momento, asegurando que se complete primero. Un desarrollador no tiene necesidad de controlar la ejecución de la tarea porque un RTOS se encarga de ello.

Un RTOS ofrece a los desarrolladores la capacidad de realizar múltiples subprocesos y sincronizar, lo que facilita su trabajo. Sin RTOS, la implementación de estas opciones llevaría mucho más esfuerzo.

Un efecto secundario que puede encontrar al usar un RTOS son los problemas de memoria. No es el RTOS en sí el que necesita los recursos de memoria, sino las múltiples tareas que puede completar en tiempo real. Por lo tanto, debe asegurarse de que su MCU tenga suficiente RAM para adaptarse a un sistema operativo en tiempo real.

La falta de recursos centrales de la CPU también puede ser motivo de preocupación para una solución RTOS. La sobrecarga dependerá de un microcontrolador en particular y su funcionalidad.

Las características del chip junto con los requisitos del proyecto deben tenerse en cuenta si decide optar por un RTOS.

Por ejemplo, el nRF52832 es un sistema multipropósito en un chip (SoC) ofrecido por Nordic Semiconductor que se usa ampliamente con aplicaciones basadas en BLE. Sin duda, es compatible con una solución RTOS.

En uno de nuestros proyectos, desarrollamos un sistema de seguimiento con dispositivos BLE basado en el nRF52832. Tuvimos que abandonar la idea de usar un RTOS con este chip para poder reducir el consumo de energía.

Otro ejemplo está relacionado con el desarrollo de un dispositivo de ECG basado en el BGM113, que es un módulo BLE desarrollado por Silicon Labs. No utilizamos una solución RTOS en este proyecto, por lo que pudimos ahorrar recursos de memoria de la MCU.

Por supuesto, puede prescindir de un RTOS y seguir cumpliendo los plazos de las aplicaciones en tiempo real. Esto es así en procesos que constan de una sola tarea ( o dos), aunque esta sea estricta.

Por ejemplo, puede usar una máquina de estado y manejadores de interrupciones para diseñar todos los algoritmos necesarios para que una MCU habilite algún tipo de multitarea, sincronización y otras funciones útiles.

Sin embargo, para implementar todo esto, necesitará recursos de desarrollo adicionales. Eso es algo que la mayoría de las empresas tratan de evitar. Es por eso que se prefiere incorporar RTOS a la programación completa.

Un sistema operativo en tiempo real distribuye recursos, toma el control de todas las operaciones y ahorra tiempo.

Cómo elegir un RTOS

Un RTOS puede ayudar a su proyecto de varias maneras. Antes de elegir un RTOS, asegúrese de que su sistema basado en MCU realmente necesite una solución RTOS.

Las soluciones RTOS son necesarias para lo siguiente:

  • Si necesita ejecutar varias tareas simultáneamente para cumplir con los plazos especificados.
  • Si las tareas de alta prioridad necesitan una garantía de ejecución inmediata.
  • Si una respuesta oportuna es crucial para el sistema y se debe predecir la latencia.

Aquí hay una breve lista de verificación de las cosas más importantes que debe tener en cuenta al momento de decidirse por una solución RTOS:

  • Compruebe el potencial del núcleo de la CPU que se utiliza en el microcontrolador y si se puede ejecutar un RTOS en él.
  • Vea las capacidades de RAM. Si no hay suficiente RAM disponible, probablemente debería pensar en seleccionar otro chip.
  • Asegúrese de poder obtener todo el software necesario para ajustar un RTOS a su hardware. Estos pueden incluir paquetes de soporte de placa, controladores, bibliotecas, etc.
  • Consulte la disponibilidad de herramientas de desarrollo y depuración.
  • Asegure la disponibilidad de la documentación RTOS requerida y / o una amplia comunidad de desarrolladores.

Además, piense en el presupuesto que está dispuesto a asignar para la integración de RTOS. La elección entre un RTOS comercial y una solución de código abierto depende tanto del desarrollo como de los recursos financieros disponibles.

Hay varias opciones disponibles entre productos de código abierto o comerciales. Los sistemas operativos en tiempo real proporcionados bajo una licencia de pago normalmente están respaldados con soporte técnico, documentación y herramientas de desarrollo. Sin embargo, esto depende del proveedor.

Entonces, antes de comprar una licencia, asegúrese de tener todo lo que necesita para instalar y ejecutar sin problemas el RTOS en su dispositivo.

Los proveedores comerciales proporcionan actualizaciones periódicas y parches de seguridad que facilitan el mantenimiento del sistema.

Algunos ejemplos de RTOS comerciales incluyen VxWorks de Wind River Systems, QNX de Blackberry, Integrity de Green Hills Software, embOS de SEGGER, ThreadX de Microsoft Express Logic.

Estos RTOS generalmente están diseñados para sistemas integrados y pueden admitir las plataformas de hardware más utilizadas. En cualquier caso, debe verificar la compatibilidad de un RTOS con su arquitectura MCU.

Un RTOS de código abierto es una solución flexible que brinda más oportunidades de personalización. Sin embargo, supone una carga adicional para un desarrollador debido a la ausencia de soporte regular y herramientas listas para usar necesarias para el funcionamiento de RTOS.

Entonces, si se decide por una solución de código abierto, le recomendamos que elija un RTOS con una gran comunidad de desarrolladores. Es más probable que obtenga ayuda con herramientas de desarrollo, actualizaciones y parches de seguridad.

Entre los RTOS de código abierto se encuentran FreeRTOS, Zephyr, RTLinux, eCos, RIOT y muchos otros.

FreeRTOS es uno de los RTOS de código abierto más populares que se utilizan en los sistemas integrados basados ​​en MCU. Lo usamos en varios proyectos recientes. También lo recomendamos a los novatos en el desarrollo de aplicaciones en tiempo real e integración de sistemas operativos.

Real time operating system 5

FreeRTOS es compacto, por lo que puede ejecutarse en cualquier chip de tamaño pequeño. Es bastante rápido y mantiene la concurrencia de tareas a altas velocidades, proporcionando una respuesta oportuna para las operaciones requeridas.

Una de las ventajas más importantes de FreeRTOS es su alta portabilidad. Es compatible con todas las principales plataformas de hardware, incluidas ARM, Atmel AVR, PIC, x86, ESP32 y muchas otras.

Con todo, es realmente difícil destacar el mejor RTOS en una comparación de RTOS de código abierto frente a comerciales. Un RTOS comercial puede no ser tan rentable y flexible como un RTOS de código abierto. Sin embargo, no se beneficiará de una solución de código abierto si no tiene experiencia interna o una comunidad de desarrolladores sólida.

Las características básicas, como la seguridad, el rendimiento y la compatibilidad de la plataforma RTOS, dependen principalmente de cada producto en particular, independientemente del tipo de licencia.

Conclusión

Un sistema operativo en tiempo real proporciona una respuesta inmediata dentro de un período de tiempo predecible. Es la opción más obvia para los sistemas que necesitan realizar tareas de alta prioridad con plazos críticos.

La principal ventaja de usar un RTOS en un microcontrolador es que hace que el proceso de desarrollo sea menos doloroso, lo que le ahorra tiempo y esfuerzo.

Al compensar las capacidades limitadas del microcontrolador, un RTOS se encarga de la gestión de recursos, clasifica las prioridades y mantiene la concurrencia de tareas.

Tan pronto como se haya decidido a utilizar un RTOS en su proyecto, podrá encontrar una solución adecuada entre una amplia gama de diversas soluciones RTOS integradas. Hay opciones para cualquier plataforma de hardware ofrecida por proveedores propietarios o proyectos de código abierto.

Siempre es mejor intentar optimizar el proceso de desarrollo para que sea más eficiente y requiera menos tiempo. Una forma de hacerlo para muchos proyectos es mediante el uso de un RTOS.


Deja un comentario