diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-10 20:36:25 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-10 20:36:25 +0000 |
commit | 74db82a343c7d2451b6887536608232dee172253 (patch) | |
tree | 9e390044d1fff009655864464227fdf9cc7e854b /testsuites/sptests/sp27 | |
parent | Patch from Eric Norum <eric@cls.usask.ca> which includes: (diff) | |
download | rtems-74db82a343c7d2451b6887536608232dee172253.tar.bz2 |
rtems_semaphore_flush test from Eric Norum <eric@cls.usask.ca>.
Diffstat (limited to 'testsuites/sptests/sp27')
-rw-r--r-- | testsuites/sptests/sp27/init.c | 103 | ||||
-rw-r--r-- | testsuites/sptests/sp27/sp27.doc | 0 | ||||
-rw-r--r-- | testsuites/sptests/sp27/sp27.scn | 0 |
3 files changed, 103 insertions, 0 deletions
diff --git a/testsuites/sptests/sp27/init.c b/testsuites/sptests/sp27/init.c new file mode 100644 index 0000000000..4ae5befb78 --- /dev/null +++ b/testsuites/sptests/sp27/init.c @@ -0,0 +1,103 @@ +/* + * Test for rtems_semaphore_flush + * + * $Id$ + */ + +#include <bsp.h> + +rtems_task Init (rtems_task_argument argument); + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MICROSECONDS_PER_TICK 52429 + +#define CONFIGURE_INIT + +#include <confdefs.h> + +#include <rtems/error.h> +#include <stdio.h> + +#define NTASK 4 + +rtems_id semaphore; +volatile int flags[NTASK]; + +rtems_task +subtask (rtems_task_argument arg) +{ + rtems_status_code sc; + + for (;;) { + flags[arg]++; + sc = rtems_semaphore_obtain (semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + if (sc == RTEMS_SUCCESSFUL) + puts ("Obtained semaphore -- and should not have done so!"); + else if (sc != RTEMS_UNSATISFIED) + printf ("Can't get semaphore: %s\n", rtems_status_text (sc)); + } +} + +void +starttask (int arg) +{ + rtems_id tid; + rtems_status_code sc; + rtems_task_priority priority; + + rtems_task_set_priority (RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + sc = rtems_task_create (rtems_build_name ('S', 'R', 'V', arg + 'A'), + priority, + 10000, + RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0), + RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL, + &tid); + if (sc != RTEMS_SUCCESSFUL) { + printf ("Can't create task: %s\n", rtems_status_text (sc)); + rtems_task_suspend (RTEMS_SELF); + } + sc = rtems_task_start (tid, subtask, arg); + if (sc != RTEMS_SUCCESSFUL) { + printf ("Can't start task: %s\n", rtems_status_text (sc)); + rtems_task_suspend (RTEMS_SELF); + } +} + +rtems_task +Init (rtems_task_argument ignored) +{ + int pass, i; + rtems_status_code sc; + + puts("**** Semaphore flush test ****"); + sc = rtems_semaphore_create ( + rtems_build_name ('S', 'E', 'M', 'F'), + 0, + RTEMS_LOCAL|RTEMS_BINARY_SEMAPHORE|RTEMS_NO_INHERIT_PRIORITY|RTEMS_NO_PRIORITY_CEILING|RTEMS_FIFO, + 0, + &semaphore); + if (sc != RTEMS_SUCCESSFUL) { + printf ("Can't flush semaphore: %s\n", rtems_status_text (sc)); + exit (1); + } + for (i = 0 ; i < NTASK ; i++) + starttask (i); + for (pass = 1 ; pass < 10 ; pass++) { + rtems_task_wake_after (1); + for (i = 0 ; i < NTASK ; i++) { + if (flags[i] != pass) + printf ("flags[%d] = %d -- expected %d\n", i, flags[i], pass); + } + sc = rtems_semaphore_flush (semaphore); + if (sc != RTEMS_SUCCESSFUL) { + printf ("Can't flush semaphore: %s\n", rtems_status_text (sc)); + exit (1); + } + } + puts ("**** Semaphore flush test succeeded ****"); + exit (1); +} diff --git a/testsuites/sptests/sp27/sp27.doc b/testsuites/sptests/sp27/sp27.doc new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuites/sptests/sp27/sp27.doc diff --git a/testsuites/sptests/sp27/sp27.scn b/testsuites/sptests/sp27/sp27.scn new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuites/sptests/sp27/sp27.scn |