Modify the BlinkThreadCallback example so you run two threads that blink different LEDs once per second by waiting for each other
main.cpp@1:30693312f670, 2018-11-11 (annotated)
- Committer:
- vicara
- Date:
- Sun Nov 11 21:19:55 2018 +0000
- Revision:
- 1:30693312f670
- Parent:
- 0:11ca69d691b7
Thread blink done with debug mode enabled;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vicara | 0:11ca69d691b7 | 1 | #include "mbed.h" |
vicara | 0:11ca69d691b7 | 2 | |
vicara | 0:11ca69d691b7 | 3 | DigitalOut led1(LED1); |
vicara | 0:11ca69d691b7 | 4 | DigitalOut led2(LED2); |
vicara | 1:30693312f670 | 5 | InterruptIn button(USER_BUTTON); |
vicara | 0:11ca69d691b7 | 6 | |
vicara | 1:30693312f670 | 7 | //____________________________ |
vicara | 1:30693312f670 | 8 | |
vicara | 1:30693312f670 | 9 | Thread thread1; |
vicara | 1:30693312f670 | 10 | Thread thread2; |
vicara | 1:30693312f670 | 11 | |
vicara | 1:30693312f670 | 12 | //____________________________ |
vicara | 1:30693312f670 | 13 | |
vicara | 1:30693312f670 | 14 | bool is_debug_enabled = false; |
vicara | 1:30693312f670 | 15 | bool is_t2_done = true; |
vicara | 1:30693312f670 | 16 | bool is_t1_done = false; |
vicara | 1:30693312f670 | 17 | |
vicara | 1:30693312f670 | 18 | void toggle_debug_mode() { |
vicara | 1:30693312f670 | 19 | is_debug_enabled = !is_debug_enabled; |
vicara | 0:11ca69d691b7 | 20 | } |
vicara | 1:30693312f670 | 21 | |
vicara | 1:30693312f670 | 22 | void led1_thread(DigitalOut *led) { |
vicara | 1:30693312f670 | 23 | if(is_debug_enabled) |
vicara | 1:30693312f670 | 24 | printf("T1 STARTED\n"); |
vicara | 1:30693312f670 | 25 | while (true) { |
vicara | 1:30693312f670 | 26 | if(is_t2_done){ |
vicara | 1:30693312f670 | 27 | if(is_debug_enabled) |
vicara | 1:30693312f670 | 28 | printf("T1 EXECUTING\n"); |
vicara | 1:30693312f670 | 29 | is_t1_done = false; |
vicara | 1:30693312f670 | 30 | is_t2_done = false; |
vicara | 1:30693312f670 | 31 | *led = !*led; |
vicara | 1:30693312f670 | 32 | wait(1); |
vicara | 1:30693312f670 | 33 | *led = !*led; |
vicara | 1:30693312f670 | 34 | is_t1_done = true; |
vicara | 1:30693312f670 | 35 | if(is_debug_enabled) |
vicara | 1:30693312f670 | 36 | printf("T1 DONE\n\n"); |
vicara | 1:30693312f670 | 37 | } |
vicara | 0:11ca69d691b7 | 38 | } |
vicara | 0:11ca69d691b7 | 39 | } |
vicara | 1:30693312f670 | 40 | |
vicara | 1:30693312f670 | 41 | void led2_thread(DigitalOut *led) { |
vicara | 1:30693312f670 | 42 | if(is_debug_enabled) |
vicara | 1:30693312f670 | 43 | printf("T2 STARTED\n"); |
vicara | 1:30693312f670 | 44 | while (true) { |
vicara | 1:30693312f670 | 45 | if(is_t1_done){ |
vicara | 1:30693312f670 | 46 | if(is_debug_enabled) |
vicara | 1:30693312f670 | 47 | printf("T2 EXECUTING\n"); |
vicara | 1:30693312f670 | 48 | is_t1_done = false; |
vicara | 1:30693312f670 | 49 | is_t2_done = false; |
vicara | 1:30693312f670 | 50 | *led = !*led; |
vicara | 1:30693312f670 | 51 | wait(1); |
vicara | 1:30693312f670 | 52 | *led = !*led; |
vicara | 1:30693312f670 | 53 | is_t2_done = true; |
vicara | 1:30693312f670 | 54 | if(is_debug_enabled) |
vicara | 1:30693312f670 | 55 | printf("T2 DONE\n\n"); |
vicara | 1:30693312f670 | 56 | } |
vicara | 1:30693312f670 | 57 | } |
vicara | 1:30693312f670 | 58 | } |
vicara | 1:30693312f670 | 59 | |
vicara | 1:30693312f670 | 60 | int main() { |
vicara | 1:30693312f670 | 61 | button.rise(&toggle_debug_mode); |
vicara | 1:30693312f670 | 62 | thread1.start(callback(led1_thread, &led1)); |
vicara | 1:30693312f670 | 63 | thread2.start(callback(led2_thread, &led2)); |
vicara | 1:30693312f670 | 64 | thread1.join(); |
vicara | 1:30693312f670 | 65 | thread2.join(); |
vicara | 1:30693312f670 | 66 | } |