External avbryter på MPIDE del 1: attachInterrupt() (7 / 11 steg)
Steg 7: Interruipt rutin
Som jag nämnde i föregående steg, satt vi vår avbryta tjänsten rutinmässiga eller ISR till vår LEDchange() funktion. Denna funktion kan vara vad du vill, men avbryter är mycket petiga saker, så finns det några riktlinjer som du vill följa.
Först och främst måste ISRs köra snabbt. Låt oss gå tillbaka till vårt klassrum exempel. När professorn uppmanade du för din fråga, vad händer om du började med ett långt samtal med professorn? Det skulle helt störa klassen och professorn inte skulle kunna komma tillbaka till sitt föredrag att avsluta det innan klass slutade. Istället, du försöker göra din fråga mycket kort och din lärare försöker ge er ett koncist svar. Samma sak gäller för avbrott. De avbryta flödet av den normala programmet, så du vill komma tillbaka till det så snart som möjligt.
ANVÄND INTE NÅGONSIN DELAY() I EN ISR. Funktionen delay() anses i allmänhet vara slarvig programmering. I grund och botten fryser det din mikrokontroller för en viss tid. Under denna tid ingen annan kod kan köra (med undantag för andra avbrott), och som funktionellt har slösat bort tid. Om du använder delay() i en ISR, tar det ISR forever, som bryter mot vår första regeln. Det förtjänster men det är egen varning, eftersom det är en av de grundläggande verktygen som nya programmerare introduceras till under deras första blink program, och kan lätt resa dig upp när får in mer avancerade ämnen som avbryter.
Denna sista regeln är mer av en personlig preferens än något annat. Jag har hört att andra människor ibland har problem när du försöker manipulera utgångar i deras ISR, vrida lysdioder på och av. Generellt tror jag på dessa som långsamma processer, så om möjligt jag försöker undvika manipulera utgångar inuti min ISRs. Det är därför vi använder variabeln LEDstate att ställa in våra led, i stället för att ställa in den direkt. Avbryter används dock ofta vid kommunikation med andra styrelser och sådant, så det inte är alltid praktiskt eller ens möjligt att hålla från att manipulera utgångar, så detta är inte en fasta regel. Använd din bästa omdöme!