rough draft - doesn't work
Dependencies: TextLCD mbed-rtos mbed
Diff: main.cpp
- Revision:
- 3:6fad2a5b72e5
- Parent:
- 2:91cb258f9745
- Child:
- 4:f6eee8bb51c2
diff -r 91cb258f9745 -r 6fad2a5b72e5 main.cpp --- a/main.cpp Fri Oct 03 19:47:12 2014 +0000 +++ b/main.cpp Fri Oct 03 20:43:51 2014 +0000 @@ -2,15 +2,20 @@ #include "rtos.h" #include "TextLCD.h" +#define RUN 0x1 +#define STOP 0x0 + TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); Serial pc (USBTX, USBRX); DigitalOut myled(LED1); + // global vars int mm [] = {0, 0}; int ss [] = {0, 0}; int MM [] = {0, 0}; +int run_status = STOP; // functions void update_display(void const *args); @@ -21,25 +26,24 @@ int main() { Thread thread_display(update_display); - + Thread thread_mm(update_mm); + Thread thread_ss(update_ss); + Thread thread_MM(update_MM); char input = 'z'; - int run_status = 0; + while(1) { - if ( input == 's') { - if (run_status==0) { - Thread thread_mm(update_mm); - Thread thread_ss(update_ss); - Thread thread_MM(update_MM); - run_status = 1; + if (run_status==STOP) { + thread_mm.signal_set(RUN); + thread_ss.signal_set(RUN); + thread_MM.signal_set(RUN); + thread_display.signal_set(RUN); + run_status = RUN; } } if ( input == 'p') { - if (run_status==1) { - thread_mm.terminate(); - thread_ss.terminate(); - thread_MM.terminate(); - run_status = 0; + if (run_status==RUN) { + run_status = STOP; } } if ( input == 'r') { @@ -47,6 +51,7 @@ mm[0] = mm[1] = 0; ss[0] = ss[1] = 0; MM[0] = MM[1] = 0; + thread_display.signal_set(RUN); } } @@ -58,51 +63,64 @@ void update_display(void const *args) { while (1) { lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]); - Thread::wait(10); + Thread::signal_wait(RUN); + while (run_status) { + lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]); + Thread::wait(10); + } } } void update_mm(void const *args) { - while (1) { - Thread::wait(10); - mm[0]++; - if (mm[0] >= 10) { - mm[0] = 0; - mm[1]++; - } - if (mm[1] >= 10) { - mm[0] = 0; - mm[1] = 0; + while(1){ + Thread::signal_wait(RUN); + while (run_status) { + Thread::wait(10); + mm[0]++; + if (mm[0] >= 10) { + mm[0] = 0; + mm[1]++; + } + if (mm[1] >= 10) { + mm[0] = 0; + mm[1] = 0; + } } } } void update_ss(void const *args) { - while (1) { - Thread::wait(1000); - ss[0]++; - if (ss[0] >= 10) { - ss[0] = 0; - ss[1]++; - } - if (ss[1] >= 6) { - ss[0] = 0; - ss[1] = 0; + while(1) { + Thread::signal_wait(RUN); + while (run_status) { + Thread::wait(1000); + ss[0]++; + if (ss[0] >= 10) { + ss[0] = 0; + ss[1]++; + } + if (ss[1] >= 6) { + ss[0] = 0; + ss[1] = 0; + } } } } void update_MM(void const *args) { - while (1) { - Thread::wait(60000); - MM[0]++; - if (MM[0] >= 10) { - MM[0] = 0; - MM[1]++; - } - if (MM[1] >= 6) { - MM[0] = 0; - MM[1] = 0; + while(1) { + Thread::signal_wait(RUN); + while (run_status) { + Thread::wait(60000); + MM[0]++; + if (MM[0] >= 10) { + MM[0] = 0; + MM[1]++; + } + if (MM[1] >= 6) { + MM[0] = 0; + MM[1] = 0; + } } } }