jueves, 25 de julio de 2013

FreeRTOS en PIC18 II.

Volviendo con FreeRTOS, en esta entrada os voy a hablar de la tarea IDLE, es decir, la tarea REPOSO. En primer lugar, vamos a recordar como funciona un sistema operativo, que no es más que un gestor de tareas para que aparentemente tengamos un sistema que puede ejecutar varias tareas al mismo tiempo. En la entrada anterior creamos una tareas repetitivas que se repetian cada 250 y 350 milisegundos, pero ¿que pasa cuando esas tareas no se están ejecutando?, bien, en ese momento, el procesador está esperando, no tiene nada que hacer, es lo que se conoce como tiempo ocioso del procesador. Evidentemente, si queremos optimizar al máximo el procesador, lo ideal sería que durante este tiempo, el procesador siguiera trabajando, pero ¿en que?. 

Lo primero que se debe hacer es diferenciar entre 2 tipos de tareas, las tareas síncronas, y las tareas asíncronas. Las primeras de ellas tienen una frecuencia de ejecución, y en ocasiones es altamente recomendable que ese tiempo se cumpla de forma escrupulosa, por ejemplo en sistemas críticos en los que se dos sistemas independientes deben realizar una acción al mismo tiempo. Las segundas son tareas que no tienen porque ejecutarse a una frecuencia determinada, simplemente, deben ejecutarse, por ejemplo la actualización de la información de una pantalla, no es algo tan crítico, como ejecutar un control a una frecuencia que hemos calculado. Los desarrolladores de FreeRTOS ya han pensado en esto, y la tarea idle ya nos la proporcionan sin hacer nada mas que activarla, y después llamarla.
En primer lugar tenemos que abrir el archivo FreeRTOSConfig.h y cambiar la siguiente línea:
//#define configUSE_IDLE_HOOK    0   // No se llama a la función idle
#define configUSE_IDLE_HOOK    1   // Se llama a la función idle
Una vez activada la tarea tan solo tenemos que definirla en el programa principal de la siguiente forma:
//  Tarea reposo
void vApplicationIdleHook( void )
{
    LATBbits.LATB2=!PORTBbits.RB2;
}
Eso es todo lo que se ha de hacer, en la siguiente entrada, como dije, tratare el tema de los semáforos.

No hay comentarios:

Publicar un comentario