Technische Informatik; Hardwarenahe Programmierung

You are viewing an older revision! See the latest version

Interrupt Erweitert

Table of Contents

  1. Using Flags

Using Flags

Damit auch Codeteile wie wait, printf, blockierende Systemaufrufe, o.ä. mit ISR verwendet werden können, werden Flags für diese Zwecke eingesetzt. D.h. in der ISR selbst wird ein Flag, das eine globale Variable ist, gesetzt und dieses Flag wird z.B. in der Endlosschleife while(1) in main ständig abgefragt und der Codeteil ausgeführt, wenn in der ISR dieses Flag gesetzt wurde. Siehe folgendes Beispiel:

#include "mbed.h"
//#define BUTTON1 p14  // push joystick pin

InterruptIn button(BUTTON1);
DigitalOut myled(LED1);
bool _pressed = false;

int checkFlag() {
    if( _pressed ) {
        _pressed = false; 
        return 1;
    }
    return 0;
}

void risingISR() {            
    _pressed = true;
}

int main() {
    printf("Hello Interrupt-Flag v0.1\n");
    button.rise(&risingISR);          // call ISR in OS2
    //button.rise(callback(&risingISR));  // callback in OS5
 
    while(1) {
        if(checkFlag()) {
            myled = ! myled;
            printf("Pressed\n");
        }
        wait_ms(10);                    // only for simulator
  }
}

All wikipages