Está en la página 1de 5

1)

os_tsk_pass
La funcin os_tsk_pass le da el control a la siguiente tarea de la misma prioridad
que se encuentre en estado listo. Si no hay tarea de la misma prioridad en
espera, la tarea en ejecucin continua corriendo y no ocurre un cambio de tarea a
ejecutar. No requiere parmetros y no devuelve ningn valor

os_tsk_self
La function os_tsk_self devuelve el task identifier number (TID) de la actual
tarea en ejecucin. No necesita parmetros.

os_evt_wait_or
La funcin os_evt_wait_or espera a que uno de los eventos especificados en las
wait_flags se produzca. La funcin slo espera en eventos cuyas banderas
correspondientes se han puesto a 1 en el parmetro de wait_flags. La funcin
puede esperar un mximo de 16 eventos diferentes. Se puede utilizar el
argumento de tiempo de espera para especificar la longitud de tiempo despus del
cual la funcin debe devolver un valor incluso si no se da ninguna de los eventos.
Se puede utilizar cualquier valor de tiempo de espera con la excepcin de
0xFFFF , que se puede utilizar para especificar un tiempo de espera indefinida . La
unidad de medida del argumento de que el tiempo ha caducado es el nmero de
intervalos de sistema.
La funcin os_evt_wait_or retorna cuando se ha producido al menos uno de los
eventos especificados en los wait_flags o cuando expira el tiempo de espera.
La funcin os_evt_wait_or devuelve un valor para indicar si se produjo un evento o
el tiempo de espera caducado.

Valor

Descripcin

devuelto
OS_R_EVT
OS_R_TMO

Al menos una de las banderas especificadas por wait_flags ha


sido determinada
El tiempo ha caducado

os_evt_wait_and
La funcin os_evt_wait_or espera a que todos los eventos especificados en las
wait_flags se produzcan. La funcin slo espera en eventos cuyas banderas
correspondientes se han puesto a 1 en el parmetro de wait_flags. La funcin
puede esperar un mximo de 16 eventos diferentes. Se puede utilizar el
argumento de tiempo de espera para especificar la longitud de tiempo despus del
cual la funcin debe devolver un valor incluso si no se da ninguna de los eventos.
Se puede utilizar cualquier valor de tiempo de espera con la excepcin de
0xFFFF , que se puede utilizar para especificar un tiempo de espera indefinida . La
unidad de medida del argumento de que el tiempo ha caducado es el nmero de
intervalos de sistema.
La funcin os_evt_wait_or retorna cuando se han producido todos los eventos
especificados en los wait_flags o cuando expira el tiempo de espera.
os_dly_wait
La funcin os_dly_wait detiene la tarea llamada. El parmetro de DELAY_TIME
especifica la duracin de la pausa y se mide en nmero de intervalos del sistema o
ciclos de clock . Puede establecer el DELAY_TIME a cualquier valor entre 1 y
0xFFFE .
La funcin os_dly_wait no devuelve ningn valor.
2)Event flag o en espaol bandera de eventos es un bit que se active
automticamente cuando el contador del registro llega a 0. Si la interrupcion de
tiempo (registro) est habilitada. La bandera se limpia cuando se escribe 1 en
ella. Cabe recalcar que escribir un 0 en el bit de la bandera de eventos, o escribir
un 1 cuando el timer event no est activado no tiene ningn efecto por lo que
hay que esperar que este activado para limpiar y que la bandera sea til de nuevo.
Las banderas se usan para saber cuando ha terminado un evento que puede ser
de cuenta,etc y en base a esa informacin poder tomar una decisin de la
siguiente tarea a ejecutar, mayormente se usa en condicionales o para romper
bucles

#include <RTL.h>
OS_TID id1, id2, id3, id4;
unsigned int counter1;
unsigned int counter2;
__task void task1 (void);
__task void task2 (void);
__task void task1 (void) {
id1 = os_tsk_self ();
os_tsk_prio_self (3);
id2 = os_tsk_create (task2, 4);

while (1) {
counter1++;
}
}
__task void task2 (void) {
while (1) {
counter2++;
}
}
int main (void) {
os_sys_init (task1);
}

3)

En el programa al ejecutarse el main , se usa la funcin os_sys_init la cual


inicializa y empieza a correr el sistema en tiempo real (RTX) kernel, se ve en el
programa que la funcin recibe como parmetro task1 , lo que hace que se apunte
a la funcin task1 luego de que el kernel sea inicializado y se le da una prioridad
de 1. Seguido de esto, se ejecuta la funcin task1, donde se guarda en id1 el TID
de la actual tarea , tras esto se ejecuta os_tsk_prio_self (3) , lo cual cambia la
prioridad de la tarea que est ejecutndose en 3.
En la siguiente lnea de cdigo se ve que se ejecuta la lnea id2 = os_tsk_create
(task2, 4) , lo cual hace que se apunte hacia la funcin task2 y se le d una
prioridad de 4. Al ser esta prioridad mayor que 3. Se ejecuta la funcin task2 y se
incrementa counter2 y no counter1 dado que antes de entrar al bucle donde se
encuentra counter1, las prioridades cambiaron y se apunt a la funcin que estaba
como parmetro, ejecutndose as task2.

4) Para lograr que se incrementen ambos contadores

__task void task1 (void) {


id1 = os_tsk_self ();
os_tsk_prio_self (3);

while (1) {
counter1++;
id2 = os_tsk_create (task2,(counter1+3));

}
}

__task void task2 (counter1) {


while (1) {
counter2++;

id2 = os_tsk_create (task1,counter2+3);

}
}
Asumiendo que ambos contadores estn inicializados en 0, dichas modificaciones
harn que se incremente counter2 y luego modificando las prioridades vaya a la
funcin task1 y se incremente counter1 y luego lo mismo a counter2 y asi ambos
sern incrementados.

También podría gustarte