Thread Sync Example

Dependencies:   C12832

Revision:
0:567c690c073a
Child:
1:a477e0d640e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Mar 22 15:16:05 2017 +0000
@@ -0,0 +1,134 @@
+// see: [[RTOS: Demonstration Setup]] 
+// Trace ab 15:00
+
+#include "mbed.h"
+
+class Rgb
+{
+private:
+    DigitalOut _led;
+ 
+public:
+    Rgb(PinName ld) : _led(ld) { _led = 1};  // Constructor
+    
+    void LedOn() {
+        _led = 0;
+    }
+    void LedOff(){
+        _led.write(1);
+    }
+};  
+
+class HasA
+{
+private:
+    DigitalOut _led;
+ 
+public:
+    HasA(PinName ld) : _led(ld) {};  // Constructor
+    
+    void LedOn() {
+        _led = 1;
+    }
+    void LedOff(){
+        _led.write(0);
+    }
+};  
+
+void Delay_Nonsense(uint32_t * DelayCounter, uint32_t const * TargetCount)
+{
+    while(*DelayCounter <= *TargetCount)
+    {
+        *DelayCounter = *DelayCounter + 1;
+    }
+
+    *DelayCounter = 0;
+}
+
+//M3 r (p23); g (p24); b (p25);
+/*
+HasA Led1(LED1);
+HasA Led2(LED2);
+HasA Led3(LED3);
+*/
+Rgb Led1(p23);
+Rgb Led2(p24);
+Rgb Led3(p25);
+
+//void Led1_Blink(void *pvParameters)
+void Led1_Blink()       // red long
+{
+   const int xDelay = 500; 
+   uint32_t BlueDelay = 0;
+   const uint32_t TargetCount = 16000;
+
+   for(;;) {    
+       for(int i = 0; i < 10; i++) {        // randomnes
+          wait_ms(xDelay);
+       }
+
+       {
+           Led1.LedOn();
+           Delay_Nonsense(&BlueDelay, &TargetCount);
+           wait_ms(xDelay);
+           Led1.LedOff();
+           Delay_Nonsense(&BlueDelay, &TargetCount);
+           wait_ms(xDelay);
+       }
+   }
+}
+
+void Led2_Blink()   // green
+{
+   const int xDelay = 250; 
+   uint32_t BlueDelay = 0;
+   const uint32_t TargetCount = 16000;
+
+   for(;;) {
+       for(int i = 0; i < 10; i++) {     // randomnes
+          wait_ms(xDelay);
+       }
+       {
+           Led2.LedOn();
+           Delay_Nonsense(&BlueDelay, &TargetCount);
+           wait_ms(xDelay);
+           Led2.LedOff();
+           Delay_Nonsense(&BlueDelay, &TargetCount);
+           wait_ms(xDelay);
+       }
+   }
+}
+
+void Led3_Blink()   // blue very short
+{
+   const int xDelay = 100; 
+   uint32_t BlueDelay = 0;
+   const uint32_t TargetCount = 16000;
+
+   for(;;) {
+       for(int i = 0; i < 10; i++) {     // randomnes
+          wait_ms(xDelay);
+       }
+       {
+           Led3.LedOn();
+           Delay_Nonsense(&BlueDelay, &TargetCount);
+           wait_ms(xDelay);
+           Led3.LedOff();
+           Delay_Nonsense(&BlueDelay, &TargetCount);
+           wait_ms(xDelay);
+       }
+   }
+}
+
+Thread thread1;
+Thread thread2;
+Thread thread3;
+
+int main() {
+    thread1.start(Led1_Blink);
+    thread2.start(Led2_Blink);
+    thread3.start(Led3_Blink);
+
+    while(1) {
+    }
+}