Alessio Buratti
/
BlinkThreadCallback2LED
BlinkThreadCallback2LED
main.cpp@1:e2af1ad1b1bb, 2018-11-16 (annotated)
- Committer:
- alessioburatti
- Date:
- Fri Nov 16 12:00:34 2018 +0000
- Revision:
- 1:e2af1ad1b1bb
- Parent:
- 0:13988e5bca16
Done
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lmottola | 0:13988e5bca16 | 1 | #include "mbed.h" |
lmottola | 0:13988e5bca16 | 2 | |
lmottola | 0:13988e5bca16 | 3 | DigitalOut led1(LED1); |
alessioburatti | 1:e2af1ad1b1bb | 4 | DigitalOut led2(LED2); |
alessioburatti | 1:e2af1ad1b1bb | 5 | |
alessioburatti | 1:e2af1ad1b1bb | 6 | Thread thread1; |
alessioburatti | 1:e2af1ad1b1bb | 7 | Thread thread2; |
alessioburatti | 1:e2af1ad1b1bb | 8 | |
alessioburatti | 1:e2af1ad1b1bb | 9 | bool is_thread1_done = false; |
alessioburatti | 1:e2af1ad1b1bb | 10 | bool is_thread2_done = true; |
lmottola | 0:13988e5bca16 | 11 | |
alessioburatti | 1:e2af1ad1b1bb | 12 | void blink(bool * this_is_done, DigitalOut * led) { |
alessioburatti | 1:e2af1ad1b1bb | 13 | is_thread1_done = false; |
alessioburatti | 1:e2af1ad1b1bb | 14 | is_thread2_done = false; |
alessioburatti | 1:e2af1ad1b1bb | 15 | *led = 1; |
alessioburatti | 1:e2af1ad1b1bb | 16 | wait(1); |
alessioburatti | 1:e2af1ad1b1bb | 17 | *led = 0; |
alessioburatti | 1:e2af1ad1b1bb | 18 | *this_is_done = true; |
alessioburatti | 1:e2af1ad1b1bb | 19 | } |
alessioburatti | 1:e2af1ad1b1bb | 20 | |
alessioburatti | 1:e2af1ad1b1bb | 21 | void led1_thread(DigitalOut * led) { |
alessioburatti | 1:e2af1ad1b1bb | 22 | while (true) { |
alessioburatti | 1:e2af1ad1b1bb | 23 | if(is_thread2_done){ |
alessioburatti | 1:e2af1ad1b1bb | 24 | blink(&is_thread1_done, led); |
alessioburatti | 1:e2af1ad1b1bb | 25 | } |
lmottola | 0:13988e5bca16 | 26 | } |
lmottola | 0:13988e5bca16 | 27 | } |
lmottola | 0:13988e5bca16 | 28 | |
alessioburatti | 1:e2af1ad1b1bb | 29 | void led2_thread(DigitalOut * led) { |
alessioburatti | 1:e2af1ad1b1bb | 30 | while (true) { |
alessioburatti | 1:e2af1ad1b1bb | 31 | if(is_thread1_done){ |
alessioburatti | 1:e2af1ad1b1bb | 32 | blink(&is_thread2_done, led); |
alessioburatti | 1:e2af1ad1b1bb | 33 | } |
alessioburatti | 1:e2af1ad1b1bb | 34 | } |
alessioburatti | 1:e2af1ad1b1bb | 35 | } |
alessioburatti | 1:e2af1ad1b1bb | 36 | |
lmottola | 0:13988e5bca16 | 37 | int main() { |
alessioburatti | 1:e2af1ad1b1bb | 38 | thread1.start(callback(led1_thread, &led1)); |
alessioburatti | 1:e2af1ad1b1bb | 39 | thread2.start(callback(led2_thread, &led2)); |
alessioburatti | 1:e2af1ad1b1bb | 40 | thread1.join(); |
alessioburatti | 1:e2af1ad1b1bb | 41 | thread2.join(); |
lmottola | 0:13988e5bca16 | 42 | } |