Étape 8: Variables volatiles
Je l’ai mentionné avant cela parce que j’essaie de ne pas manipuler les produits directement à l’intérieur de mon interruptions, nous utilisons la variable LEDstate pour manipuler nos LED indirectement. Cela passe par une variable très spéciale appelée variable « volatile ».
MPIDE a des optimiseurs de code qui aident votre microcontrôleur fonction plus rapidement et plus facilement. Une des choses que ces optimiseurs vont faire est prendre des variables qui ne modifient l’et transformez-les en constantes, donc gain de place en mémoire. Malheureusement, parce que notre variable LEDstate n’est pas utilisé dans la boucle principale et la fonction qui fait l’utilise (LEDchange()) n’est pas appelée dans la boucle principale, ces optimiseurs verra LEDstate comme une variable qui n’est pas changer et qu’il devienne une constante, qui provoque des problèmes quand notre interruption essaie de le changer.
Maintenant, nous savons que LEDstate n’est pas une constante, mais notre code ne fonctionne pas. Heureusement, nous pouvons dire à nos optimiseurs que LEDstate n’est pas une constante, et nous le faisons en le rendant dans une variable « volatile ».
Vous pensez peut-être, alors, que vous fassiez toutes vos variables volatiles, afin d’assurer que votre optimiseurs ne sera pas accidentellement rendre constantes lorsqu’il ne devrait pas, mais ce serait une mauvaise idée.
En raison de variables comment volatils sont stockés dans la mémoire, ils sont un peu plus lents à répondre que les variables normales. Cela signifie que si vous appelez fréquemment vos variables, elles pourraient ralentir votre code significativement. Heureusement, parce que la plupart de nos demandes d’interruption est appelés si rarement, cela ne se termine pas un problème, mais cela signifie que vous voulez seulement faire les variables utilisées dans volatile d’interruptions.