Modify the BlinkThreadCallback example so you run two threads that blink different LEDs once per second by waiting for each other

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?

UserRevisionLine numberNew 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 }