rough draft - doesn't work

Dependencies:   TextLCD mbed-rtos mbed

Revision:
3:6fad2a5b72e5
Parent:
2:91cb258f9745
Child:
4:f6eee8bb51c2
--- 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;
+            }
         }
     }
 }