Philipp Kundegraber
/
TINF_PE_20190328_Events
Übungen zu Events im MbedOS https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/Events
main.cpp@0:0e8dbc229b3a, 2019-03-28 (annotated)
- Committer:
- kunphil
- Date:
- Thu Mar 28 17:12:15 2019 +0000
- Revision:
- 0:0e8dbc229b3a
OS_Events Uebungen
Who changed what in which revision?
User | Revision | Line number | New 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 | } |