Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
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.