Franz Pucher / HIM0Board

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.

/media/uploads/fpucher/interrupt.gif

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.


All wikipages