Paso 5: SetIntPriority(): ¿Qué es prioridad?
Lo que en el mundo es una "prioridad de interrupción" y ¿por qué tenemos que configurarlo?
Digamos que el ISR (interrumpir servicio rutinario, si recuerdan en parte 1) para Int1 está ocupado ejecutando, pero antes de que puede acabar, Int2 obtiene desencadenado e intenta llamar es ISR propio (llamaremos ISR1 y ISR2, para mayor comodidad). ¿Qué pasa? ¿ISR1 consigue poner en pausa mientras ejecuta ISR2, o tiene que esperar hasta que termine ISR1 ISR2? La respuesta depende de la prioridad de la Int1 y Int2.
Digamos que Int1 tiene una prioridad de 4, y Int2 tiene una prioridad de 5. En este caso, porque Int2 tiene una prioridad más alta, ISR1 obtiene una pausa para que ISR2 puede ejecutar. Luego, una vez hecho ISR2, ISR1 se reanuda donde se quedó.
Vamos a cambiar ahora para Int1 tiene una prioridad de 5 y Int2 tiene prioridad 4. En este caso, porque Int1 tiene la prioridad más alta, ISR2 tiene que esperar hasta ISR1 se realiza ejecutando antes de empiece.
Prioridad los niveles van de 1 a 7, donde 7 es el más alto. En realidad, también hay un nivel de prioridad 0, pero que se considera personas con discapacidad y nunca se ejecutará. En el caso de nuestro programa, nos establece la prioridad de Int2 en 4.
¿(Nótese cómo todavía estamos utilizando "_EXTERNAL_2_VECTOR"? Será importante en un poco.)
"Espere..." Puedo oír piensas (usando mis poderes de lectura de la mente), "¿Qué pasa si dos interrupciones con la misma prioridad se desencadenan?"
Buena pregunta! En los ejemplos anteriores, si Int1 y Int2 tienen prioridad de 4, entonces ISR2 siempre esperará ISR1 terminar de ejecutar antes de empiece.
¡ Pero espere! ¡ Hay más!