Paso 8: Variables volátiles
Mencioné antes porque no intento manipular salidas directamente dentro de mis interrupciones, utilizamos la variable LEDstate para manipular indirectamente a nuestro LED. Esto requiere una variable especial llamada "volátil" variable.
MPIDE tiene optimizadores de código que ayudan a la función del microcontrolador más rápido y más suavemente. Una de las cosas que estos optimizadores hará es tomar variables que no cambian y se hacen en constantes, ahorrando espacio en la memoria. Desafortunadamente, dado que nuestra variable LEDstate no se utiliza en el bucle principal y la función que hace utilizarla (LEDchange()) no es llamada en el bucle principal, estos optimizadores ver LEDstate como una variable que no cambia y lo convierten en una constante, que causa problemas cuando la interrupción intenta cambiarlo.
Ahora, sabemos que LEDstate no es una constante, pero nuestro código no. Afortunadamente, podemos decir nuestros optimizadores que LEDstate no es una constante, y hacer haciéndola en una variable "volátil".
Entonces, usted podría pensar que usted debe hacer todas las variables volátiles, para garantizar que su optimización no accidentalmente hace constantes cuando no debe, pero esto sería una mala idea.
Debido a las variables cómo volátiles se almacenan en la memoria, son un poco más lentos responder que las variables normales. Eso significa que si usted llama con frecuencia sus variables, puede ralentizar el código significativamente. Afortunadamente, porque la mayoría de nuestras aplicaciones de interrupción se denomina tan raramente, esto no termina siendo un problema, pero quiere decir que sólo hacen las variables utilizadas en el volátil de interrupciones.