RTOS en microcontroladores


#1

Buenos días,
Alguien por aquí que domine el uso de RTOS en uC para dar su opinión y hablar de su experiencia?
No llevo largos años dedicándome a esto así que no alcanzo a tener un criterio fiable para mí misma.
Hasta ahora he estado creando aplicaciones, sobretodo, para ARM y PIC; partiendo de 0, desde los módulos de drivers hasta módulos de más alto nivel de abstracción como las tareas (código de aplicación), gestión de interrupciones y montando los schedulers más básicos con contadores de ticks (basándome en timer). Donde aquí la prioridad la marca el orden en que coloco las llamadas en este contador. Las tareas de periodicidad más corta irán en el contador de menor valor y las más tardías en el de mayores valores, etc.

Cuando ya quieres o necesitas algo más sofisticado, puedes recurrir a los RTOS disponibles en el mercado, algunos gratis otros de pago. Pero la gente que conozco me comenta que integrar RTOS en un uC y crear un proyecto basado en este, es parecido a andar por el infierno.
Desconozco dónde radica la dificultad o el motivo por el cual son tan temidos, puesto que no tengo ese background. Si vienen con sus APIs debería facilitar más las cosas. Es como usar librerías de terceros. Es mi suposición.

Por eso si alguien tiene experiencia a ver si puede comentar algo aquí. Me gustaría conducir el hilo hacia el tema de: cómo elegir un RTOS para tu proyecto, saber cuándo realmente es más práctico usar un RTOS para gestionar tus tareas y comunicaciones o simplemente buscarte un stack que integre servicios que tu código pueda necesitar. Como puede ser el caso de querer hacer hablar un uC con tu chip de Ethernet para enviar datos que le pasa el uC.

Saludos a todos.


#2

Bueno, yo creo que ese infierno no es tal para una persona capaz de programar schedulers y controlar procesos a nivel de tick. Creo que en tu caso, que entiendes bien el concepto de tiempo en computación, un RTOS te va a solucionar muchos problemas. El OS/RTOS te simplifica la tarea en tanto en cuanto a que implementa de modo nativo semáforos, colas, schedulers, etc. Hay muchos OS y RTOS para microcontroladores. Cada fabricante suele trabajar con alguno, sobre todo en el caso de los microcontroladores de gamas más altas. Si lo que quieres es algo de tipo open source, FreeRTOS es una buenísima opción ya que Amazon Web Services está detrás y tiene licencia MIT (Open Source). La diferencia entre OSs y RTOSs radica principalmente en la garantía de latencia máxima de los RTOSs. Si no tienes requisitos de latencia tan extremos te puede interesar otras opciones particularizadas para aplicaciones concretas.

Algunos OS/RTOS:

  • FreeRTOS: uno de los más versátiles y extendidos. Soporta más de 30 arquitecturas (https://www.freertos.org/RTOS_ports.html). Amazon Web Services está detrás, lo cual es una garantía.

  • TinyOS: diseñado especialmente para enjambres de nodos inalámbricos como podrían ser las famosas Motes de hace unos 10 años. Una de sus peculiaridades es la disponibilidad de algoritmos de enrutamiento automático. Creo que no es RT y puede que esté un poco desfasado pero si lo que quieres es que el propio enjambre busque el camino óptimo hasta el nodo de enlace, puede ser una buena opción.

  • uClinux: distro Linux mínima para microcontroladores. No sé en qué estado de desarrollo está porque además la página hoy está caída.

  • ROS (Robot Operating Systems): es más que un OS, es un entorno de trabajo completo para desarrollar aplicaciones en el ámbito de la robótica.

No sé si te servirá de algo, pero haciendo el trabajo que haces yo te animaría a dar el salto. No creo que te resulte complicado.

Saludos.


#3

Gracias, Haktalia. Me comentaron por ahí que justamente las aplicaciones con Ethernet tienen necesidades temporales y de espacio de memoria bastante críticas con lo cual el uso de RTOS en estos casos está más que justificado.

Pero que tiene su intríngulis porque en empleo de RTOS debes tener claros una serie de conceptos: semáforos, concurrencia, colas de tarea, prioridades, que más vale dominar o empiezas ya a abrir esa puerta a los avernos, jaja.

En resumen, hay que saber lo que lo que se toca y lo que se hace con ello.

Saludos cordiales.