* \brief Semaphore test.
*
* \version $Id$
- *
+ *
* \author Daniele Basile <asterix@develer.com>
- * \author Stefano Fedrigo <aleph@develer.com>
- *
+ * \author Stefano Fedrigo <aleph@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_sem.h $cfgdir/
+ * $test$: echo "#undef CONFIG_KERN_SEMAPHORES" >> $cfgdir/cfg_sem.h
+ * $test$: echo "#define CONFIG_KERN_SEMAPHORES 1" >> $cfgdir/cfg_sem.h
*/
+#include <cfg/debug.h>
#include <cfg/test.h>
#include <kern/sem.h>
// Global settings for the test.
#define MAX_GLOBAL_COUNT 1024
-#define TEST_TIME_OUT_MS 4000
-#define DELAY 10
+#define TEST_TIME_OUT_MS 6000
+#define DELAY 5
// Settings for the test process.
//Process 1
#define DELAY_PROC_T3 INC_PROC_T3*DELAY
//Process 4
#define INC_PROC_T4 7
-#define DELAY_PROC_T4 INC_PROC_T3*DELAY
+#define DELAY_PROC_T4 INC_PROC_T4*DELAY
//Process 5
#define INC_PROC_T5 11
-#define DELAY_PROC_T5 INC_PROC_T3*DELAY
+#define DELAY_PROC_T5 INC_PROC_T5*DELAY
//Process 6
#define INC_PROC_T6 13
-#define DELAY_PROC_T6 INC_PROC_T3*DELAY
+#define DELAY_PROC_T6 INC_PROC_T6*DELAY
//Process 7
#define INC_PROC_T7 17
-#define DELAY_PROC_T7 INC_PROC_T3*DELAY
+#define DELAY_PROC_T7 INC_PROC_T7*DELAY
//Process 8
#define INC_PROC_T8 19
-#define DELAY_PROC_T8 INC_PROC_T3*DELAY
-//Process 9
-#define INC_PROC_T9 23
-#define DELAY_PROC_T9 INC_PROC_T3*DELAY
-//Process 10
-#define INC_PROC_T10 29
-#define DELAY_PROC_T10 INC_PROC_T3*DELAY
+#define DELAY_PROC_T8 INC_PROC_T8*DELAY
Semaphore sem;
unsigned int global_count = 0;
/*
- * These macro generate the code that needed to create the
- * test process function and all it needed.
- */
-#define PROC_TEST(num) static void proc_test##num(void) \
+ * These macros generate the code needed to create the test process functions.
+ */
+#define PROC_TEST(num) static void proc_semTest##num(void) \
{ \
unsigned int local_count = 0; \
\
} \
} \
-#define PROC_TEST_STACK(num) static cpu_stack_t proc_test##num##_stack[CONFIG_KERN_MINSTACKSIZE / sizeof(cpu_stack_t)];
-#define PROC_TEST_INIT(num) proc_new(proc_test##num, NULL, sizeof(proc_test##num##_stack), proc_test##num##_stack);
+#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
PROC_TEST(1)
PROC_TEST(6)
PROC_TEST(7)
PROC_TEST(8)
-/*
-PROC_TEST(9)
-PROC_TEST(10)
-*/
+
// Define process stacks for test.
PROC_TEST_STACK(1)
PROC_TEST_STACK(2)
PROC_TEST_STACK(6)
PROC_TEST_STACK(7)
PROC_TEST_STACK(8)
-/*
-PROC_TEST_STACK(9)
-PROC_TEST_STACK(10)
-*/
+
/**
* Run semaphore test
*/
ticks_t start_time = timer_clock();
kprintf("Run semaphore test..\n");
-
+
//Init the process tests
PROC_TEST_INIT(1)
PROC_TEST_INIT(2)
PROC_TEST_INIT(6)
PROC_TEST_INIT(7)
PROC_TEST_INIT(8)
- /*
- PROC_TEST_INIT(9)
- PROC_TEST_INIT(10)
- */
kputs("> Main: Processes created\n");
-
+
/*
- * Wait until all process finishing, if some going wrong we return
- * error after time_out_ms ms.
- */
+ * Wait until all processes exit, if something goes wrong we return an
+ * error after timeout_ms.
+ */
while((timer_clock() - start_time) < ms_to_ticks(TEST_TIME_OUT_MS))
{
if (sem_attempt(&sem))
{
- kputs("> Main: Check if test is finish..\n");
+ kputs("> Main: Check if test has finished..\n");
if(global_count == MAX_GLOBAL_COUNT)
{
kputs("> Main: Test Finished..Ok!\n");
}
proc_yield();
}
-
+
kputs("Semaphore Test fail..\n");
return -1;
}
kprintf("Init Semaphore..");
sem_init(&sem);
kprintf("Done.\n");
-
- #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");
-
+
return 0;
}
return 0;
}
-TEST_MAIN(sem);
\ No newline at end of file
+TEST_MAIN(sem);