Está en la página 1de 6

LABORATORIO N3

TAREA
Haris Chaudhry Mendvil (20131628)
1.

os_tsk_pass
Descripcin: Pasa el control a la prxima tarea de la
misma prioridad en estado listo. Si no hay uno de la
misma prioridad, sigue en la misma tarea.
Valor de retorno: No retorna ningn valor.
Estructura: void os_tsk_pass (void);
Parmetros: Ninguno.

os_tsk_self

Descripcin: Sirve para identificar el ID de la tarea que


est corriendo actualmente.
Valor de retorno: Retorna el nmero identificador de tarea
(TID).
Estructura: os_tsk_self (void);
Parmetros: Ninguno.

os_evt_wait_or

Descripcin: Sirve para esperar alguno de los eventos


especificados. Valor de retorno: Retorna OS_R_EVT si al
menos uno de los eventos especificados ocurri;
OS_R_TMO si expira el tiempo de espera.
Estructura: os_evt_wait_or (U16 wait_flags, U16 timeout);
Parmetros:

wait_flags: Patrn de bits de los eventos a esperar.


Espera a los eventos en el que sus correspondientes
flags estn en 1 (en wait_flags, mximo 16 eventos
diferentes).

timeout: Tiempo mximo de espera del evento medido


en nmero de intervalos del sistema (retorna a pesar
de que ninguno de los eventos haya ocurrido). Se usa
0xFFFF para especificar un tiempo de espera
indefinido.

os_evt_wait_and

Descripcin: Sirve
especificados.

para

esperar

todos

los

eventos

Valor de retorno: Retorna OS_R_EVT si todos los eventos


especificados ocurrieron; OS_R_TMO si expira el tiempo
de espera.
Estructura: os_evt_wait_or (U16 wait_flags, U16 timeout);

Parmetros:
-

wait_flags: Patrn de bits de los eventos a esperar.


Espera a los eventos en el que sus correspondientes
flags estn en 1 (en wait_flags, mximo 16 eventos
diferentes).

timeout: Tiempo mximo de espera del evento medido en


nmero de intervalos del sistema (retorna a pesar de que
ninguno de los eventos haya ocurrido). Se usa 0xFFFF
para especificar un tiempo de espera indefinido.

os_dly_wait
Descripcin: Pausa la tarea llamada.

Valor de retorno: No retorna ningn valor.


Estructura: void os_dly_wait (U16 delay_time);
Parmetros:
-

delay_time: Especifica el tamao de la pausa, que es


medido en nmero de ticks del sistema (desde 1 hasta
0xFFFE).

2.
Event flags
Son bits que sirven para indicar si ocurri un evento.
Usualmente son referidos como event bits. Por ejemplo, un
1 puede significar que ocurri el evento y un 0 que todava
no ocurre. Estos bits se agrupan formando un event group en
el cual cada nmero de bit puede significar la ocurrencia de un
determinado evento.

Ejm: De 24 event bits solo se usan 3.

En un RTOS, cada tarea puede modificar activar o limpiar cada


event bit en un event group; tambin puede esperar por una
combinacin de event bits en un event group.

En el caso de AND, espera por todos los event bits; en OR espera por
algn event bit. Tal como las funciones os_evt_wait_and y

os_evt_wait_or mencionadas anteriormente.


3.
#include 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);
}
Funcionamiento:
Comienza en la tarea task1, asigna el ID de task1 a la variable id1,
configura la prioridad de task1 en 3, crea una segunda tarea task2
con una prioridad de 4, asigna en la variable id2 el ID de task2
(os_tsk_create retorna el TID). Como task2 tiene mayor prioridad, el
OS interrumpe la tarea cambindose a task2 (OS RTX es multitarea
preferente) y se queda ah, en task2 counter2 va aumentando en 1
por bucle.

TASK1

Inacti
vo

List
o

TASK2

Inacti
vo

List
o

Ejecuci
n
Ejecuci
n

List
o

Ejecuci
n

List
o

Al terminar la instruccin id2 = os_tsk_create (task2, 4); de task1,


pasara a ejecutarse task2, al terminar el tiempo mximo de este,
nuevamente se ejecutara task2, y as sucesivamente. Por lo que solo
incrementara counter2.

4.
Para que incrementen tanto counter1 como counter2, task1 y task2
deben tener la misma prioridad, esto se podra realizar reemplazando
la instruccin id2 = os_tsk_create (task2, 4); por id2 =
os_tsk_create (task2, 3);. Con ello, las tareas task1 y task2
alternaran al cumplir su tiempo mximo cada una.

Bibliografa:
-

http://www.keil.com/support/man/docs/rlarm/rlarm_os_tsk_p
ass.htm
http://www.keil.com/support/man/docs/rlarm/rlarm_os_tsk_s
elf.htm
http://www.keil.com/support/man/docs/rlarm/rlarm_os_evt_w
ait_or.htm
http://www.keil.com/support/man/docs/rlarm/rlarm_os_evt_w
ait_and.htm
http://www.keil.com/support/man/docs/rlarm/rlarm_os_dly_w
ait.htm
http://www.keil.com/support/man/docs/rlarm/rlarm_os_tsk_cr
eate.htm
http://www.keil.com/support/man/docs/rlarm/rlarm_os_tsk_pr
io_self.htm
http://www.freertos.org/FreeRTOS-Event-Groups.html
https://doc.micrium.com/display/osiiidoc/Event+Flags

También podría gustarte