diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-09-09 17:13:51 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-09-10 07:12:55 +0200 |
commit | 4984ee4aa227cd9a4e4d3f171ea9317d1bc3e163 (patch) | |
tree | 220d66bfa7b6f47236aba68a6737a0da031edba3 | |
parent | psxtests/psxonce01: Use test extension (diff) | |
download | rtems-4984ee4aa227cd9a4e4d3f171ea9317d1bc3e163.tar.bz2 |
sptests/sp39: Convert to sptests/spintrcritical21
Use interrupt critical section test support. Do not print end of test
message in case of failure.
-rw-r--r-- | testsuites/sptests/Makefile.am | 3 | ||||
-rw-r--r-- | testsuites/sptests/configure.ac | 2 | ||||
-rw-r--r-- | testsuites/sptests/sp39/Makefile.am | 22 | ||||
-rw-r--r-- | testsuites/sptests/spintrcritical21/Makefile.am | 20 | ||||
-rw-r--r-- | testsuites/sptests/spintrcritical21/init.c (renamed from testsuites/sptests/sp39/init.c) | 134 | ||||
-rw-r--r-- | testsuites/sptests/spintrcritical21/spintrcritical21.doc (renamed from testsuites/sptests/sp39/sp39.doc) | 2 | ||||
-rw-r--r-- | testsuites/sptests/spintrcritical21/spintrcritical21.scn (renamed from testsuites/sptests/sp39/sp39.scn) | 4 | ||||
-rw-r--r-- | testsuites/sptests/spintrcritical21/system.h (renamed from testsuites/sptests/sp39/system.h) | 1 |
8 files changed, 83 insertions, 105 deletions
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am index a0acbc3093..3df4ffbcb3 100644 --- a/testsuites/sptests/Makefile.am +++ b/testsuites/sptests/Makefile.am @@ -6,7 +6,7 @@ _SUBDIRS = \ sp01 sp02 sp03 sp04 sp05 sp06 sp07 sp08 \ sp10 sp11 sp12 sp13 sp14 sp15 sp16 sp17 sp18 sp19 \ sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 sp27a \ - sp30 sp31 sp32 sp33 sp34 sp35 sp37 sp38 sp39 \ + sp30 sp31 sp32 sp33 sp34 sp35 sp37 sp38 \ sp40 sp41 sp42 sp43 sp44 sp45 sp46 sp47 sp48 sp49 \ sp50 sp51 sp52 sp53 sp54 sp55 sp56 sp57 sp58 sp59 \ sp60 sp62 sp63 sp64 sp65 sp66 sp67 sp68 sp69 \ @@ -53,6 +53,7 @@ _SUBDIRS += sptls02 endif _SUBDIRS += sptls01 _SUBDIRS += spintrcritical20 +_SUBDIRS += spintrcritical21 _SUBDIRS += spcontext01 _SUBDIRS += spfatal26 _SUBDIRS += speventtransient01 diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index d376a4f429..fa149abdbc 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -53,6 +53,7 @@ spcpucounter01/Makefile sptls02/Makefile sptls01/Makefile spintrcritical20/Makefile +spintrcritical21/Makefile spcontext01/Makefile spfatal26/Makefile spinternalerror02/Makefile @@ -98,7 +99,6 @@ sp35/Makefile sp36/Makefile sp37/Makefile sp38/Makefile -sp39/Makefile sp40/Makefile sp41/Makefile sp42/Makefile diff --git a/testsuites/sptests/sp39/Makefile.am b/testsuites/sptests/sp39/Makefile.am deleted file mode 100644 index fc091da2c7..0000000000 --- a/testsuites/sptests/sp39/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ - -rtems_tests_PROGRAMS = sp39 -sp39_SOURCES = init.c system.h - -dist_rtems_tests_DATA = sp39.scn -dist_rtems_tests_DATA += sp39.doc - -include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg -include $(top_srcdir)/../automake/compile.am -include $(top_srcdir)/../automake/leaf.am - - -AM_CPPFLAGS += -I$(top_srcdir)/../support/include - -LINK_OBJS = $(sp39_OBJECTS) -LINK_LIBS = $(sp39_LDLIBS) - -sp39$(EXEEXT): $(sp39_OBJECTS) $(sp39_DEPENDENCIES) - @rm -f sp39$(EXEEXT) - $(make-exe) - -include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/spintrcritical21/Makefile.am b/testsuites/sptests/spintrcritical21/Makefile.am new file mode 100644 index 0000000000..b53d0006de --- /dev/null +++ b/testsuites/sptests/spintrcritical21/Makefile.am @@ -0,0 +1,20 @@ +rtems_tests_PROGRAMS = spintrcritical21 +spintrcritical21_SOURCES = init.c ../spintrcritical_support/intrcritical.c + +dist_rtems_tests_DATA = spintrcritical21.scn spintrcritical21.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include +AM_CPPFLAGS += -I$(top_srcdir)/spintrcritical_support + +LINK_OBJS = $(spintrcritical21_OBJECTS) +LINK_LIBS = $(spintrcritical21_LDLIBS) + +spintrcritical21$(EXEEXT): $(spintrcritical21_OBJECTS) $(spintrcritical21_DEPENDENCIES) + @rm -f spintrcritical21$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/sp39/init.c b/testsuites/sptests/spintrcritical21/init.c index b78cd7fd0b..8b1ddcfc37 100644 --- a/testsuites/sptests/sp39/init.c +++ b/testsuites/sptests/spintrcritical21/init.c @@ -16,9 +16,11 @@ #define CONFIGURE_INIT #include "system.h" +#include <intrcritical.h> + #include <rtems/rtems/eventimpl.h> -const char rtems_test_name[] = "SP 39"; +const char rtems_test_name[] = "SPINTRCRITICAL 21"; /* * ERROR CHECKING NOTE: @@ -28,21 +30,13 @@ const char rtems_test_name[] = "SP 39"; * fatal_directive_check_status_only() not directive_failed(). */ -rtems_timer_service_routine test_event_from_isr( - rtems_id timer, - void *arg -); -rtems_timer_service_routine test_event_with_timeout_from_isr( - rtems_id timer, - void *arg -); +static volatile bool case_hit; -volatile bool case_hit; +static rtems_id main_task; -rtems_id main_task; -rtems_id other_task; +static rtems_id other_task; -rtems_timer_service_routine test_event_from_isr( +static rtems_timer_service_routine test_event_from_isr( rtems_id timer, void *arg ) @@ -64,13 +58,26 @@ rtems_timer_service_routine test_event_from_isr( status = rtems_event_send( main_task, 0x02 ); fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" ); - case_hit = TRUE; + case_hit = true; } status = rtems_event_send( main_task, 0x01 ); fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" ); } -rtems_timer_service_routine test_event_with_timeout_from_isr( +static bool test_body_event_from_isr( void *arg ) +{ + rtems_status_code status; + rtems_event_set out; + + (void) arg; + + status = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 0, &out ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + return case_hit; +} + +static rtems_timer_service_routine test_event_with_timeout_from_isr( rtems_id timer, void *arg ) @@ -82,33 +89,35 @@ rtems_timer_service_routine test_event_with_timeout_from_isr( * We want to catch the task while it is blocking. Otherwise * just send and make it happy. */ - case_hit = TRUE; + case_hit = true; } status = rtems_event_send( main_task, 0x01 ); fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" ); } +static bool test_body_event_with_timeout_from_isr( void *arg ) +{ + rtems_status_code status; + rtems_event_set out; + + (void) arg; + + status = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 1, &out ); + rtems_test_assert( status == RTEMS_SUCCESSFUL || status == RTEMS_TIMEOUT ); + + return case_hit; +} + rtems_task Init( rtems_task_argument argument ) { rtems_status_code status; - rtems_id timer; - rtems_event_set out; - int i; - int max; - uint32_t iterations = 0; TEST_BEGIN(); main_task = rtems_task_self(); - /* - * Timer used in multiple ways - */ - status = rtems_timer_create( 1, &timer ); - directive_failed( status, "rtems_timer_create" ); - status = rtems_task_create( 0xa5a5a5a5, 1, @@ -122,71 +131,40 @@ rtems_task Init( /* * Test Event send successful from ISR -- receive is forever */ - case_hit = FALSE; - iterations = 0; - max = 1; - - while (1) { - if ( case_hit ) - break; - status = rtems_timer_fire_after( timer, 1, test_event_from_isr, NULL ); - directive_failed( status, "timer_fire_after failed" ); - - for (i=0 ; i<max ; i++ ) - if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_SATISFIED ) - break; - - status = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 0, &out ); - directive_failed( status, "rtems_event_receive" ); - if ( case_hit == TRUE ) - break; - max += 2; - - /* with our clock tick, this is about 30 seconds */ - if ( ++iterations >= 4L * 1000L * 30L) - break; - } + + case_hit = false; + interrupt_critical_section_test( + test_body_event_from_isr, + NULL, + test_event_from_isr + ); printf( "Event sent from ISR hitting synchronization point has %soccurred\n", - (( case_hit == TRUE ) ? "" : "NOT ") + case_hit ? "" : "NOT " ); + rtems_test_assert( case_hit ); + /* * Test Event send successful from ISR -- receive has timeout */ - case_hit = FALSE; - iterations = 0; - max = 1; - - while (1) { - if ( case_hit ) - break; - status = rtems_timer_fire_after( - timer, 1, test_event_with_timeout_from_isr, NULL ); - directive_failed( status, "timer_fire_after failed" ); - - for (i=0 ; i<max ; i++ ) - if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_SATISFIED ) - break; - - status = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 10, &out ); - directive_failed( status, "rtems_event_receive" ); - if ( case_hit == TRUE ) - break; - max += 2; - - /* with our clock tick, this is about 30 seconds */ - if ( ++iterations >= 4L * 1000L * 30L) - break; - } + + case_hit = false; + interrupt_critical_section_test( + test_body_event_with_timeout_from_isr, + NULL, + test_event_with_timeout_from_isr + ); printf( "Event sent from ISR (with timeout) hitting synchronization " "point has %soccurred\n", - (( case_hit == TRUE ) ? "" : "NOT ") + case_hit ? "" : "NOT " ); + rtems_test_assert( case_hit ); + TEST_END(); rtems_test_exit( 0 ); } diff --git a/testsuites/sptests/sp39/sp39.doc b/testsuites/sptests/spintrcritical21/spintrcritical21.doc index e5b7510cbf..94423e107f 100644 --- a/testsuites/sptests/sp39/sp39.doc +++ b/testsuites/sptests/spintrcritical21/spintrcritical21.doc @@ -8,7 +8,7 @@ This file describes the directives and concepts tested by this test set. -test set name: sp39 +test set name: spintrcritical21 directives: diff --git a/testsuites/sptests/sp39/sp39.scn b/testsuites/sptests/spintrcritical21/spintrcritical21.scn index adf690b739..d7a1998d0a 100644 --- a/testsuites/sptests/sp39/sp39.scn +++ b/testsuites/sptests/spintrcritical21/spintrcritical21.scn @@ -1,4 +1,4 @@ -*** TEST 39 *** +*** BEGIN OF TEST SPINTRCRITICAL 21 *** Event sent from ISR hitting synchronization point has occurred Event sent from ISR (with timeout) hitting synchronization point has occurred -*** END OF TEST 39 *** +*** END OF TEST SPINTRCRITICAL 21 *** diff --git a/testsuites/sptests/sp39/system.h b/testsuites/sptests/spintrcritical21/system.h index f5f1f253d1..f9111c0412 100644 --- a/testsuites/sptests/sp39/system.h +++ b/testsuites/sptests/spintrcritical21/system.h @@ -32,6 +32,7 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS 2 #define CONFIGURE_MAXIMUM_TIMERS 1 +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1 #include <rtems/confdefs.h> |