Tengo miedo de perder las interrupciones que pueden activarse cuando mi código está dando servicio a otra interrupción.
Majenko declaró que "El sistema de interrupciones luego realiza un ciclo a través de las interrupciones en busca de cualquier indicador de interrupción que se haya establecido, y si la interrupción está habilitada, salta al ISR". Esto no es del todo cierto porque:
Las interrupciones tienen prioridad de acuerdo con su posición del vector de interrupción. Cuanto menor sea la dirección del vector de interrupción, mayor será la prioridad.
Esto significa que una fuente de interrupción puede "morir de hambre". Una vez que se completa un ISR, el controlador preferirá las interrupciones de alta prioridad. Dependiendo de la frecuencia de interrupción, puede suceder que siempre haya un conjunto de indicadores de interrupción de alto nivel, esencialmente bloqueando un prio inferior uno permanentemente.
Mantener el ISR corto y saber su tiempo de ejecución es un buen consejo.
5 interrupciones en realidad no son muchas, pero aún así requieren cuidado en un sistema simple de prioridad fija.
AVR XMEGA, por ejemplo, lo lleva a otro nivel. Tengo un proyecto XMEGA que tiene que manejar 22 fuentes de interrupción diferentes (4xUART tx / rx = 8 + 4 temporizadores + 8 ADC completos + 2 otros). Sin embargo, el XMEGA presenta un "controlador de interrupción multinivel programable". Esto le permite asignar manualmente uno de los tres niveles de interrupción a cada interrupción (dentro de ellos, la prioridad del número de vector de interrupción aún cuenta).
Además, puede activar un esquema de prioridad de round-robin, que aborda el problema de "inanición" antes mencionado.
Para evitar el posible problema de inanición por interrupciones de bajo nivel con prioridad estática, donde es posible que no se sirvan algunas interrupciones, el PMIC ofrece una programación de turnos completos
Con respecto a tu pregunta original:
Entonces, ¿hay algún método más estructurado para gestionar interrupciones en un proyecto grande?
Depende de las capacidades de su sistema. Para un controlador como el ATMega328 con una gestión de interrupciones impulsada por una prioridad estática simple, asegúrese de que no haya interrupciones de hambre y mantenga presionado "short" y "conozca su tiempo de ejecución".
Para un controlador como el XMEGA, hay más planificación involucrada porque solo tienes más control. Debe distribuir cuidadosamente las prioridades y considerar el uso de funciones como "round robin".