TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: badtzdizzy en 07 de Abril de 2005, 12:00:00

Título: Cómo calcular tiempo de ejecución de líneas
Publicado por: badtzdizzy en 07 de Abril de 2005, 12:00:00
Hola

Me gustaría saber cómo puedo hacerle para saber cuánto tiempo estoy utilizando en cierta función implementada, por ejemplo ésta:
Codigo:

void adquirir()
   {
      set_adc_channel( 0 );
      dato = read_adc();
      datolow=dato;
      temp=(dato>>8);
      datohigh=temp&3;
      putc(datohigh);
      putc(datolow);
      
      delay_us(30);
          
                     set_adc_channel( 3 );
                     dato = read_adc();
      datolow=dato;
      temp=(dato>>8);
      datohigh=temp&3;
      putc(datohigh);
      putc(datolow);      
    }


Esto lo hago porque me gustaría intercalar esta función con un delay para en total tener un retardo de mas o menos 1 ms. Gracias por cualquier sugerencia o comentario.  
Título: RE: Cómo calcular tiempo de ejecución de líneas
Publicado por: Nocturno en 07 de Abril de 2005, 12:10:00
Para calcular el tiempo que tarda tu programa necesitarás tres datos:
1- saber cuántas y cuáles instrucciones ASM ocupa tu programa. La mayoría de los compiladores tienen una opción para visualizar el fichero LST que intercala entre cada línea de tu programa C su equivalencia en ASM.
2- saber cuántos ciclos de instrucción consume cada instrucción. La mayoría será de 1 sólo ciclo, pero algunas consumen más. Lo puedes ver en el datasheet de tu micro.
3- saber cuántos ciclos de reloj necesita un ciclo de instrucción. Lo normal en PICs es que cada instrucción necesite 4 ciclos de reloj. La duración de un ciclo de reloj será, obviamente, el resultado de 1/frecuencia_reloj

Con estos tres datos podrás calcular fácilmente cuánto durará tu rutina.
Título: RE: Cómo calcular tiempo de ejecución de líneas
Publicado por: badtzdizzy en 07 de Abril de 2005, 12:31:00
Gracias por el tip

Lo que sucede es que esa función me va a estar muestreando dos canales de ADC y enviando los datos por puerto serie. Pero todo esto dentro de la generación de una señal cuadrada para controlar un motor.
Título: RE: Cómo calcular tiempo de ejecución de líneas
Publicado por: badtzdizzy en 07 de Abril de 2005, 13:49:00
Pues haciendo uso del osciloscopio e implementando la función en una sola rutina para el pic, pude observar que el tiempo de ejecución anda alrededor de los 4ms, razón por la cual, no puedo colocar mi función en la generación de la señal cuadrada ya que me colgaría un rato el pic. Trataré por otras formas y de todos modos gracias.