X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fmsg_test.c;h=bcb20ea288ef89e94da0569664108d4421915346;hb=32d1445272120a254d77ce8d1af1f527da7a2c17;hp=0deac2c87d6ec981d01559289fde6b7f57c030cb;hpb=0c71afa65077b10d069192c1d36c0df1440e1b97;p=bertos.git diff --git a/bertos/kern/msg_test.c b/bertos/kern/msg_test.c index 0deac2c8..bcb20ea2 100644 --- a/bertos/kern/msg_test.c +++ b/bertos/kern/msg_test.c @@ -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; } @@ -257,12 +271,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");