Para el que quiera modificar el programa, solo tiene que adaptarlo al micro PIC con el que esté trabajando y modificar las tareas o task añadiendo su propio código.
Este es el ejemplo de una tarea:
/*
* TASK 0
*/
void task0(void) {
rtos_add_function();
INTCONbits.GIE = 1;
while (1) {
TRISCbits.TRISC4 = 0;
LATCbits.LATC4 = 1;
LATCbits.LATC4 = 0;
yield();
}
}
La función rtos_add_function(); es necesaria para que se añada esta tarea a la pila y lo sepa el task switcher que será el encargado de cambiar entre una tarea y la otra.
La orden while(1) es necesaria para que la tarea se ejecute siempre en bucle. No puede haber un return de esta tarea porque no hay ninguna dirección de retorno en la pila.
La orden yield(); cambiará la ejecución a la otra tarea. Hay que colocarla en las esperas o cada pocas instrucciones para que las dos tareas tengan tiempo de ejecución.
El código de usuario se coloca dentro de la orden while(1) { }
En este ejemplo es un simple encendido y apagado de un pin del micro.
En caso de necesitar activar las interrupciones es importante hacerlo una vez que todo está preparado, en el sitio en el que ahora está la instrucción INTCONbits.GIE = 1;, después de rtos_add_function();
Esto es para prevenir problemas a la hora de preparar la pila o stack para las tareas cooperativas.