20.04.2013 Views

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

9 de 22<br />

}<br />

void LED_V()<br />

{<br />

iB1 = !iB1;<br />

output_bit( PIN_B1, iB1);<br />

if (iCountV++==27)<br />

{<br />

iCountV = 0;<br />

rtos_disable(LED_V);<br />

rtos_<strong>en</strong>able(LED_A);<br />

}<br />

}<br />

void LED_A()<br />

{<br />

iB2 = !iB2;<br />

output_bit( PIN_B2, iB2);<br />

if (iCountA++==33)<br />

{<br />

iCountA = 0;<br />

rtos_disable(LED_A);<br />

rtos_<strong>en</strong>able(LEDS);<br />

}<br />

}<br />

void LEDS()<br />

{<br />

if(!iLEDS)<br />

{<br />

rtos_<strong>en</strong>able(LED_R);<br />

rtos_<strong>en</strong>able(LED_V);<br />

rtos_<strong>en</strong>able(LED_A);<br />

iLEDS = 1;<br />

}<br />

else<br />

{<br />

rtos_disable(LED_V); //Hay que habilitar y deshabilitar explícitam<strong>en</strong>te<br />

rtos_disable(LED_A); //cada tarea sobre todo LED_R que debe continuar<br />

rtos_disable(LEDS); //ejecutándose otros 5 segundos más<br />

rtos_<strong>en</strong>able(LED_R);<br />

iCountR = 0;<br />

iCountV = 0;<br />

iCountA = 0;<br />

iLEDS = 0;<br />

}<br />

}<br />

Cuando corran y simul<strong>en</strong> el ejemplo verán que a veces los LEDs se quedan <strong>en</strong>c<strong>en</strong>didos o apagados<br />

indistintam<strong>en</strong>te, <strong>este</strong> es un problema del programa, ya que lo deseable sería que los LEDs se quedaran<br />

apagados cuando termina la función. Sin embargo lo he dejado así porque <strong>en</strong> el futuro vamos a ver cómo<br />

podemos hacer esto con las propias funciones del RTOS.<br />

Como la vez anterior, les dejo de tarea hacerlo sin RTOS para ver como les queda, a mi llevó m<strong>en</strong>os de dos<br />

horas elaborar el texto y escribir el código. Me imagino que sin RTOS me tardaría más de un día completo,<br />

consumiría un montón de páginas de explicación y otro montón para el código.<br />

Este es un método simple, pero hay otros mucho más elaborados que iremos vi<strong>en</strong>do poco a poco. La próxima<br />

<strong>en</strong>trega será yield() vs delay(), vamos a ver el método de las esperas efici<strong>en</strong>tes.<br />

[Volver al Índice]<br />

> Yield vs delay<br />

¿Cuantas veces <strong>en</strong> nuestras aplicaciones t<strong>en</strong>emos que situar demoras para esperar la ocurr<strong>en</strong>cia de un ev<strong>en</strong>to<br />

determinado? Por ejemplo, para eliminar rebotes <strong>en</strong> un teclado, esperar a que el conversor AD termine y quién<br />

sabe cuantas cosas más.<br />

Normalm<strong>en</strong>te estas demoras se hac<strong>en</strong> poni<strong>en</strong>do al procesador a decrem<strong>en</strong>tar contadores y dar saltos<br />

recursivos como si fuese un loco. Durante todo el tiempo de la demora, nuestro microcontrolador, estará<br />

ocupado <strong>en</strong> perder el tiempo, y es por eso que a <strong>este</strong> mecanismo se le llama espera ocupada.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!