¿Puede alguien explicar el procedimiento de interrupción de una MCU cuando realiza cálculos dentro de ella?

2

Supongamos que estoy leyendo un valor cada 100 microsegundos utilizando el ADC de una MCU. También he configurado la interrupción de ADC y dentro de esa interrupción de ADC realizo algunos cálculos.

Entonces, si el ADC está configurado para leer el siguiente valor de ADC cada 100 microsegundos, lo único lógico que se me ocurre es que dentro de ese período también debe realizar los cálculos, ¿correcto?

¿Qué pasa si los cálculos tardan más en terminar? ¿Alguien puede explicar la teoría detrás de esto?

    
pregunta Egbert

2 respuestas

5

Todo es muy simple. Si el flujo de cálculos depende completamente de la secuencia de las lecturas A / D, entonces SÍ los cálculos deben completarse dentro del intervalo de tiempo asignado entre la disponibilidad de las lecturas A / D.

Dicho esto, si hay características de los cálculos que hacen que algunas iteraciones tomen más tiempo que otras (especialmente cuando ese tiempo más largo se superpone a la siguiente lectura A / D), tendrá que estudiar y determinar su cálculo promedio a largo plazo. Una vez que sepa que puede planear estos cálculos de vez en cuando, haga que la interrupción A / D no haga cálculos y en su lugar coloque el valor A / D en un búfer circular. El código de la línea principal puede encargarse de los cálculos utilizando los valores que obtiene del búfer circular. Usando esta técnica, las cosas todavía se pueden hacer. Tenga en cuenta que rellenar cosas y sacarlas del búfer circular incurre en algún golpe de rendimiento.

    
respondido por el Michael Karas
2

Si los cálculos tardan más tiempo en finalizar que el período de interrupción, perderá los datos ignorando algunas de las interrupciones, o se encontrará con un desbordamiento de pila porque se llamará una y otra vez al controlador de interrupciones antes de que tenga la oportunidad de completar .

    
respondido por el Dmitry Grigoryev

Lea otras preguntas en las etiquetas