Use KERN_MINSTACKSIZE and PROC_DEFINE_STACK in all tests.
authorlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 16 Sep 2009 08:04:45 +0000 (08:04 +0000)
committerlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 16 Sep 2009 08:04:45 +0000 (08:04 +0000)
Various fixes to tests:
- Fix proc_test stack and use correct flags when enabling priority test
- Fix signal_test to use less stack (kputs instead of kprintf)
- Fix idle_process stack
- Fix msg_test
- Fix buffer size in formatwr.c

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@2949 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/kern/idle.c
bertos/kern/msg.h
bertos/kern/msg_test.c
bertos/kern/proc.c
bertos/kern/proc.h
bertos/kern/proc_test.c
bertos/kern/sem_test.c
bertos/kern/signal_test.c
bertos/mware/formatwr.c

index e5713e83520e728c024658331c30809cc51b3b6a..810560a1a790f6d4a5ed96ff80f66b7354a57d8f 100644 (file)
@@ -41,7 +41,8 @@
 #include <cfg/module.h>
 
 
-static cpu_stack_t idle_stack[CONFIG_KERN_MINSTACKSIZE / sizeof(cpu_stack_t)];
+// below there's a TRACE so we need a big stack
+PROC_DEFINE_STACK(idle_stack, KERN_MINSTACKSIZE * 2);
 
 /**
  * The idle process
index 2d92f2e2c370b9da0204f1e6995c9ee925c35a3d..32232c56e018d3e2d487bddfb318fc840a50a96c 100644 (file)
  *     } TestMsg;
  *
  *
- *  static cpu_stack_t sender_stack[CONFIG_KERN_MINSTACKSIZE / sizeof(cpu_stack_t)];
+ *  PROC_DEFINE_STACK(sender_stack, KERN_MINSTACKSIZE);
  *
  *     // A process that sends two messages and waits for replies.
  *     static void sender_proc(void)
index 0deac2c87d6ec981d01559289fde6b7f57c030cb..1e4ed210b694b51b152384720bee471468ac7357 100644 (file)
@@ -68,7 +68,7 @@
 
 // Global settings for the test.
 #define MAX_GLOBAL_COUNT            11040
-#define TEST_TIME_OUT_MS               10
+#define TEST_TIME_OUT_MS             5000
 #define DELAY                           5
 
 // Settings for the test message.
@@ -107,6 +107,7 @@ static NORETURN void receiver_proc##num(void) \
                rec_msg->result += rec_msg->val; \
                kprintf("Proc[%d]..process message val[%d],delay[%d],res[%d]\n", num, rec_msg->val, rec_msg->delay, rec_msg->result); \
                msg_reply(&rec_msg->msg); \
+               process_num++; \
                kprintf("Proc[%d] reply\n", num); \
        } \
 }
@@ -118,7 +119,7 @@ static NORETURN void receiver_proc##num(void) \
                msg_put(&test_port##num, &msg##num.msg); \
        } while(0)
 
-#define RECV_STACK(num) static cpu_stack_t receiver_stack##num[800 / sizeof(cpu_stack_t)]
+#define RECV_STACK(num) PROC_DEFINE_STACK(receiver_stack##num, KERN_MINSTACKSIZE * 2)
 #define RECV_INIT_PROC(num) proc_new(receiver_proc##num, NULL, sizeof(receiver_stack##num), receiver_stack##num)
 #define RECV_INIT_MSG(num, proc, sig) msg_initPort(&test_port##num, event_createSignal(proc, sig))
 
@@ -134,6 +135,7 @@ typedef struct
 
 // Global count to check if the test is going ok.
 static int count = 0;
+static int process_num;
 
 // Our message port.
 static MsgPort test_port0;
@@ -223,6 +225,7 @@ int msg_testRun(void)
        // Send and wait the message
        for (int i = 0; i < 23; ++i)
     {
+               process_num = 0;
                SEND_MSG(0);
                SEND_MSG(1);
                SEND_MSG(2);
@@ -231,14 +234,24 @@ int msg_testRun(void)
                SEND_MSG(5);
                while(1)
                {
-                       if(sig_waitTimeout(SIG_SINGLE, TEST_TIME_OUT_MS) && SIG_SINGLE)
+                       sigmask_t sigs = sig_waitTimeout(SIG_SINGLE, ms_to_ticks(TEST_TIME_OUT_MS));
+                       if (sigs & SIG_SINGLE)
                        {
                                // Wait for a reply...
-                               reply = containerof(msg_get(&test_portMain), TestMsg, msg);
-                               if(reply == NULL)
-                                       break;
-                               count += reply->result;
-                               kprintf("Main recv[%d] count[%d]\n", reply->result, count);
+                               while ((reply = (TestMsg *)msg_get(&test_portMain)))
+                               {
+                                       count += reply->result;
+                                       kprintf("Main recv[%d] count[%d]\n", reply->result, count);
+                               }
+                       }
+                       
+                       if (process_num == 6)
+                               break;
+
+                       if (sigs & SIG_TIMEOUT)
+                       {
+                               kputs("Main: sig timeout\n");
+                               goto error;
                        }
                }
     }
@@ -248,7 +261,8 @@ int msg_testRun(void)
                kprintf("Message test finished..ok!\n");
                return 0;
        }
-
+       
+error:
        kprintf("Message test finished..fail!\n");
        return -1;
 }
index 66caa2db3c7f87c7d2c2d87705a47165409707ea..e8e2363727382ca04d9aa1052858be7f4f177f5e 100644 (file)
@@ -167,14 +167,14 @@ struct Process *proc_new_with_name(UNUSED_ARG(const char *, name), void (*entry)
        PROC_ATOMIC(stack_base = (cpu_stack_t *)list_remHead(&StackFreeList));
        ASSERT(stack_base);
 
-       stack_size = CONFIG_KERN_MINSTACKSIZE;
+       stack_size = KERN_MINSTACKSIZE;
 #elif CONFIG_KERN_HEAP
        /* Did the caller provide a stack for us? */
        if (!stack_base)
        {
                /* Did the caller specify the desired stack size? */
                if (!stack_size)
-                       stack_size = CONFIG_KERN_MINSTACKSIZE;
+                       stack_size = KERN_MINSTACKSIZE;
 
                /* Allocate stack dinamically */
                if (!(stack_base = heap_alloc(stack_size)))
index 56b5f5aa45cc6544af526dcaee3e272f60b3adc6..c28fd68fc798a2672ee3b9689d5bd8c3e749faca 100644 (file)
@@ -119,7 +119,7 @@ void proc_init(void);
  * of the stack;
  * \li have some memory for temporary variables inside called functions.
  *
- * The value given by CONFIG_KERN_MINSTACKSIZE is rather safe to use in the first place.
+ * The value given by KERN_MINSTACKSIZE is rather safe to use in the first place.
  *
  * \note The function
  * \code
index 7573e802a726a8d705e0bd94336e72617a1d3c19..ad30f711153ca120e232b18336e5afd300555d9f 100644 (file)
@@ -103,12 +103,12 @@ unsigned int t8_count = 0;
        for (int i = 0; i < INC_PROC_T##num; ++i) \
        { \
                t##num##_count++; \
-               kprintf("> Process[%d]: count[%d]\n", num, t##num##_count); \
+               kputs("> Process[" #num "]\n"); \
                timer_delay(DELAY_PROC_T##num); \
        } \
-} \
+}
 
-#define PROC_TEST_STACK(num)  static cpu_stack_t proc_test##num##_stack[700 / sizeof(cpu_stack_t)];
+#define PROC_TEST_STACK(num)  PROC_DEFINE_STACK(proc_test##num##_stack, KERN_MINSTACKSIZE);
 #define PROC_TEST_INIT(num)   proc_new(proc_test##num, NULL, sizeof(proc_test##num##_stack), proc_test##num##_stack);
 
 // Define process
@@ -135,8 +135,9 @@ PROC_TEST_STACK(8)
 #define PROC_PRI_TEST(num) static void proc_pri_test##num(void) \
 { \
        struct Process *main_proc = (struct Process *) proc_currentUserData(); \
+       kputs("> Process: " #num "\n"); \
        sig_signal(main_proc, SIG_USER##num); \
-} \
+}
 
 // Default priority is 0
 #define PROC_PRI_TEST_INIT(num, proc)  \
@@ -195,7 +196,7 @@ int proc_testRun(void)
                ret_value = -1;
        }
 
-#if CONFIG_KERN_SIGNALS
+#if CONFIG_KERN_SIGNALS & CONFIG_KERN_PRI
        // test process priority
        // main process must have the higher priority to check signals received
        proc_setPri(proc_current(), 10);
index d042ab3b8cc67d620f66ee70275860cc87e13f18..cf927d0f6801cdee0d3bf9a28b46a3b020662db2 100644 (file)
@@ -109,7 +109,7 @@ unsigned int global_count = 0;
        } \
 } \
 
-#define PROC_TEST_STACK(num)  static cpu_stack_t proc_sem_test##num##_stack[1024 / sizeof(cpu_stack_t)];
+#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
index ea8c76e26fde6f9768810ad48e6e627ef50de091..d489f62c38147b5c51028f53ecde280065bd46f5 100644 (file)
@@ -80,12 +80,12 @@ static void NORETURN proc_signalTest##index(void) \
 { \
        for(;;) \
        { \
-               kprintf("> Slave [%d]: Wait signal [%d]\n", index, signal); \
+               kputs("> Slave [" #index "]: Wait signal [" #signal "]\n"); \
                sig_wait(signal); \
-               kprintf("> Slave [%d]: send signal [%d]\n", index, signal); \
+               kputs("> Slave [" #index "]: send signal [" #signal "]\n"); \
                sig_signal(proc_currentUserData(), signal); \
        } \
-} \
+}
 
 #define MAIN_CHECK_SIGNAL(index, slave) \
        do { \
@@ -96,7 +96,7 @@ static void NORETURN proc_signalTest##index(void) \
                count++; \
        } while(0) \
 
-#define PROC_TEST_SLAVE_STACK(index) static cpu_stack_t proc_signal_test##index##_stack[700 / sizeof(cpu_stack_t)];
+#define PROC_TEST_SLAVE_STACK(index) PROC_DEFINE_STACK(proc_signal_test##index##_stack, KERN_MINSTACKSIZE);
 #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)
 
 // Generate the code for signal test.
index 3f11522e2c5e8daa63b3fa2156a824d3f7c1383d..7baea75ac0aff86f2b68346997642362e3f40a5b 100644 (file)
        /* Maximum precision for floating point values */
        typedef long double max_float_t;
 
-       /*bernie: save some memory, who cares about floats with lots of decimals? */
-       #define FRMWRI_BUFSIZE 134
-       #warning FIXME:134 is too much, the code must be fixed to have a lower precision limit
+       /*luca: FIXME: this should be enough to print floating point values, must be investigated
+        * further.
+        */
+       #define FRMWRI_BUFSIZE 20
 #else
        /*
         * Conservative estimate. Should be (probably) 12 (which is the size necessary