Llamar a una rutina cada x milisegundos

1

Estoy trabajando en un controlador de movimiento usando 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 codificador, cuyo error resultante estará sujeto a PID.

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

Siento que esta puede no ser la mejor manera de hacer esto. ¿Hay una forma de llamar a la rutina de nivel inferior con un paso de tiempo fijo?

    
pregunta M-R

1 respuesta

3

Pseudo có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
  }
}
    
respondido por el Tom L.

Lea otras preguntas en las etiquetas