diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-05-11 17:39:37 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-05-11 17:39:37 +0000 |
commit | ac7d5ef06a6d6e8d84abbd1f0b82162725f98326 (patch) | |
tree | 9304cf759a73f2a1c6fd3191948f00e870af3787 /c/src/tests/sptests/sp20 | |
download | rtems-ac7d5ef06a6d6e8d84abbd1f0b82162725f98326.tar.bz2 |
Initial revision
Diffstat (limited to 'c/src/tests/sptests/sp20')
-rw-r--r-- | c/src/tests/sptests/sp20/getall.c | 43 | ||||
-rw-r--r-- | c/src/tests/sptests/sp20/init.c | 71 | ||||
-rw-r--r-- | c/src/tests/sptests/sp20/sp20.doc | 24 | ||||
-rw-r--r-- | c/src/tests/sptests/sp20/sp20.scn | 27 | ||||
-rw-r--r-- | c/src/tests/sptests/sp20/system.h | 34 | ||||
-rw-r--r-- | c/src/tests/sptests/sp20/task1.c | 116 |
6 files changed, 315 insertions, 0 deletions
diff --git a/c/src/tests/sptests/sp20/getall.c b/c/src/tests/sptests/sp20/getall.c new file mode 100644 index 0000000000..cff3841dff --- /dev/null +++ b/c/src/tests/sptests/sp20/getall.c @@ -0,0 +1,43 @@ +/* Get_all_counters + * + * This routine allows TA5 to atomically obtain the iteration counters. + * + * Input parameters: NONE + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" + +void Get_all_counters() +{ + rtems_mode previous_mode; + rtems_status_code status; + + status = rtems_task_mode( + RTEMS_NO_PREEMPT, + RTEMS_PREEMPT_MASK, + &previous_mode + ); + directive_failed( status, "rtems_task_mode to RTEMS_NO_PREEMPT" ); + + Temporary_count = Count; + Count.count[ 1 ] = 0; + Count.count[ 2 ] = 0; + Count.count[ 3 ] = 0; + Count.count[ 4 ] = 0; + Count.count[ 5 ] = 0; + + status = rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &previous_mode ); + directive_failed( status, "rtems_task_mode to RTEMS_PREEMPT" ); +} diff --git a/c/src/tests/sptests/sp20/init.c b/c/src/tests/sptests/sp20/init.c new file mode 100644 index 0000000000..95bdc3e728 --- /dev/null +++ b/c/src/tests/sptests/sp20/init.c @@ -0,0 +1,71 @@ +/* Init + * + * This routine is the initialization task for this test program. + * It is a user initialization task and has the responsibility for creating + * and starting the tasks that make up the test. If the time of day + * clock is required for the test, it should also be set to a known + * value by this function. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" +#undef EXTERN +#define EXTERN +#include "conftbl.h" +#include "gvar.h" + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_unsigned32 index; + rtems_status_code status; + + puts( "\n\n*** TEST 20 ***" ); + + Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); + Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); + Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); + Task_name[ 4 ] = rtems_build_name( 'T', 'A', '4', ' ' ); + Task_name[ 5 ] = rtems_build_name( 'T', 'A', '5', ' ' ); + + for ( index = 1 ; index <= 5 ; index++ ) { + status = rtems_task_create( + Task_name[ index ], + Priorities[ index ], + 4096, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &Task_id[ index ] + ); + directive_failed( status, "rtems_task_create loop" ); + } + + for ( index = 1 ; index <= 5 ; index++ ) { + status = rtems_task_start( Task_id[ index ], Task_1_through_5, index ); + directive_failed( status, "rtems_task_start loop" ); + } + + Count.count[ 1 ] = 0; + Count.count[ 2 ] = 0; + Count.count[ 3 ] = 0; + Count.count[ 4 ] = 0; + Count.count[ 5 ] = 0; + + status = rtems_task_delete( RTEMS_SELF ); + directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); +} diff --git a/c/src/tests/sptests/sp20/sp20.doc b/c/src/tests/sptests/sp20/sp20.doc new file mode 100644 index 0000000000..4a029a4b89 --- /dev/null +++ b/c/src/tests/sptests/sp20/sp20.doc @@ -0,0 +1,24 @@ +# +# $Id$ +# +# COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. +# On-Line Applications Research Corporation (OAR). +# All rights assigned to U.S. Government, 1994. +# +# This material may be reproduced by or for the U.S. Government pursuant +# to the copyright license under the clause at DFARS 252.227-7013. This +# notice must appear in all copies of this file and its derivatives. +# + + +This file describes the directives and concepts tested by this test set. + +test set name: test20 + +directives: + + rm_create, rm_period + +concepts: + + a. Verifies Rate Monotonic Manager behavior. diff --git a/c/src/tests/sptests/sp20/sp20.scn b/c/src/tests/sptests/sp20/sp20.scn new file mode 100644 index 0000000000..1de3c18db8 --- /dev/null +++ b/c/src/tests/sptests/sp20/sp20.scn @@ -0,0 +1,27 @@ +*** TEST 20 *** +TA1 - rtems_rate_monotonic_create id = 0x00010001 +TA1 - rtems_rate_monotonic_ident id = 0x00010001 +TA1 - (0x00010001) period 2 +TA2 - rtems_rate_monotonic_create id = 0x00010002 +TA2 - rtems_rate_monotonic_ident id = 0x00010002 +TA2 - (0x00010002) period 2 +TA3 - rtems_rate_monotonic_create id = 0x00010003 +TA3 - rtems_rate_monotonic_ident id = 0x00010003 +TA3 - (0x00010003) period 2 +TA4 - rtems_rate_monotonic_create id = 0x00010004 +TA4 - rtems_rate_monotonic_ident id = 0x00010004 +TA4 - (0x00010004) period 2 +TA5 - rtems_rate_monotonic_create id = 0x00010005 +TA5 - rtems_rate_monotonic_ident id = 0x00010005 +TA5 - (0x00010005) period 50 +TA5 - PERIODS CHECK OK (1) +TA5 - PERIODS CHECK OK (2) +TA5 - PERIODS CHECK OK (3) +TA5 - PERIODS CHECK OK (4) +TA5 - PERIODS CHECK OK (5) +TA5 - PERIODS CHECK OK (6) +TA5 - PERIODS CHECK OK (7) +TA5 - PERIODS CHECK OK (8) +TA5 - PERIODS CHECK OK (9) +TA5 - PERIODS CHECK OK (10) +*** END OF TEST 20 *** diff --git a/c/src/tests/sptests/sp20/system.h b/c/src/tests/sptests/sp20/system.h new file mode 100644 index 0000000000..98d52a20cc --- /dev/null +++ b/c/src/tests/sptests/sp20/system.h @@ -0,0 +1,34 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include <rtems.h> +#include "tmacros.h" + +/* Miscellaneous */ + +#define EXTERN extern /* external definition */ + +/* macros */ + +/* structures */ + +struct counters { + rtems_unsigned32 count[6]; +}; + +#include "gvar.h" + +/* end of include file */ diff --git a/c/src/tests/sptests/sp20/task1.c b/c/src/tests/sptests/sp20/task1.c new file mode 100644 index 0000000000..c5eda1a9ae --- /dev/null +++ b/c/src/tests/sptests/sp20/task1.c @@ -0,0 +1,116 @@ +/* Task_1_through_5 + * + * This routine serves as a test task for the period capabilities of the + * Rate Monotonic Manager. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" + +rtems_unsigned32 Periods[6] = { 0, 2, 2, 2, 2, 100 }; +rtems_unsigned32 Iterations[6] = { 0, 50, 50, 50, 50, 1 }; +rtems_task_priority Priorities[6] = { 0, 1, 1, 3, 4, 5 }; + +rtems_task Task_1_through_5( + rtems_unsigned32 argument +) +{ + rtems_id rmid; + rtems_id test_rmid; + rtems_unsigned32 index; + rtems_unsigned32 pass; + rtems_unsigned32 failed; + rtems_status_code status; + + status = rtems_rate_monotonic_create( argument, &rmid ); + directive_failed( status, "rtems_rate_monotonic_create" ); + put_name( Task_name[ argument ], FALSE ); + printf( "- rtems_rate_monotonic_create id = 0x%08x\n", rmid ); + + status = rtems_rate_monotonic_ident( argument, &test_rmid ); + directive_failed( status, "rtems_rate_monotonic_ident" ); + put_name( Task_name[ argument ], FALSE ); + printf( "- rtems_rate_monotonic_ident id = 0x%08x\n", test_rmid ); + + if ( rmid != test_rmid ) { + printf( "RMID's DO NOT MATCH (0x%x and 0x%x)\n", rmid, test_rmid ); + exit( 0 ); + } + + put_name( Task_name[ argument ], FALSE ); + printf( "- (0x%08x) period %d\n", rmid, Periods[ argument ] ); + + status = rtems_task_wake_after( 2 ); + directive_failed( status, "rtems_task_wake_after" ); + + switch ( argument ) { + case 1: + case 2: + case 3: + case 4: + while ( FOREVER ) { + status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); + directive_failed( status, "rtems_rate_monotonic_period" ); + Count.count[ argument ]++; + } + break; + case 5: + pass = 0; + failed = 0; + + status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); + directive_failed( status, "rtems_rate_monotonic_period 1 of TA5" ); + + Get_all_counters(); + + while ( FOREVER ) { + + status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); + directive_failed( status, "rtems_rate_monotonic_period 2 of TA5" ); + + Get_all_counters(); + + for( index = 1 ; index <= 4 ; index++ ) { + if ( Temporary_count.count[ index ] != Iterations[ index ] ) { + puts_nocr( "FAIL -- " ); + put_name ( Task_name[ index ], FALSE ); + printf ( " Actual=%d, Expected=%d\n", + Temporary_count.count[ index ], + Iterations[ index ] + ); + failed += 1; + } + } + + if ( failed == 5 ) + exit( 0 ); + + pass += 1; + + printf( "TA5 - PERIODS CHECK OK (%d)\n", pass ); + + fflush( stdout ); + + if ( pass == 10 ) { + puts( "*** END OF TEST 20 ***" ); + exit( 0 ); + } + + } + break; + } +} |