Stap 7: Interruipt Service Routine
Zoals ik al zei in de vorige stap, stellen we onze Interrupt Service Routine of ISR op onze LEDchange()-functie. Deze functie kan alles wat die je wilt, maar onderbreekt zijn zeer kieskeurig dingen, dus er zijn een aantal richtlijnen die u zult willen volgen.
Eerst en vooral, moet ISRs sneluitvoeren. Laten we teruggaan naar ons voorbeeld van de klas. Wanneer de professor voor u voor uw vraag aangeroepen, wat als u gestart na een lang gesprek met de professor? Het zou volledig verstoren de klasse en de professor niet zou kunnen te halen weerom voor haar lezing te voltooien voordat klasse eindigde. In plaats daarvan, u proberen om uw vraag kort en uw docent probeert u een bondig antwoord te geven. Hetzelfde geldt voor de interrupts. Ze onderbreken de stroom van het normale programma, zodat u zult willen aan dat zo spoedig mogelijk terugkeren.
GEBRUIK GEEN OOIT DELAY() IN EEN ISR. In het algemeen, de functie delay() wordt beschouwd als slordig programmering. Kortom, het bevriest uw microcontroller voor een vast bedrag van tijd. Gedurende die tijd, geen andere code kunt uitvoeren (met uitzondering van andere interrupts), en dat is functioneel verspilde tijd. Als u delay() in een ISR gebruikt, duurt dat ISR forever, die onze eerste regel overtreden. Het verdiensten het is eigen waarschuwing, echter, want het is een van de fundamentele hulpmiddelen die nieuwe programmeurs zijn ingevoerd om tijdens hun allereerste blink-programma, en kunnen gemakkelijk struikelen u wanneer krijgen in meer geavanceerde onderwerpen zoals interrupts.
Deze laatste regel is meer een persoonlijke voorkeur dan iets anders. Ik heb gehoord dat soms andere mensen hebben kwesties wanneer het proberen om te manipuleren uitgangen in hun ISR, zoals het draaien van de LEDs aan en uit. Over het algemeen denk ik aan deze als trage processen, dus indien mogelijk dat ik probeer te voorkomen dat het manipuleren van de uitgangen binnen mijn ISRs. Dat is waarom we de variabele LEDstate gebruiken om de status van onze LED, in plaats van het direct instellen. Interrupts zijn echter vaak gebruikt bij de communicatie met andere borden en dergelijke, dus het is niet altijd praktisch of zelfs mogelijk om te houden van het manipuleren van de uitgangen, dus dit is niet een harde en snelle regel. Gebruik uw beste oordeel!