University of Plymouth - Stages 1, 2 and 3 / Mbed OS signal-wait-demo
Committer:
noutram
Date:
Thu Apr 26 07:56:30 2018 +0000
Revision:
0:a76aa1242d9e
Demonstration of signal-wait

Who changed what in which revision?

UserRevisionLine numberNew contents of line
noutram 0:a76aa1242d9e 1 #include "mbed.h"
noutram 0:a76aa1242d9e 2 #define WAIT_FOR_ISR 1
noutram 0:a76aa1242d9e 3 //Function declarations
noutram 0:a76aa1242d9e 4 void Function1();
noutram 0:a76aa1242d9e 5 void ISR();
noutram 0:a76aa1242d9e 6
noutram 0:a76aa1242d9e 7 //Thread
noutram 0:a76aa1242d9e 8 Thread t1;
noutram 0:a76aa1242d9e 9
noutram 0:a76aa1242d9e 10 //I/O
noutram 0:a76aa1242d9e 11 DigitalOut led(LED1);
noutram 0:a76aa1242d9e 12 InterruptIn onBoardSwitch(USER_BUTTON);
noutram 0:a76aa1242d9e 13
noutram 0:a76aa1242d9e 14 //Switch ISR
noutram 0:a76aa1242d9e 15 void ISR() {
noutram 0:a76aa1242d9e 16 t1.signal_set(WAIT_FOR_ISR);
noutram 0:a76aa1242d9e 17 }
noutram 0:a76aa1242d9e 18
noutram 0:a76aa1242d9e 19 //Thread
noutram 0:a76aa1242d9e 20 void Function1() {
noutram 0:a76aa1242d9e 21 while (true) {
noutram 0:a76aa1242d9e 22 Thread::signal_wait(WAIT_FOR_ISR);
noutram 0:a76aa1242d9e 23 wait(0.2); //Debounce
noutram 0:a76aa1242d9e 24 Thread::signal_clr(WAIT_FOR_ISR);
noutram 0:a76aa1242d9e 25 led = !led;
noutram 0:a76aa1242d9e 26 }
noutram 0:a76aa1242d9e 27 }
noutram 0:a76aa1242d9e 28
noutram 0:a76aa1242d9e 29 //Main thread
noutram 0:a76aa1242d9e 30 int main() {
noutram 0:a76aa1242d9e 31 //Initial state
noutram 0:a76aa1242d9e 32 led = 1;
noutram 0:a76aa1242d9e 33 onBoardSwitch.rise(ISR);
noutram 0:a76aa1242d9e 34
noutram 0:a76aa1242d9e 35 //Create and run threads (C function pointers)
noutram 0:a76aa1242d9e 36 t1.start(Function1);
noutram 0:a76aa1242d9e 37
noutram 0:a76aa1242d9e 38 //Main thread loop
noutram 0:a76aa1242d9e 39 while(1) {
noutram 0:a76aa1242d9e 40 t1.join();
noutram 0:a76aa1242d9e 41 }
noutram 0:a76aa1242d9e 42 }