*
* \brief Message test.
*
- * \version $Id$
*
* \author Daniele Basile <asterix@develer.com>
*
// 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.
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); \
} \
}
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))
// 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;
// Send and wait the message
for (int i = 0; i < 23; ++i)
{
+ process_num = 0;
SEND_MSG(0);
SEND_MSG(1);
SEND_MSG(2);
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;
}
}
}
kprintf("Message test finished..ok!\n");
return 0;
}
-
+
+error:
kprintf("Message test finished..fail!\n");
return -1;
}
{
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");