Übungen zu Events im MbedOS https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/Events

Committer:
kunphil
Date:
Thu Mar 28 17:12:15 2019 +0000
Revision:
0:0e8dbc229b3a
OS_Events Uebungen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kunphil 0:0e8dbc229b3a 1 #include "mbed.h"
kunphil 0:0e8dbc229b3a 2
kunphil 0:0e8dbc229b3a 3 DigitalOut led(LED1);
kunphil 0:0e8dbc229b3a 4 InterruptIn btn(p15);
kunphil 0:0e8dbc229b3a 5
kunphil 0:0e8dbc229b3a 6 Semaphore updates(1);
kunphil 0:0e8dbc229b3a 7
kunphil 0:0e8dbc229b3a 8 void fall_handler() {
kunphil 0:0e8dbc229b3a 9 // release the semaphore
kunphil 0:0e8dbc229b3a 10 updates.release();
kunphil 0:0e8dbc229b3a 11 }
kunphil 0:0e8dbc229b3a 12
kunphil 0:0e8dbc229b3a 13 int main() {
kunphil 0:0e8dbc229b3a 14 btn.fall(&fall_handler); // The 'fall' handler will execute in IRQ context
kunphil 0:0e8dbc229b3a 15 printf("Starting in context %p\r\n", Thread::gettid());
kunphil 0:0e8dbc229b3a 16
kunphil 0:0e8dbc229b3a 17 while(1){
kunphil 0:0e8dbc229b3a 18 int32_t v = updates.wait(); // wait for the semaphore to be released from the ISR
kunphil 0:0e8dbc229b3a 19
kunphil 0:0e8dbc229b3a 20 if (v == 1) { // now this runs on the main thread, and is safe
kunphil 0:0e8dbc229b3a 21 led = !led;
kunphil 0:0e8dbc229b3a 22 printf("fall_handler in context %p\r\n",Thread::gettid());
kunphil 0:0e8dbc229b3a 23 }
kunphil 0:0e8dbc229b3a 24
kunphil 0:0e8dbc229b3a 25 }
kunphil 0:0e8dbc229b3a 26
kunphil 0:0e8dbc229b3a 27
kunphil 0:0e8dbc229b3a 28 wait(osWaitForever);
kunphil 0:0e8dbc229b3a 29 }