Algunas razones por las cuales deberías usar un RTOS en tu siguiente proyecto

El título de esta entrada podría replantearse como ¿porqué no usar siempre un RTOS (Real Time Operating System, o en español, Sistema Operativo de Tiempo Real) en nuestros  proyectos? Algunas respuestas que no aceptaría serían: porque es muy difícil; porque no quiero aprender cosas nuevas; porque soy feliz haciendo las cosas así como las he venido haciendo; porque un RTOS se va a comer los pocos recursos de mi chip; etc. De todas ellas la última sería la más válida. Sin embargo no es del todo cierta ya que existen RTOS para todos los gustos y tamaños.

Continuando con esta entrada, el título original presupone que daré unas cuantas razones para usar un RTOS en nuestros próximos proyectos, aunque consideremos que no es necesario. Y así será. Pero en verdad utilizar un RTOS tiene muchas ventajas para nosotros y para el proyecto en cuestión.

No nos hace daño

Basar nuestros proyectos en un RTOS no le hace daño a nadie; todo lo contrario. El argumento aquel que dice que el RTOS se va a comer todos los recursos no es exactamente cierto. El abaratamiento de la FLASH, la RAM, de la velocidad de procesamiento, y la inclusión de diversos timers, nos permiten incluir un RTOS sin mayor problema y sin sacrificar recursos limitados.

Algunos podrían argumentar “Un RTOS hará más lento a nuestro sistema”. La respuesta es un rotundo NO. Esta respuesta llega directamente del mantra aquel que reza “Hazlo funcionar. Luego límpialo. Y después, si es estrictamente necesario, hazlo más rápido”.

Un RTOS nos hace pensar diferente acerca de la organización lógica de nuestro proyecto

Usar un RTOS implica dividir a nuestro proyecto en tareas o procesos, y en subtareas o subprocesos. De aquí que exista la obligación por parte del diseñador o programador de organizar su código en forma no lineal, ya que deberá encontrar la forma de comunicar un proceso con otro, diferir ciertas acciones, manejar las interrupciones, decidir cuáles tareas son más importantes que otras, etc.

Atacar cada una de estas cuestiones (y otras no mencionadas) nos dará una visión completamente diferente de nuestro proyecto a como la habíamos concebido en un principio. Los resultados son muy interesantes.

Usar un RTOS nos hará mejores diseñadores y programadoes

Debo aceptar que esta afirmación no será del todo cierta en todas las circunstancias pero, derivado de todo lo mencionado hasta este momento, los reto a autocalificarse como diseñadores y programadores antes y después de usar un RTOS en su proyecto más próximo.

Modularidad

Dentro de las ventajas técnicas de usar un RTOS ésta es de las más importantes: nuestros programas se harán más modulares. Y como todos sabemos, un programa modular siempre será más fácil de mantener y actualizar que uno realizado en forma monolítica. Vamos a ser capaces de organizar nuestras ISRs (interrupciones) con sus respectivos drivers (manejadores), y estos a su vez con los procesos que hagan uso de los datos arrojados por las interrupciones. Por otro lado, tendremos que los procesos que consideremos no son tan importantes los hemos de diferir para cuando el CPU esté libre y los activaremos sólo cuando sea necesario. ¡Me lleno de emoción sólo de pensar en este código no lineal!

Liberación del CPU

Una ventaja del RTOS es la facilidad con la que podremos devolver el CPU cuando uno de nuestros procesos no la requiera por el momento. Esta característica tiene mucho que ver con aquella de pensar diferente acerca de nuestro proyecto debido a que tendremos que analizar los momentos en que el proceso deba devolver el CPU.

Otra ventaja es el ahorro de energía para aquellas aplicaciones de batería. Si no hubiera nada por hacer, entonces mandamos al CPU a hibernación. Algún lector anti-RTOS podría decir “El tick del sistema estará despertando al CPU aún cuando no es necesario, por lo que no hay ningún ahorro de energía”. Cierto y falso. Este es un argumento cierto si es que no estamos considerando lo siguiente: los RTOS más populares incluyen una característica conocida como “tick-less scheduler”, es decir, un manejador de tareas que no depende del tick del sistema. De esta manera, el CPU pasará al estado activo solamente cuando una interrupción sea disparada.

