Paso 7: Rutina de servicio de Interruipt
Como he mencionado en el paso anterior, establecemos nuestro servicio de interrumpir la rutina ISR a nuestra función de LEDchange(). Esta función puede ser todo lo que quieras, pero las interrupciones son cosas muy exigentes, por lo que hay un par de pautas que querrá seguir.
Primero y principal, ISRs deben ejecutar rápidamente. Volvamos a nuestro ejemplo de aula. Cuando el profesor pidió a usted por su pregunta, ¿qué pasa si usted comenzó a tener una larga conversación con el profesor? Totalmente perturbaría la clase y el profesor sería capaz de volver a su conferencia para terminarlo antes de que terminara la clase. En cambio, intenta hacer tu pregunta muy corta, y tu profesor intenta darle una respuesta concisa. Lo mismo vale para las interrupciones. Interrumpen el flujo del programa normal, así que usted querrá volver a eso tan pronto como sea posible.
NO UTILICE DELAY() DE UN ISR. En general, la función delay() se considera programación descuidada. Básicamente, se congela el microcontrolador por un determinado tiempo. Durante ese tiempo, ningún otro código puede ejecutar (excepto otras interrupciones), y funcionalmente ha perdido el tiempo. Si utilizas delay() en un ISR, ese ISR tendrá para siempre, que viola la primera regla. Méritos es propia ADVERTENCIA, sin embargo, porque es una de las herramientas fundamentales que nuevos programadores introducen a durante su primer programa de blink y fácilmente te viaje cuando entrar en temas más avanzados como interrupciones.
Esta última regla es más una preferencia personal que otra cosa. He oído que a veces otras personas tienen problemas al intentar manipular salidas de su ISR como encendiendo y apagando LED. Generalmente creo que de éstos como procesos lentos, así que en la medida de lo posible intento evitar manipular salidas dentro de mi ISRs. Es por ello que utilizamos la variable LEDstate para establecer el estado de los LED, en lugar de establecer directamente. Sin embargo, las interrupciones se utilizan cuando se comunica con otras tablas y tal, por lo que no siempre es práctico o posible para evitar manipulación de salidas, así que esto no es una regla dura y rápida. Utilice su mejor juicio.