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.
por favor harías un vídeo sobre esto, seria de gran ayuda.
ResponderBorrarHola, si, voy a hacer uno, hace mucho que no toco RTOS en PIC!
BorrarSaludos!
Saludos. Que hardware mínimo se necesitaría?.
ResponderBorrarHola en la practica lo pude meter en una linea 12F, el problema (en este RTOS) no es el proceso solo la memoria en flash.
BorrarSaludos.
Disculpa, como se podria hacer la simulacion de un rtos? y en que programa?
ResponderBorrarHola, 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.
BorrarSaludos.