RTOS - Sistema Operativo en Tiempo Real



RTOS, Sistema Operativo en Tiempo Real (Real Time Operating System).
Como lo dice su nombre es un sistema operativo en tiempo real, para que sirve?, sencillo supongamos que necesitamos realizar tareas múltiples (Multi Tasking) como por ejemplo Leer un puerto, mientras enviar datos por serie, mientras realizar cálculos, mientras mostrar mensajes en un LCD, etc… Todo esto al mismo tiempo. Sabemos que por ejemplo cuando leemos el canal ADC este mismo funciona por interrupción, es decir, cuando termina la lectura nos permite volcar su dato a una variable, esto demora un tiempo que se puede setear pero supongamos que el tiempo que demora es 200ms, el resto del microcontrolador estará inactivo 200ms hasta que el ADC envíe el valor y devuelva el control al programa principal, si por ejemplo realizáramos otras tareas mientras transcurren esos 200ms?, es aquí donde entra el RTOS, no es mas que un kernel multiplataforma que en este caso sobre CCS para PICmicro nos permite optimizar el tiempo y el procesador, de esta forma nuestro procesador se vuelve mas eficiente y podemos sacarle el mayor provecho.
La forma de funcionar de este RTOS es muy sencilla se basa en algunas directivas y funciones las cuales no comentare todas porque seria muy extenso pero si les comentare las mas comunes y sencillas.
La estructura es la siguiente:

1) Se inicializa el RTOS
#use rtos(timer = 0, minor_cycle = 100ms)

2) Las tareas a realizar puede ser una o más de una
#task(rate=100ms,max=100ms)

Solo con estas dos funciones podemos implementar en nuestro programa un RTOS.

Detalle:
#use rtos(timer = 0, minor_cycle = 1ms)
Esto nos dice que usaremos rtos mediante el timer0 y con un tiempo mínimo de ejecución de cada tarea de 1ms

#task(rate=1s,max=100ms)
Esto nos dice que usaremos una task (tarea) que se ejecutara cada 1s y que como máximo la ejecución tardara 100ms.

Estos valores pueden ser diferentes, va en función de la necesidad de cada tarea.

Un ejemplo de utilización en código C (CCS)

#include<rtos.h>
#use rtos(timer = 0, minor_cycle = 1ms)
#task (rate=1s, max=10ms) //Ejecuta cada 1 segundo, dura máximo 10ms  
void func1();//Llama a la función func1();
#task (rate=2s, max=10us) //Ejecuta cada 2 segundos, dura máximo 10us  
void func2();//Llama a la función func2();

main(){
 
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); //TMR0 para el RTOS
   rtos_run();//Función que ejecuta el RTOS
}  
void func1(){  
   printf("Ejecuta primera task\n");  
}  
void func2(){
   printf("Ejecuta segunda task\n");  
}

Bueno esta es la forma de utilizar RTOS, nótese que se utilizaron dos funciones donde dentro de ellas se puede poner la tarea que uno quiera, pero podrían haber sido mas de dos tareas, o bien también puede no utilizarse funciones y se puede incluir el código directamente de bajo de la definición de las tarea del rtos.

A este programa le faltan las directivas del microcontrolador que utilizaran en su proyecto, como librería, configuraciones, etc… Es solo a modo informativo de cómo se utiliza el RTOS.

NOTA: existen otras funciones mas específicas como para interrupciones especiales, o retornos de datos según el funcionamiento, es posible configurar las task por ejemplo para que nos devuelva un valor si la tarea fue realizada correctamente o no, entre otras cosas.

6 comentarios:

  1. por favor harías un vídeo sobre esto, seria de gran ayuda.

    ResponderBorrar
    Respuestas
    1. Hola, si, voy a hacer uno, hace mucho que no toco RTOS en PIC!
      Saludos!

      Borrar
  2. Saludos. Que hardware mínimo se necesitaría?.

    ResponderBorrar
    Respuestas
    1. Hola en la practica lo pude meter en una linea 12F, el problema (en este RTOS) no es el proceso solo la memoria en flash.
      Saludos.

      Borrar
  3. Disculpa, como se podria hacer la simulacion de un rtos? y en que programa?

    ResponderBorrar
    Respuestas
    1. Hola, podes simular el programa en Proteus, ahí armas el circuito y cargar el fuente en el integrado, luego simulas sin problemas el código que hiciste, debería andar.
      Saludos.

      Borrar