diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/tests/sptests/sp28/Makefile.in | 81 | ||||
-rw-r--r-- | c/src/tests/sptests/sp28/init.c | 96 | ||||
-rw-r--r-- | c/src/tests/sptests/sp28/sp28.doc | 0 | ||||
-rw-r--r-- | c/src/tests/sptests/sp28/sp28.scn | 1 |
4 files changed, 178 insertions, 0 deletions
diff --git a/c/src/tests/sptests/sp28/Makefile.in b/c/src/tests/sptests/sp28/Makefile.in new file mode 100644 index 0000000000..10714ff54e --- /dev/null +++ b/c/src/tests/sptests/sp28/Makefile.in @@ -0,0 +1,81 @@ +# +# $Id$ +# + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +subdir = sp28 + +RTEMS_ROOT = @RTEMS_ROOT@ +PROJECT_ROOT = @PROJECT_ROOT@ + +VPATH = @srcdir@ + +TEST = sp28 + +MANAGERS = all + +# C source names, if any, go here -- minus the .c +C_PIECES = init +C_FILES = $(C_PIECES:%=%.c) +C_O_FILES = $(C_PIECES:%=${ARCH}/%.o) + +H_FILES = + +DOCTYPES = scn doc +DOCS = $(DOCTYPES:%=$(TEST).%) + +SRCS = $(DOCS) $(C_FILES) $(H_FILES) +OBJS = $(C_O_FILES) + +PRINT_SRCS = $(DOCS) + +PGM = ${ARCH}/$(TEST).exe + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(RTEMS_ROOT)/make/leaf.cfg + +INSTALL_CHANGE = @INSTALL_CHANGE@ +PACKHEX = @PACKHEX@ +mkinstalldirs = $(SHELL) $(top_srcdir)/@RTEMS_TOPdir@/mkinstalldirs + +INSTALLDIRS = $(PROJECT_RELEASE)/tests/screens/sptests + +$(INSTALLDIRS): + @$(mkinstalldirs) $(INSTALLDIRS) + +# +# (OPTIONAL) Add local stuff here using += +# + +DEFINES += +CPPFLAGS += +CFLAGS += + +LD_PATHS += +LD_LIBS += +LDFLAGS += + +# +# Add your list of files to delete here. The config files +# already know how to delete some stuff, so you may want +# to just run 'make clean' first to see what gets missed. +# 'make clobber' already includes 'make clean' +# + +CLEAN_ADDITIONS += +CLOBBER_ADDITIONS += + +all: ${ARCH} $(SRCS) $(PGM) + $(INSTALL_VARIANT) -m 755 ${PGM} $(PROJECT_RELEASE)/tests + $(INSTALL_CHANGE) $(srcdir)/$(TEST).scn \ + $(PROJECT_RELEASE)/tests/screens/sptests/$(TEST).scn + +${PGM}: $(OBJS) $(LINK_FILES) + $(make-exe) + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status diff --git a/c/src/tests/sptests/sp28/init.c b/c/src/tests/sptests/sp28/init.c new file mode 100644 index 0000000000..06083c45f7 --- /dev/null +++ b/c/src/tests/sptests/sp28/init.c @@ -0,0 +1,96 @@ +#define TEST_INIT +#include <tmacros.h> + +rtems_task Init(rtems_task_argument argument); + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 2 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +#define CONFIGURE_MICROSECONDS_PER_TICK 52429 + +#define CONFIGURE_MICROSECONDS_INIT + +#include <confdefs.h> + +#include <bsp.h> +#include <rtems/error.h> +#include <rtems/rtems/task_variable.h> +#include <stdio.h> + +volatile int taskvar; + +rtems_task +subtask (rtems_task_argument arg) +{ + int localvar = arg; + int i; + rtems_status_code sc; + + sc = rtems_task_variable_add (RTEMS_SELF, (void *) &taskvar); + if (sc != RTEMS_SUCCESSFUL) { + printf ("Can't add task variable: %s\n", rtems_status_text (sc)); + rtems_task_suspend (RTEMS_SELF); + } + taskvar = localvar; + while (localvar < 1000) { + localvar++; + rtems_task_wake_after (0); + taskvar++; + rtems_task_wake_after (0); + if (taskvar != localvar) { + printf ("Task:%d taskvar:%d localvar:%d\n", arg, taskvar, localvar); + rtems_task_suspend (RTEMS_SELF); + } + } + sc = rtems_task_variable_delete (RTEMS_SELF, (void *) &taskvar); + if (sc != RTEMS_SUCCESSFUL) { + printf ("Can't delete task variable: %s\n", rtems_status_text (sc)); + rtems_task_suspend (RTEMS_SELF); + } + for (i = 0 ; ; i++) { + taskvar = localvar = 100 * arg; + rtems_task_wake_after (0); + if (taskvar == localvar) { + printf ("Task:%d taskvar:%d localvar:%d\n", arg, taskvar, localvar); + rtems_task_suspend (RTEMS_SELF); + } + if ((arg == 3) && (i == 100)) { + printf ("Task variables test succeeded.\n"); + exit (0); + } + } +} + +void +starttask (int arg) +{ + rtems_id tid; + rtems_status_code sc; + + sc = rtems_task_create (rtems_build_name ('S', 'R', 'V', arg + 'A'), + 100, + 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) +{ + starttask (1); + starttask (2); + starttask (3); + rtems_task_suspend (RTEMS_SELF); +} diff --git a/c/src/tests/sptests/sp28/sp28.doc b/c/src/tests/sptests/sp28/sp28.doc new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/c/src/tests/sptests/sp28/sp28.doc diff --git a/c/src/tests/sptests/sp28/sp28.scn b/c/src/tests/sptests/sp28/sp28.scn new file mode 100644 index 0000000000..491c8aa089 --- /dev/null +++ b/c/src/tests/sptests/sp28/sp28.scn @@ -0,0 +1 @@ +Task variables test succeeded. |