Technische Informatik; Hardwarenahe Programmierung
You are viewing an older revision! See the latest version
Interrupt Grundlegend
Verwende im Simulator folgende Programme:
Obige Programme funktionieren auch am mbed-Application-Board, allerdings der Timer funktioniert nur hier:
Das folgende Programm ist aus dem Simulator Interrupts Load demos :
- Ticker: LED1 will blink every second
- InterruptIn: LED2 can be toggled through BUTTON1
- Timeout: LED3 will toggle after 2.5 seconds
InterruptTicker.cpp
#include "mbed.h" #define BUTTON1 p14 // push joystick pin //#define BUTTON1 A1 // NUCLEO Taster A1 DigitalOut led1(LED1); DigitalOut led2(LED2); // NUCLEO D2 DigitalOut led3(LED3); // NUCLEO D3 Ticker t1; Timeout t2; InterruptIn btn(BUTTON1); void blink_led1() { printf("Ticker fired\n"); led1 = !led1; } void toggle_led2() { printf("BUTTON1 fall invoked\n"); led2 = !led2; } void turn_led3_on() { printf("Timeout fired\n"); led3 = 1; } int main() { printf("Hello world!\n"); printf("LED1 will blink every second, LED3 will toggle after 2.5 seconds, LED2 can be toggled through BUTTON1.\n"); printf("-----------------------------------\n\n"); t1.attach(callback(&blink_led1), 1.0f); t2.attach(callback(&turn_led3_on), 2.5f); btn.fall(callback(&toggle_led2)); while(1) {} // wait_ms(osWaitForever); }
[Not found]
Schreiben Sie die folgenden Programme sowohl für Polling und Interrupt. Vergleichen Sie beide Varianten.
- Schreiben Sie ein C++ Programm, das eine 100Hz Rechteckschwingung an der LED1 ausgibt. Wird die Taste SW2 gedrückt soll die Frequenz verdoppelt werden. Bei einem weiteren Tastendruck sollen wieder die 100Hz ausgegeben werden.
- Schreiben Sie ein C++ Programm, das Anzahl wie oft die Taste SW2 gedrückt wurde zählt und die LED1 leuchten soll wenn die Taste 10 Mal gedrückt wurde.