From df49c60c9671e4a28e636964d744c1f59fb6cb68 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 12 Jun 2000 15:00:15 +0000 Subject: Merged from 4.5.0-beta3a --- testsuites/sptests/sp28/Makefile.am | 4 ++-- testsuites/sptests/sp28/init.c | 44 ++++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 12 deletions(-) (limited to 'testsuites/sptests/sp28') diff --git a/testsuites/sptests/sp28/Makefile.am b/testsuites/sptests/sp28/Makefile.am index 5f966b4eb2..af4a0834d5 100644 --- a/testsuites/sptests/sp28/Makefile.am +++ b/testsuites/sptests/sp28/Makefile.am @@ -1,6 +1,6 @@ -## +## ## $Id$ -## +## AUTOMAKE_OPTIONS = foreign 1.4 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 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); -- cgit v1.2.3