TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cvargcal en 15 de Mayo de 2016, 23:10:27

Título: TimeOut
Publicado por: cvargcal en 15 de Mayo de 2016, 23:10:27
Hola a todos,
encontré este código en la red, es un TimeOut, funciona bien, que básicamente es multiplicar x numero por el delayms(1000).
Pero tengo una duda, cuando se genera ese retardo delay_ms(1000), la interrupción RDA sigue funcionando?
Es decir, un delay es un retardo, pero el procesador se "congela" por ese momento, de ahí me surge la duda si las interrupciones siguen trabajando a pesar de esos "congelamientos".

O si simplemente funciona este timeout porque la respuesta es muy rápida y obviamente la interrupción RDA alcanza a capturar?
 :mrgreen:


Código: C
  1. int1 DELAYs(int Delay_ctr)
  2. {  
  3.    counter_read=0;                                            // Reset buffer counter
  4.    while((counter_read==0)&&(Delay_ctr>0))      // stay here until modem responds (X Seconds is arbitrary)
  5.    {                              
  6.    delay_ms(1000);                      
  7.    Delay_ctr--;
  8.     }
  9.    if((counter_read==0)&&(Delay_ctr==0))
  10.    return(1);
  11.    if((counter_read==0)&&(Delay_ctr>0))
  12.    return(0);            
  13. }
Título: Re:TimeOut
Publicado por: KILLERJC en 15 de Mayo de 2016, 23:33:51
La interrupcion sigue funcionando, vamos a la oficina un rato

El procesador esta haciendo "nada" mirando unos papeles en su escritorio del area "programa principal", al momento de la interrupcion el señor procesador es molestado por el hardware encargado de las interrupciones, y le indica que debe hacer otra cosa SI o SI, el procesador deja su escritorio tal cual estaba, marcando donde estaba mirando por ultima ves, y procede a irse a hacer lo que tenga que hacer en la interrupcion, Finalizada la tarea vuelve a su area en el "programa principal" y sigue rascandose (delay) mirando archivos y empezando desde donde habia dejado marcado.

Espero haber sido claro :P

De todas formas un "delay" es una mala implementacion de un timeout. Es preferible un timer e interrupciones.
Título: Re:TimeOut
Publicado por: cvargcal en 16 de Mayo de 2016, 00:02:35
....

Excelente respuesta.  :lol:
Si, lo implementare con un time#, pero mas que eso quería saber sobre la interrupcion.
Gracias