Hay que tener en cuenta que en un RTOS el CPU se puede liberar al menos de dos formas: con una instrucción Yield(), o con una instrucción Sleep() (los nombres pueden variar dependiendo del RTOS que hayamos escogido, pero la funcionalidad es la misma).

Múltiples retardos

Esta es mi característica preferida. Si en sus proyectos han tenido que lidiar con diferentes retardos (tiempos diferentes) al mismo tiempo, entonces sabrán que el código puede convertirse en una pesadilla muy rápido. Dividir el proyecto en tareas, y poder mandarlas dormir cuando sea necesario y en forma independiente, nos da una gran flexibilidad en la organización lógica del proyecto.

Palabras finales

Estoy incierto si pude convencer a alguien sobre utilizar un RTOS para sus próximos proyectos, pero me sentiré satisfecho si al menos pude mover un poco de su curiosidad acerca de este tema tan fascinante (tema que no solo es actual, sino que se volverá una tendencia en un tiempo no muy lejano).

Como siempre, pueden dejar sus comentarios para intercambiar ideas.

 

 

Anuncios

3 comentarios sobre “Algunas razones por las cuales deberías usar un RTOS en tu siguiente proyecto

  1. Hola,
    Muy buen blog, es el primero que encuentro en español, todavía soy estudiante (Ing Electronica) pero me interesa mucho este tema (Sistemas Embebidos).
    Mi duda es la siguiente:
    ¿Donde obtener todo el “background” de como funcionan los sistemas operativos?, ¿Es necesario saber lo anterior para poder usar correctamente o de manera mas eficiente un RTOS?, ¿En que momento decidir que ocuparemos un RTOS en nuestro proyecto?

    Gracias de antemano
    Saludos

    1. Gracias por tus comentarios. Haz hecho tres preguntas muy interesantes y voy a tratar de responderlas por aquí en forma breve, pero en cuanto tenga tiempo escribiré una entrada exclusivamente para acomodar en los temas que planteas.

      ¿En qué momento se decide uno a usar un RTOS? Es una pregunta difícil de responder, pero tiene que ver directamente con la complejidad del proyecto a mano. Una aplicación que controla dos leds es muy simple como para incluir al RTOS. En el extremo opuesto, una aplicación que hace uso intensivo de diferentes fuentes de interrupciones es un candidato perfecto.

      No es necesario conocer a fondo los sistemas operativos para usarlos, pero sí que debemos tener nociones de conceptos que son básicos para poderles sacar todo el provecho. Entender qué son los procesos, qué significa liberar a la CPU, conocer los diferentes tipos de schedulers, etc. Por supuesto que dominar el tema de los sistemas operativos tendrá un impacto directo sobre la forma en que los utilicemos. Y esto nos lleva a la siguiente cuestión.

      ¿Dónde obtener todo el background de los RTOS y los sistemas operativos en general? Yo lo hice de dos formas: leyendo muuuuchos libros sobre sistemas operativos, y escribiendo mi propio RTOS. Aventarse todo este proceso no es fácil ni es para todos, por lo que mi recomendación es que leas y entiendas lo básico de los sistemas operativos y RTOS, y comiences a usarlos con aplicaciones sencillas, y posteriormente vayas incrementa do el nivel de éstas. Y cuando te sientas con toda la confianza del mundo entonces ya podrías meterte a temas más avanzados, a estudiar el código de RTOS populares, y porqué no? escribir el tuyo propio.

      1. Que tal, gracias por la respuesta, pensé que tenia las notificaciones activadas y nunca me llego el correo de notificación ;(.

        Con respecto a los libros, tendrás algunos favoritos?, algunos que me pueda recomendar?.
        Por el momento solo he leído poco de FreeRTOS y OSEK, pero como dices todos tienen las mismas bases.
        Y si seria muy interesante implementar un RTOS propio, espero algún día hacer uno :D.

        Saludos

        Carlos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s