Actualmente estoy trabajando en un proyecto de microcontrolador (Arduino) en el que deseo usar interrupciones generadas por pulsadores y temporizadores. Sin embargo, no estoy seguro de si estoy "efectivamente" usando las interrupciones. Aquí está mi siguiente enfoque de arquitectura:
Digamos que tengo tres fuentes de interrupción: una vinculada a una entrada digital y dos vinculadas a temporizadores internos. Cuando se establezca un indicador de interrupción de hardware, se ejecutarán los ISR asociados.
También implemento un 'bucle principal'. Este bucle principal no tiene tiempo en el sentido de que se ejecutará de forma continua lo más rápido que permita el procesador. Dentro de este bucle, hay una serie de indicadores de software que están marcados. Estos indicadores de software se establecen en los ISR. Este bucle se muestra en el siguiente pseudo código:
/* main loop */
while(1)
{
// Check digital input flag
if(digi_in_flag)
// do some routine
//check timer 1
if(timer1_flag)
// do something routine
//check timer 2
if(timer2_flag)
// do something routine
}
Ahora, la razón por la que hago esto es para mantener los ISR cortos. Esencialmente, mis ISR solo establecen una marca de software que luego se verifica en el ciclo principal. Algunas de estas rutinas conducen a las comunicaciones SPI / I2C, por lo que no quería colocar esas comunicaciones en un ISR.
Entonces mi pregunta: ¿tiene sentido esto? ¿Esto realmente crea un programa más eficiente? Siento que todavía estoy 'sondeando' al verificar las marcas de software. Como alternativa al uso de interrupciones, podría haber escrito un bucle que solo verifica una entrada digital (a diferencia de un indicador de software establecido por una interrupción), o podría haber hecho una función para verificar la duración del tiempo (es decir, curr_time - prev_time) en lugar de confiar en una interrupción de temporizador para establecer una marca de software.
¿Alguna idea sobre esto? Además, estoy limitado a un solo hilo en este diseño.
Gracias