FSST - Hardwarenahe Programmierung
You are viewing an older revision! See the latest version
Interrupt
Bei Interrupts wird sofort reagiert. Wenn ein Interrupts-Signal auftritt, wird der aktuelle Befehl des Hauptprogramms beendet, die nötigen Register auf den Stack gerettet und dann anschließend sofort die ISR (Interrupt Service Routine) aufgerufen.
Technische Realisierung der Interrupts
- der Prozessor besitzt einen oder mehrere spezielle Interrupt Eingänge
- wird eine Interruptleitung aktiviert, so führt dies zum Auslösen der zugehörigen Programmunterbrechung
- richtige" Rechner verwenden oft sog. Interruptcontroller, welche verschiedene Interruptquellen managen
Z.B. die Tastenabfrage mittels ISR; Statt DugitalIn wird mit InterruptIn der Taster definiert. Die ISR wird wie eine Funktion ohne Parameter und Rückgabewert (void change()) definiert. Zum Datenaustausch wird eine globale Variable (toggle) verwendet:
InterruptIn taste(P0_10);
bool toggle = true; // globale Variable
void change()
{
toggle = !toggle;
}
int main() {
taste.rise(&change); // attach the address of the change-function to the rising edge
int zeit = 100;
while(1)
{
led1 = 0;
wait_ms(zeit);
led1 = 1;
wait_ms(zeit);
if(toggle){
}
}
}
No blocking code in ISR In der ISR sollten keine wait-Funktionen, Endlosschleifen oder blockierende System Calls verwendet werden.