X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fmsg_test.c;h=ab7bebd95f59107ea08d54dbd8b6ddbbbfca9623;hb=4278d44ef7681c56f4bd16615c3c4d9338112df4;hp=22a79bdf7a78dd3608adbc7213ac693c921c23a9;hpb=c863f160d11502e2c452d567df1f8642ba2694c3;p=bertos.git diff --git a/bertos/kern/msg_test.c b/bertos/kern/msg_test.c index 22a79bdf..ab7bebd9 100644 --- a/bertos/kern/msg_test.c +++ b/bertos/kern/msg_test.c @@ -32,7 +32,6 @@ * * \brief Message test. * - * \version $Id$ * * \author Daniele Basile * @@ -68,7 +67,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. @@ -95,7 +94,7 @@ * These macros generate the code needed to create the test process functions. */ #define RECV_PROC(num, sig) \ -static void receiver_proc##num(void) \ +static NORETURN void receiver_proc##num(void) \ { \ TestMsg *rec_msg; \ for(;;) \ @@ -107,6 +106,7 @@ static 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 +118,7 @@ static 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 +134,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 +224,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 +233,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 +260,8 @@ int msg_testRun(void) kprintf("Message test finished..ok!\n"); return 0; } - + +error: kprintf("Message test finished..fail!\n"); return -1; } @@ -257,12 +270,6 @@ int msg_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");