1 votos

Llamar a una rutina cada x milisegundos

Estoy trabajando en un controlador de movimiento utilizando la plataforma mbed. La idea es calcular la posición teórica en el movimiento cada x milisegundos y luego compararla con la posición real del encoder, cuyo error resultante estará sujeto al PID.

Actualmente llamo al procedimiento cada x milisegundos utilizando la función delay() al final de la rutina de cálculo de posición.

Creo que esta puede no ser la mejor manera de hacerlo. ¿Hay alguna manera de llamar a la rutina con un paso de tiempo fijo?

3voto

afx Puntos 221

Pseudocódigo:

volatile int ms_counter;
volatile bool passed_1ms;
volatile boole passed_20ms;

(ISR executed every 1 ms through a timer interrupt - platform dependent)
ISR {
  ms_counter++;
  if (ms_counter % 20 == 0) {
    passed_20ms = true;
  }      

  passed_1ms = true;
}

main()
{

  // configure timer to trigger an interrupt every 1ms

  while(true) {
    if (passed_1ms) {
      // 1ms has passed, do something
      passed_1ms = false;
    }
    if (passed_20ms) {
      // 20ms tasks go here
      passed_20ms = false;
    }
    // Do other tasks
  }
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X