Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
You are viewing an older revision! See the latest version
Interrupt Erweitert
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. Das Löschen des Flags nicht vergessen, wie im folgenden Beispiel in der Funktion checkFlag():
#include "mbed.h"
//#define BUTTON1 p14 // push joystick pin
InterruptIn button(BUTTON1);
DigitalOut myled(LED1);
bool _pressed = false; // definition of the flag _pressed
int checkFlag() {
if( _pressed ) {
_pressed = false; // delete flag
return 1;
}
return 0;
}
void risingISR() {
_pressed = true; // set flag _pressed
}
void callISR() { // function callISR instead an ISR
myled = ! myled; // now you can use ...
printf("Pressed\n"); // ... printf
wait_ms(500); // ... wait
myled = ! myled; // etc.
}
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()) // if set then call the function ISR
callISR();
wait_ms(10); // only for simulator
}
}