summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/sp28/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/sptests/sp28/init.c')
-rw-r--r--testsuites/sptests/sp28/init.c44
1 files changed, 34 insertions, 10 deletions
diff --git a/testsuites/sptests/sp28/init.c b/testsuites/sptests/sp28/init.c
index f6f7d70218..e2c5a40027 100644
--- a/testsuites/sptests/sp28/init.c
+++ b/testsuites/sptests/sp28/init.c
@@ -7,10 +7,11 @@
rtems_task Init(rtems_task_argument argument);
-#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
-#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 2
+#define CONFIGURE_MAXIMUM_TASKS 4
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MICROSECONDS_PER_TICK 52429
@@ -23,6 +24,8 @@ rtems_task Init(rtems_task_argument argument);
#include <stdio.h>
volatile void *taskvar;
+volatile int nRunning;
+volatile int nDeleted;
rtems_task
subtask (rtems_task_argument arg)
@@ -31,7 +34,10 @@ subtask (rtems_task_argument arg)
int i;
rtems_status_code sc;
- sc = rtems_task_variable_add (RTEMS_SELF, &taskvar, NULL);
+ nRunning++;
+ while (nRunning != 3)
+ rtems_task_wake_after (0);
+ sc = rtems_task_variable_add (RTEMS_SELF, (void **)&taskvar, NULL);
if (sc != RTEMS_SUCCESSFUL) {
printf ("Can't add task variable: %s\n", rtems_status_text (sc));
rtems_task_suspend (RTEMS_SELF);
@@ -47,23 +53,37 @@ subtask (rtems_task_argument arg)
rtems_task_suspend (RTEMS_SELF);
}
}
- sc = rtems_task_variable_delete (RTEMS_SELF, &taskvar);
+ sc = rtems_task_variable_delete (RTEMS_SELF, (void **)&taskvar);
+ nDeleted++;
if (sc != RTEMS_SUCCESSFUL) {
printf ("Can't delete task variable: %s\n", rtems_status_text (sc));
+ nRunning--;
+ rtems_task_suspend (RTEMS_SELF);
+ }
+ if ((int)taskvar == localvar) {
+ printf ("Task:%d deleted taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
+ nRunning--;
rtems_task_suspend (RTEMS_SELF);
}
- for (i = 0 ; ; i++) {
+ while (nDeleted != 3)
+ rtems_task_wake_after (0);
+ for (i = 0 ; i < 1000 ; i++) {
taskvar = (void *)(localvar = 100 * arg);
rtems_task_wake_after (0);
+ if (nRunning <= 1)
+ break;
if ((int)taskvar == localvar) {
printf ("Task:%d taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
+ nRunning--;
rtems_task_suspend (RTEMS_SELF);
}
- if ((arg == 3) && (i == 100)) {
- printf ("Task variables test succeeded.\n");
- exit (0);
- }
}
+ nRunning--;
+ while (nRunning)
+ rtems_task_wake_after (0);
+ printf ("Task variables test complete.\n");
+ puts ("*** END OF TEST SP28 ***" );
+ exit (0);
}
void
@@ -74,7 +94,7 @@ starttask (int arg)
sc = rtems_task_create (rtems_build_name ('S', 'R', 'V', arg + 'A'),
100,
- 10000,
+ RTEMS_MINIMUM_STACK_SIZE,
RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
&tid);
@@ -92,6 +112,10 @@ starttask (int arg)
rtems_task
Init (rtems_task_argument ignored)
{
+
+ puts ("*** START OF TEST SP28 ***" );
+ puts ("Task variables test begins. Any output between\n");
+ puts ("this line and the `Task variables test complete' line indicates an error.\n");
starttask (1);
starttask (2);
starttask (3);