Autor Tema: Minimizar tiempo de ejecución de una función  (Leído 1940 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Minimizar tiempo de ejecución de una función
« en: 14 de Abril de 2005, 13:00:00 »
Hola

Estoy realizando un programa para adquirir datos y controlar un motor al mismo tiempo, ambas cosas las hago mediante interrupción pero tengo un problema ya que en ocasiones el retardo de la función de adquisición influye con un retardo en algunos pulsos en alto de al señal generada para el motor. En otras palabras necesito minimizar el tiempo de ejecución de la siguiente función:

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

Es por eso que recurro a ustedes para ver si alguien sabe como podría minimizar ese tiempo, una vez me dijeron que podría hacerlo haciendo esta misma función pero en ensamblador. Bueno, espero que me puedan echar la mano. Gracias.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Minimizar tiempo de ejecución de una función
« Respuesta #1 en: 14 de Abril de 2005, 19:12:00 »
Si la rutina de adquisición que has puesto te come tiempo en la ejecucion de la rutina del motor será seguramente(corrígeme si me equivoco) porque la ejecutas dentro del ámbito de su interrupción.Si los resultados obtenidos en la adquisición no son críticos para la gestión del motor creo que es mejor que en la rutina de interrupcion de la adquisición unicamente levantes un flag y la cierres,y vayas testeando este flag para ejecutar la adquisición cuando se haya activado.Otra cosa que te serviría es dar más prioridad a la interrupción que gestiona el motor

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Minimizar tiempo de ejecución de una función
« Respuesta #2 en: 18 de Abril de 2005, 01:25:00 »
Hola Modulay

Lo que hago es usar dos interrupciones, una para generar la señal de control del motor y otra para la adquisición de datos. Utilizo el timer0 para el motor y el timer1 para la adquisición. Probé la función de adquisición por separado y usando unos leds para ver el tiempo de ejecución en el osciloscopio y pues se tarda como 4ms en realizarla, y pues por eso yo creo que en ocasiones tengo pulsos en alto de más duración que otros. Me dijeron que si hacía ese código en ensamblador tal vez me podría ahorrar más tiempo.
O tal vez usando datos de tipo int y no de tipo long pero eso ya dependería de la resolucion que quisiera no?? Bueno, espero me echen una mano con consejos que yo me encargo de lo demás. Gracias.


 

anything