From 2fea34dd1c2224dad55b83700b944aa26c6cf9fc Mon Sep 17 00:00:00 2001
From: NIIBE Yutaka <gniibe@fsij.org>
Date: Wed, 5 Jun 2013 17:26:38 +0900
Subject: bug fixes for SCHED_RR

---
 example-led/Makefile |  3 ++-
 example-led/sample.c | 29 ++++++++++++++++++++++++-----
 2 files changed, 26 insertions(+), 6 deletions(-)

(limited to 'example-led')

diff --git a/example-led/Makefile b/example-led/Makefile
index 085d42b..f06a274 100644
--- a/example-led/Makefile
+++ b/example-led/Makefile
@@ -14,7 +14,8 @@ OBJCOPY   = $(CROSS)objcopy
 
 MCU   = cortex-m3
 CWARN = -Wall -Wextra -Wstrict-prototypes
-DEFS  = -DFREE_STANDING
+# DEFS  = -DFREE_STANDING
+DEFS  = -DFREE_STANDING -DBUSY_LOOP -DCHX_FLAGS_MAIN=CHOPSTX_SCHED_RR
 OPT   = -O3 -Os -g
 LIBS  =
 
diff --git a/example-led/sample.c b/example-led/sample.c
index c1036d6..c89b2bc 100644
--- a/example-led/sample.c
+++ b/example-led/sample.c
@@ -10,6 +10,20 @@ static chopstx_cond_t cnd1;
 static uint8_t u, v;
 static uint8_t m;		/* 0..100 */
 
+static void
+wait_for (uint32_t usec)
+{
+#if defined(BUSY_LOOP)
+  uint32_t count = usec *18;
+  uint32_t i;
+
+  for (i = 0; i < count; i++)
+    asm volatile ("" : : "r" (i) : "memory");
+#else
+  chopstx_usec_wait (usec);
+#endif
+}
+
 static void *
 pwm (void *arg)
 {
@@ -22,9 +36,9 @@ pwm (void *arg)
   while (1)
     {
       set_led (u&v);
-      chopstx_usec_wait (m);
+      wait_for (m);
       set_led (0);
-      chopstx_usec_wait (100-m);
+      wait_for (100-m);
     }
 
   return NULL;
@@ -42,16 +56,21 @@ blk (void *arg)
   while (1)
     {
       v = 0;
-      chopstx_usec_wait (200*1000);
+      wait_for (200*1000);
       v = 1;
-      chopstx_usec_wait (200*1000);
+      wait_for (200*1000);
     }
 
   return NULL;
 }
 
+#if defined(BUSY_LOOP)
+#define PRIO_PWM (CHOPSTX_SCHED_RR|1)
+#define PRIO_BLK (CHOPSTX_SCHED_RR|1)
+#else
 #define PRIO_PWM 3
 #define PRIO_BLK 2
+#endif
 
 extern uint8_t __process1_stack_base__, __process1_stack_size__;
 extern uint8_t __process2_stack_base__, __process2_stack_size__;
@@ -88,7 +107,7 @@ main (int argc, const char *argv[])
   while (1)
     {
       u ^= 1;
-      chopstx_usec_wait (200*1000*6);
+      wait_for (200*1000*6);
     }
 
   return 0;
-- 
cgit v1.2.3