Add sam3n bechmark into nightly test.
[bertos.git] / bertos / kern / signal_test.c
index a0fc610b734d86cbdf3b4fb2d6c5af838e8b2ea4..6734347b0e345089a0c7dbf8ff725b0f9023027f 100644 (file)
  * -->
  *
  * \brief Signals test.
- * 
- * \version $Id$
- * 
+ *
+ *
  * \author Daniele Basile <asterix@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_signal.h $cfgdir/
+ * $test$: echo  "#undef CONFIG_KERN_SIGNALS" >> $cfgdir/cfg_signal.h
+ * $test$: echo "#define CONFIG_KERN_SIGNALS 1" >> $cfgdir/cfg_signal.h
  */
 
-#include <cfg/cfg_timer.h>
+#include "cfg/cfg_timer.h"
 #include <cfg/debug.h>
 #include <cfg/test.h>
 
@@ -56,7 +62,7 @@ int test_signal[] = {
        SIG_TIMEOUT,
        SIG_SYSTEM5,
        SIG_SYSTEM6,
-       SIG_SINGLE      
+       SIG_SINGLE
 };
 
 // Current signal to send
@@ -67,39 +73,33 @@ sigmask_t sig_to_slave;
 
 /*
  * These macros generate the code needed to create the test process functions.
- */ 
-#define PROC_TEST_SLAVE(index, signal) static void proc_test##index(void) \
+ */
+#define PROC_TEST_SLAVE(index, signal) \
+static void proc_signalTest##index(void) \
 { \
-       for(;;) \
-       { \
-               kprintf("> Slave [%d]: Wait signal [%d]\n", index, signal); \
-               sig_wait(signal); \
-               kprintf("> Slave [%d]: send signal [%d]\n", index, signal); \
-               sig_signal(proc_currentUserData(), signal); \
-       } \
-} \
+       kputs("> Slave [" #index "]: Wait signal [" #signal "]\n"); \
+       sig_wait(signal); \
+       kputs("> Slave [" #index "]: send signal [" #signal "]\n"); \
+       sig_send(proc_currentUserData(), signal); \
+}
 
 #define MAIN_CHECK_SIGNAL(index, slave) \
        do { \
                kprintf("> Main: send signal [%d]\n", test_signal[index]); \
-               sig_signal(slave, test_signal[index]); \
+               sig_send(slave, test_signal[index]); \
                kprintf("> Main: wait signal [%d]\n", test_signal[index]); \
                sig_wait(test_signal[index]); \
                count++; \
        } while(0) \
 
-#define PROC_TEST_SLAVE_STACK(index) static cpu_stack_t proc_test##index##_stack[CONFIG_KERN_MINSTACKSIZE / sizeof(cpu_stack_t)];
-#define PROC_TEST_SLAVE_INIT(index, master_process) proc_new(proc_test##index, master_process, sizeof(proc_test##index##_stack), proc_test##index##_stack)
+#if CONFIG_KERN_HEAP
 
-// Generate the code for signal test.
-PROC_TEST_SLAVE(0, SIG_USER0)
-PROC_TEST_SLAVE(1, SIG_USER1)
-PROC_TEST_SLAVE(2, SIG_USER2)
-PROC_TEST_SLAVE(3, SIG_USER3)
-PROC_TEST_SLAVE(4, SIG_TIMEOUT)
-PROC_TEST_SLAVE(5, SIG_SYSTEM5)
-PROC_TEST_SLAVE(6, SIG_SYSTEM6)
-PROC_TEST_SLAVE(7, SIG_SINGLE)
+#define PROC_TEST_SLAVE_INIT(index, master_process) proc_new(proc_signalTest##index, master_process, KERN_MINSTACKSIZE * 2, NULL)
+
+#else
+
+#define PROC_TEST_SLAVE_STACK(index) PROC_DEFINE_STACK(proc_signal_test##index##_stack, KERN_MINSTACKSIZE * 2);
+#define PROC_TEST_SLAVE_INIT(index, master_process) proc_new(proc_signalTest##index, master_process, sizeof(proc_signal_test##index##_stack), proc_signal_test##index##_stack)
 
 PROC_TEST_SLAVE_STACK(0)
 PROC_TEST_SLAVE_STACK(1)
@@ -110,6 +110,18 @@ PROC_TEST_SLAVE_STACK(5)
 PROC_TEST_SLAVE_STACK(6)
 PROC_TEST_SLAVE_STACK(7)
 
+#endif
+
+// Generate the code for signal test.
+PROC_TEST_SLAVE(0, SIG_USER0)
+PROC_TEST_SLAVE(1, SIG_USER1)
+PROC_TEST_SLAVE(2, SIG_USER2)
+PROC_TEST_SLAVE(3, SIG_USER3)
+PROC_TEST_SLAVE(4, SIG_TIMEOUT)
+PROC_TEST_SLAVE(5, SIG_SYSTEM5)
+PROC_TEST_SLAVE(6, SIG_SYSTEM6)
+PROC_TEST_SLAVE(7, SIG_SINGLE)
+
 /**
  * Run signal test
  */
@@ -143,13 +155,13 @@ int signal_testRun(void)
        MAIN_CHECK_SIGNAL(5, slave_5);
        MAIN_CHECK_SIGNAL(6, slave_6);
        MAIN_CHECK_SIGNAL(7, slave_7);
-       
+
        if(count == countof(test_signal))
        {
                kprintf("Signal test finished..ok!\n");
                return 0;
        }
-       
+
        kprintf("Signal test finished..fail!\n");
        return -1;
 }
@@ -158,16 +170,10 @@ int signal_testSetup(void)
 {
        kdbg_init();
 
-       #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");
@@ -180,4 +186,4 @@ int signal_testTearDown(void)
        return 0;
 }
 
-TEST_MAIN(signal);
\ No newline at end of file
+TEST_MAIN(signal);