Stap 8: Vluchtige variabelen
Ik vermeld daarvoor omdat ik probeer niet te manipuleren uitgangen rechtstreeks binnen mijn interrupts, we de LEDstate variabele gebruiken te manipuleren van onze LED niet indirect. Dit vraagt om een zeer speciale variabele met de naam van een "vluchtige" variabele.
MPIDE heeft optimizers van de code waarmee uw microcontroller functie sneller en soepeler. Een van de dingen die deze optimizers zal doen is nemen variabelen die niet veranderen en laten in constanten, waardoor het opslaan van ruimte in het geheugen. Helaas, omdat onze LEDstate-variabele wordt niet gebruikt in de hoofdlus, en de functie die doet gebruiken (LEDchange()) is niet genoemd in de hoofdlus, deze optimizers ziet LEDstate als een variabele die niet veranderen, en zet hem in een constante, waardoor problemen ontstaan wanneer onze interrupt probeert om het te veranderen.
Nu, we weten dat LEDstate niet een constante, maar onze code niet. Gelukkig kunnen we vertellen onze optimizers dat LEDstate niet een constante, en wij dat doen door het in een "vluchtige" variabele.
Je zou kunnen denken, dan, dat moet u alle uw variabelen vluchtige, om ervoor te zorgen dat uw optimizers zal niet per ongeluk laten constanten wanneer het niet zou moeten, maar dit zou een slecht idee.
Vanwege hoe vluchtige variabelen zijn opgeslagen in het geheugen, ze zijn een beetje trager reageren dan normale variabelen. Dat betekent dat als u uw variabelen regelmatig belt, ze uw code aanzienlijk vertragen kunnen. Gelukkig, omdat de meeste van onze applicaties interrupt heten zo zelden, dit uiteindelijk niet een probleem, maar het betekent dat u alleen wilt maken van de variabelen die worden gebruikt in interrupts volatile.