Merge branch "preempt" in "trunk".
[bertos.git] / bertos / kern / sem_test.c
index 1638656705cc89084612b7b1ca248be3f5b0e376..555f755d1562076e5dd857e304c403874f010bba 100644 (file)
  * \brief Semaphore test.
  *
  * \version $Id$
- * 
+ *
  * \author Daniele Basile <asterix@develer.com>
- * \author Stefano Fedrigo <aleph@develer.com> 
- * 
+ * \author Stefano Fedrigo <aleph@develer.com>
+ *
+ * $test$: cp bertos/cfg/cfg_proc.h $cfgdir/
+ * $test$: echo  "#undef CONFIG_KERN" >> $cfgdir/cfg_proc.h
+ * $test$: echo "#define CONFIG_KERN 1" >> $cfgdir/cfg_proc.h
+ * $test$: cp bertos/cfg/cfg_sem.h $cfgdir/
+ * $test$: echo  "#undef CONFIG_KERN_SEMAPHORES" >> $cfgdir/cfg_sem.h
+ * $test$: echo "#define CONFIG_KERN_SEMAPHORES 1" >> $cfgdir/cfg_sem.h
  */
 
+#include <cfg/debug.h>
 #include <cfg/test.h>
 
 #include <kern/sem.h>
@@ -48,8 +55,8 @@
 
 // Global settings for the test.
 #define MAX_GLOBAL_COUNT             1024
-#define TEST_TIME_OUT_MS             4000
-#define DELAY                          10
+#define TEST_TIME_OUT_MS             6000
+#define DELAY                           5
 
 // Settings for the test process.
 //Process 1
 #define DELAY_PROC_T3   INC_PROC_T3*DELAY
 //Process 4
 #define INC_PROC_T4                     7
-#define DELAY_PROC_T4   INC_PROC_T3*DELAY
+#define DELAY_PROC_T4   INC_PROC_T4*DELAY
 //Process 5
 #define INC_PROC_T5                    11
-#define DELAY_PROC_T5   INC_PROC_T3*DELAY
+#define DELAY_PROC_T5   INC_PROC_T5*DELAY
 //Process 6
 #define INC_PROC_T6                    13
-#define DELAY_PROC_T6   INC_PROC_T3*DELAY
+#define DELAY_PROC_T6   INC_PROC_T6*DELAY
 //Process 7
 #define INC_PROC_T7                    17
-#define DELAY_PROC_T7   INC_PROC_T3*DELAY
+#define DELAY_PROC_T7   INC_PROC_T7*DELAY
 //Process 8
 #define INC_PROC_T8                    19
-#define DELAY_PROC_T8   INC_PROC_T3*DELAY
-//Process 9
-#define INC_PROC_T9                    23
-#define DELAY_PROC_T9   INC_PROC_T3*DELAY
-//Process 10
-#define INC_PROC_T10                   29
-#define DELAY_PROC_T10  INC_PROC_T3*DELAY
+#define DELAY_PROC_T8   INC_PROC_T8*DELAY
 
 Semaphore sem;
 unsigned int global_count = 0;
 
 /*
- * These macro generate the code that needed to create the
- * test process function and all it needed. 
- */ 
-#define PROC_TEST(num) static void proc_test##num(void) \
+ * These macros generate the code needed to create the test process functions.
+ */
+#define PROC_TEST(num) static void proc_semTest##num(void) \
 { \
        unsigned int local_count = 0; \
        \
@@ -109,8 +109,8 @@ unsigned int global_count = 0;
        } \
 } \
 
-#define PROC_TEST_STACK(num)  static cpu_stack_t proc_test##num##_stack[CONFIG_KERN_MINSTACKSIZE / sizeof(cpu_stack_t)];
-#define PROC_TEST_INIT(num)   proc_new(proc_test##num, NULL, sizeof(proc_test##num##_stack), proc_test##num##_stack);
+#define PROC_TEST_STACK(num)  PROC_DEFINE_STACK(proc_sem_test##num##_stack, KERN_MINSTACKSIZE * 2)
+#define PROC_TEST_INIT(num)   proc_new(proc_semTest##num, NULL, sizeof(proc_sem_test##num##_stack), proc_sem_test##num##_stack);
 
 // Define process
 PROC_TEST(1)
@@ -121,10 +121,7 @@ PROC_TEST(5)
 PROC_TEST(6)
 PROC_TEST(7)
 PROC_TEST(8)
-/*
-PROC_TEST(9)
-PROC_TEST(10)
-*/
+
 // Define process stacks for test.
 PROC_TEST_STACK(1)
 PROC_TEST_STACK(2)
@@ -134,10 +131,7 @@ PROC_TEST_STACK(5)
 PROC_TEST_STACK(6)
 PROC_TEST_STACK(7)
 PROC_TEST_STACK(8)
-/*
-PROC_TEST_STACK(9)
-PROC_TEST_STACK(10)
-*/
+
 /**
  * Run semaphore test
  */
@@ -146,7 +140,7 @@ int sem_testRun(void)
        ticks_t start_time = timer_clock();
 
        kprintf("Run semaphore test..\n");
-       
+
        //Init the process tests
        PROC_TEST_INIT(1)
        PROC_TEST_INIT(2)
@@ -156,21 +150,17 @@ int sem_testRun(void)
        PROC_TEST_INIT(6)
        PROC_TEST_INIT(7)
        PROC_TEST_INIT(8)
-       /*
-       PROC_TEST_INIT(9)
-       PROC_TEST_INIT(10)
-        */
        kputs("> Main: Processes created\n");
-       
+
        /*
-        * Wait until all process finishing, if some going wrong we return 
-        * error after time_out_ms ms.
-        */ 
+        * Wait until all processes exit, if something goes wrong we return an
+        * error after timeout_ms.
+        */
        while((timer_clock() - start_time) < ms_to_ticks(TEST_TIME_OUT_MS))
        {
                if (sem_attempt(&sem))
                {
-                       kputs("> Main: Check if test is finish..\n");
+                       kputs("> Main: Check if test has finished..\n");
                        if(global_count == MAX_GLOBAL_COUNT)
                        {
                                kputs("> Main: Test Finished..Ok!\n");
@@ -181,7 +171,7 @@ int sem_testRun(void)
                }
                proc_yield();
        }
-       
+
        kputs("Semaphore Test fail..\n");
        return -1;
 }
@@ -193,21 +183,15 @@ int sem_testSetup(void)
        kprintf("Init Semaphore..");
        sem_init(&sem);
        kprintf("Done.\n");
-       
-       #if CONFIG_KERN_PREEMPT
-               kprintf("Init Interrupt (preempt mode)..");
-               irq_init();
-               kprintf("Done.\n");
-       #endif
 
        kprintf("Init Timer..");
        timer_init();
        kprintf("Done.\n");
-       
+
        kprintf("Init Process..");
        proc_init();
        kprintf("Done.\n");
-       
+
        return 0;
 }
 
@@ -217,4 +201,4 @@ int sem_testTearDown(void)
        return 0;
 }
 
-TEST_MAIN(sem);
\ No newline at end of file
+TEST_MAIN(sem);