From 74db82a343c7d2451b6887536608232dee172253 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 10 Nov 1999 20:36:25 +0000 Subject: rtems_semaphore_flush test from Eric Norum . --- c/src/tests/sptests/Makefile.am | 2 +- c/src/tests/sptests/configure.in | 1 + c/src/tests/sptests/sp27/Makefile.in | 81 +++++++++++++++++++++++++++ c/src/tests/sptests/sp27/TODO | 27 --------- c/src/tests/sptests/sp27/init.c | 103 +++++++++++++++++++++++++++++++++++ c/src/tests/sptests/sp27/sp27.doc | 0 c/src/tests/sptests/sp27/sp27.scn | 0 7 files changed, 186 insertions(+), 28 deletions(-) create mode 100644 c/src/tests/sptests/sp27/Makefile.in delete mode 100644 c/src/tests/sptests/sp27/TODO create mode 100644 c/src/tests/sptests/sp27/init.c create mode 100644 c/src/tests/sptests/sp27/sp27.doc create mode 100644 c/src/tests/sptests/sp27/sp27.scn (limited to 'c') diff --git a/c/src/tests/sptests/Makefile.am b/c/src/tests/sptests/Makefile.am index aaf59aba19..42ff48706d 100644 --- a/c/src/tests/sptests/Makefile.am +++ b/c/src/tests/sptests/Makefile.am @@ -15,7 +15,7 @@ all-local: $(PREINSTALLDIRS) ## sp10 and spfatal are not included for now SUBDIRS = . sp01 sp02 sp03 sp04 sp05 sp06 sp07 sp08 sp09 sp11 sp12 sp13 sp14 \ - sp15 sp16 sp17 sp19 sp20 sp21 sp22 sp23 sp24 sp25 sp26 spsize + sp15 sp16 sp17 sp19 sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 spsize include $(top_srcdir)/../../../../automake/subdirs.am include $(top_srcdir)/../../../../automake/local.am diff --git a/c/src/tests/sptests/configure.in b/c/src/tests/sptests/configure.in index d3f2d48f7f..d5911d17f8 100644 --- a/c/src/tests/sptests/configure.in +++ b/c/src/tests/sptests/configure.in @@ -64,6 +64,7 @@ sp23/Makefile sp24/Makefile sp25/Makefile sp26/Makefile +sp27/Makefile spsize/Makefile ) diff --git a/c/src/tests/sptests/sp27/Makefile.in b/c/src/tests/sptests/sp27/Makefile.in new file mode 100644 index 0000000000..79006879b1 --- /dev/null +++ b/c/src/tests/sptests/sp27/Makefile.in @@ -0,0 +1,81 @@ +# +# $Id$ +# + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +subdir = sp27 + +RTEMS_ROOT = @RTEMS_ROOT@ +PROJECT_ROOT = @PROJECT_ROOT@ + +VPATH = @srcdir@ + +TEST = sp27 + +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/sp27/TODO b/c/src/tests/sptests/sp27/TODO deleted file mode 100644 index 6602ad252b..0000000000 --- a/c/src/tests/sptests/sp27/TODO +++ /dev/null @@ -1,27 +0,0 @@ -# -# $Id$ -# - -This test will be for rtems_semaphore_flush once it is written. - -To avoid scheduling problems in the printout, it would be better to -have the test program: - -volatile int bFlag, cFlag; - -TaskA: - create semaphore with initial count 0 - start taskB and TaskC (Higher priority than taskA, no -round-robin) - print bFlag, cFlag (should both be 0) - semaphore_flush - print bFlag, cFlag (should both be 1) - - TaskB/C: - obtain semaphore - set flag (B or C as appropriate) - suspend/delete self - -Successful test would show message from both tasks B and C after the -message from task A. - diff --git a/c/src/tests/sptests/sp27/init.c b/c/src/tests/sptests/sp27/init.c new file mode 100644 index 0000000000..4ae5befb78 --- /dev/null +++ b/c/src/tests/sptests/sp27/init.c @@ -0,0 +1,103 @@ +/* + * Test for rtems_semaphore_flush + * + * $Id$ + */ + +#include + +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 + +#include +#include + +#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/c/src/tests/sptests/sp27/sp27.doc b/c/src/tests/sptests/sp27/sp27.doc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/c/src/tests/sptests/sp27/sp27.scn b/c/src/tests/sptests/sp27/sp27.scn new file mode 100644 index 0000000000..e69de29bb2 -- cgit v1.2.3