2001-01-16 Joel Sherrill <joel@OARcorp.com>

* Added tests for task-based timers.  This included the new tests
	sp30 and sp31.
	* Makefile.am, configure.ac: Modified to reflect new tests and files.
	* sp09/screen14.c, sp09/sp09.scn: Modified to add error checks
	for task-based timer services.
	* sp30/.cvsignore, sp30/Makefile.am, sp30/init.c, sp30/resume.c,
	sp30/sp30.doc, sp30/sp30.scn, sp30/system.h, sp30/task1.c,
	sp31/.cvsignore, sp31/Makefile.am, sp31/delay.c, sp31/init.c,
	sp31/prtime.c, sp31/sp31.doc, sp31/sp31.scn, sp31/system.h,
	sp31/task1.c: New files.
This commit is contained in:
Joel Sherrill
2002-01-16 22:13:29 +00:00
parent c55df856aa
commit de569fee9f
44 changed files with 1756 additions and 4 deletions

View File

@@ -1,3 +1,16 @@
2001-01-16 Joel Sherrill <joel@OARcorp.com>
* Added tests for task-based timers. This included the new tests
sp30 and sp31.
* Makefile.am, configure.ac: Modified to reflect new tests and files.
* sp09/screen14.c, sp09/sp09.scn: Modified to add error checks
for task-based timer services.
* sp30/.cvsignore, sp30/Makefile.am, sp30/init.c, sp30/resume.c,
sp30/sp30.doc, sp30/sp30.scn, sp30/system.h, sp30/task1.c,
sp31/.cvsignore, sp31/Makefile.am, sp31/delay.c, sp31/init.c,
sp31/prtime.c, sp31/sp31.doc, sp31/sp31.scn, sp31/system.h,
sp31/task1.c: New files.
2001-11-01 Joel Sherrill <joel@OARcorp.com>
* sp26/system.h: Properly account for stack memory used by

View File

@@ -8,7 +8,7 @@ ACLOCAL_AMFLAGS = -I ../../../../aclocal
## 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 sp27 sp28 sp29 \
spsize
sp30 sp31 spsize
EXTRA_DIST = sptests.am spfatal

View File

@@ -66,6 +66,8 @@ sp26/Makefile
sp27/Makefile
sp28/Makefile
sp29/Makefile
sp30/Makefile
sp31/Makefile
spsize/Makefile
])
AC_OUTPUT

View File

@@ -150,4 +150,86 @@ void Screen14()
&time,
" - before RTEMS_INVALID_CLOCK\n"
);
/* timer server interface routines */
status = rtems_timer_server_fire_after( 0, 5, NULL, NULL );
fatal_directive_status(
status,
RTEMS_INCORRECT_STATE,
"rtems_timer_server_fire_after incorrect state"
);
puts( "TA1 - rtems_timer_server_fire_after - RTEMS_INCORRECT_STATE" );
status = rtems_timer_server_fire_when( 0, &time, NULL, NULL );
fatal_directive_status(
status,
RTEMS_INCORRECT_STATE,
"rtems_timer_server_fire_when incorrect state"
);
puts( "TA1 - rtems_timer_server_fire_when - RTEMS_INCORRECT_STATE" );
status = rtems_timer_initiate_server( 0, 0 );
directive_failed( status, "rtems_timer_initiate_server" );
puts( "TA1 - rtems_timer_initiate_server" );
status = rtems_timer_server_fire_after(
0x010100,
5 * TICKS_PER_SECOND,
Delayed_routine,
NULL
);
fatal_directive_status(
status,
RTEMS_INVALID_ID,
"rtems_timer_server_fire_after illegal id"
);
puts( "TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_ID" );
build_time( &time, 12, 31, 1994, 9, 0, 0, 0 );
status = rtems_timer_server_fire_when( 0x010100, &time, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_ID,
"rtems_timer_server_fire_when with illegal id"
);
puts( "TA1 - rtems_timer_server_fire_when - RTEMS_INVALID_ID" );
status = rtems_timer_server_fire_after( Timer_id[ 1 ], 0, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_NUMBER,
"rtems_timer_server_fire_after with 0 ticks"
);
puts( "TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_NUMBER" );
build_time( &time, 2, 5, 1987, 8, 30, 45, 0 );
status = rtems_timer_server_fire_when( Timer_id[ 1 ], &time, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_CLOCK,
"rtems_timer_server_fire_when with illegal time"
);
print_time(
"TA1 - rtems_timer_server_fire_when - ",
&time,
" - RTEMS_INVALID_CLOCK\n"
);
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_set" );
print_time( "TA1 - rtems_clock_get - ", &time, "\n" );
build_time( &time, 2, 5, 1990, 8, 30, 45, 0 );
status = rtems_timer_server_fire_when( Timer_id[ 1 ], &time, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_CLOCK,
"rtems_timer_server_fire_when before current time"
);
print_time(
"TA1 - rtems_timer_server_fire_when - ",
&time,
" - before RTEMS_INVALID_CLOCK\n"
);
}

View File

@@ -246,6 +246,15 @@ TA1 - rtems_timer_fire_after - RTEMS_INVALID_ID
TA1 - rtems_timer_fire_when - RTEMS_INVALID_ID
TA1 - rtems_timer_fire_after - RTEMS_INVALID_NUMBER
TA1 - rtems_timer_fire_when - 08:30:45 02/05/1987 - RTEMS_INVALID_CLOCK
TA1 - rtems_clock_get - 00:00:00 01/01/1992
TA1 - rtems_clock_get - 00:00:01 01/01/1992
TA1 - rtems_timer_fire_when - 08:30:45 02/05/1990 - before RTEMS_INVALID_CLOCK
TA1 - rtems_timer_server_fire_after - RTEMS_INCORRECT_STATE
TA1 - rtems_timer_server_fire_when - RTEMS_INCORRECT_STATE
TA1 - rtems_timer_initiate_server
TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_ID
TA1 - rtems_timer_server_fire_when - RTEMS_INVALID_ID
TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_NUMBER
TA1 - rtems_timer_server_fire_when - 08:30:45 02/05/1987 - RTEMS_INVALID_CLOCK
TA1 - rtems_clock_get - 00:00:01 01/01/1992
TA1 - rtems_timer_server_fire_when - 08:30:45 02/05/1990 - before RTEMS_INVALID_CLOCK
*** END OF TEST 9 ***

View File

@@ -0,0 +1,2 @@
Makefile
Makefile.in

View File

@@ -0,0 +1,36 @@
##
## $Id$
##
AUTOMAKE_OPTIONS = foreign 1.4
TEST = sp30
MANAGERS = all
C_FILES = init.c resume.c task1.c
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o)
DOCTYPES = scn
DOCS = $(DOCTYPES:%=$(TEST).%)
SRCS = $(C_FILES) $(H_FILES)
OBJS = $(C_O_FILES)
PRINT_SRCS = $(DOCS)
PGM = ${ARCH}/$(TEST).exe
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../../../../automake/compile.am
include $(top_srcdir)/../../../../automake/leaf.am
include $(top_srcdir)/sptests.am
${PGM}: $(OBJS) $(LINK_FILES)
$(make-exe)
all-local: $(ARCH) $(TMPINSTALL_FILES)
EXTRA_DIST = $(C_FILES) $(DOCS)
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -0,0 +1,81 @@
/* 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-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#define TEST_INIT
#include "system.h"
rtems_task Init(
rtems_task_argument argument
)
{
rtems_time_of_day time;
rtems_unsigned32 index;
rtems_status_code status;
puts( "\n\n*** TEST 30 ***" );
build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
status = rtems_timer_initiate_server(
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_ATTRIBUTES
);
directive_failed( status, "rtems_timer_initiate_server" );
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', ' ' );
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
Timer_name[ 2 ] = rtems_build_name( 'T', 'M', '2', ' ' );
Timer_name[ 3 ] = rtems_build_name( 'T', 'M', '3', ' ' );
for ( index = 1 ; index <= 3 ; index++ ) {
status = rtems_task_create(
Task_name[ index ],
1,
RTEMS_MINIMUM_STACK_SIZE * 2,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&Task_id[ index ]
);
directive_failed( status, "rtems_task_create loop" );
status = rtems_timer_create(
Timer_name[ index ],
&Timer_id[ index ]
);
directive_failed( status, "rtems_timer_create loop" );
}
for ( index = 1 ; index <= 3 ; index++ ) {
status = rtems_task_start( Task_id[ index ], Task_1_through_3, index );
directive_failed( status, "rtems_task_start loop" );
}
status = rtems_task_delete( RTEMS_SELF );
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
}

View File

@@ -0,0 +1,33 @@
/* Resume_task
*
* This subprogram is scheduled as a timer service routine. When
* it fires it resumes the task which is mapped to this timer.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_timer_service_routine Resume_task(
rtems_id timer_id,
void *ignored_address
)
{
rtems_id task_to_resume;
rtems_status_code status;
task_to_resume = Task_id[ rtems_get_index( timer_id ) ];
status = rtems_task_resume( task_to_resume );
directive_failed_with_level( status, "rtems_task_resume", 1 );
}

View File

@@ -0,0 +1,50 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2002.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.OARcorp.com/rtems/license.html.
#
This file describes the directives and concepts tested by this test set.
test set name: test30
directives:
ex_init, ex_start, t_create, t_start, tm_tick, i_return, t_ident,
ev_receive
concepts:
a. This test is a cyclic version of test1. The times printed by
each test should not skew as in test1 (see output section).
b. Verifies system can create and start both the executive's system
initialization and idle task.
c. Verifies executive can swap between three application tasks at the
same priority and the executive's internal idle task.
d. Verifies can print strings to the CRT on port 2 of the mvme136 board
using Print and Println in the board support package.
e. Verifies interrupt handler can handler a task switch from an interrupt
as specified with the i_return directive.
f. Verifies executive initialization performed correctly.
g. Verifies the executive trap handler except for the halt function.
h. Verifies that a task can get the task identification number of itself.
output:
"TA1" is printed once every 5 seconds. "TA2" is printed once
every 10 seconds. "TA3" is printed once every 15 seconds.
The times printed should be multiples of 5 seconds for TA1, 10 seconds
for TA2, and 15 seconds for TA3. If this does not happen, the calendar
time does not correspond correctly to the number of ticks.

View File

@@ -0,0 +1,16 @@
*** TEST 30 ***
TA1 - rtems_clock_get - 09:00:00 12/31/1988
TA2 - rtems_clock_get - 09:00:00 12/31/1988
TA3 - rtems_clock_get - 09:00:00 12/31/1988
TA1 - rtems_clock_get - 09:00:05 12/31/1988
TA2 - rtems_clock_get - 09:00:10 12/31/1988
TA1 - rtems_clock_get - 09:00:10 12/31/1988
TA3 - rtems_clock_get - 09:00:15 12/31/1988
TA1 - rtems_clock_get - 09:00:15 12/31/1988
TA2 - rtems_clock_get - 09:00:20 12/31/1988
TA1 - rtems_clock_get - 09:00:20 12/31/1988
TA1 - rtems_clock_get - 09:00:25 12/31/1988
TA3 - rtems_clock_get - 09:00:30 12/31/1988
TA2 - rtems_clock_get - 09:00:30 12/31/1988
TA1 - rtems_clock_get - 09:00:30 12/31/1988
*** END OF TEST 30 ***

View File

@@ -0,0 +1,55 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include <tmacros.h>
/* functions */
rtems_task Init(
rtems_task_argument argument
);
rtems_timer_service_routine Resume_task(
rtems_id timer_id,
void *ignored_address
);
rtems_task Task_1_through_3(
rtems_task_argument argument
);
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 5
#define CONFIGURE_MAXIMUM_TIMERS 3
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
#include <confdefs.h>
/* global variables */
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
TEST_EXTERN rtems_id Timer_id[ 4 ]; /* array of timer ids */
TEST_EXTERN rtems_name Timer_name[ 4 ]; /* array of timer names */
/* end of include file */

View File

@@ -0,0 +1,57 @@
/* Task_1_through_3
*
* This task is a cyclic version of test1 to asssure that the times
* displayed are not skewed as in test1. "TA1" is printed once every
* 5 seconds, "TA2" is printed once every 10 seconds, and "TA3" is
* printed once every 15 seconds. The times displayed should be
* in multiples of 5, 10, and 15 for TA1, TA2, and TA3 respectively.
* If the times are skewed from these values, then the calendar time
* does not correspond correctly with the number of ticks.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_task Task_1_through_3(
rtems_task_argument argument
)
{
rtems_id tid;
rtems_time_of_day time;
rtems_status_code status;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
directive_failed( status, "rtems_task_ident of self" );
while ( FOREVER ) {
status = rtems_timer_server_fire_after(
Timer_id[ argument ],
task_number( tid ) * 5 * TICKS_PER_SECOND,
Resume_task,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after failed" );
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get failed" );
if ( time.second >= 35 ) {
puts( "*** END OF TEST 30 ***" );
exit( 0 );
}
put_name( Task_name[ task_number( tid ) - 1 ], FALSE );
print_time( " - rtems_clock_get - ", &time, "\n" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
}
}

View File

@@ -0,0 +1,2 @@
Makefile
Makefile.in

View File

@@ -0,0 +1,36 @@
##
## $Id$
##
AUTOMAKE_OPTIONS = foreign 1.4
TEST = sp31
MANAGERS = all
C_FILES = delay.c init.c prtime.c task1.c
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o)
DOCTYPES = scn
DOCS = $(DOCTYPES:%=$(TEST).%)
SRCS = $(C_FILES) $(H_FILES)
OBJS = $(C_O_FILES)
PRINT_SRCS = $(DOCS)
PGM = ${ARCH}/$(TEST).exe
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../../../../automake/compile.am
include $(top_srcdir)/../../../../automake/leaf.am
include $(top_srcdir)/sptests.am
${PGM}: $(OBJS) $(LINK_FILES)
$(make-exe)
all-local: $(ARCH) $(TMPINSTALL_FILES)
EXTRA_DIST = $(C_FILES) $(DOCS)
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -0,0 +1,31 @@
/* Delayed_resume
*
* This routine is scheduled to be fired as a timer service routine.
* When fired this subprogram resumes Task_1.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_timer_service_routine Delayed_resume(
rtems_id ignored_id,
void *ignored_address
)
{
rtems_status_code status;
status = rtems_task_resume( Task_id[ 1 ] );
directive_failed_with_level( status, "rtems_task_resume of self", 1 );
}

View File

@@ -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-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#define TEST_INIT
#include "system.h"
rtems_task Init(
rtems_task_argument argument
)
{
rtems_time_of_day time;
rtems_status_code status;
puts( "\n\n*** TEST 31 ***" );
build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
status = rtems_timer_initiate_server(
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_ATTRIBUTES
);
directive_failed( status, "rtems_timer_initiate_server" );
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
status = rtems_task_create(
Task_name[ 1 ],
1,
RTEMS_MINIMUM_STACK_SIZE * 2,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&Task_id[ 1 ]
);
directive_failed( status, "rtems_task_create of TA1" );
status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
directive_failed( status, "rtems_task_start of TA1" );
puts( "INIT - rtems_timer_create - creating timer 1" );
status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] );
directive_failed( status, "rtems_timer_create" );
printf( "INIT - timer 1 has id (0x%x)\n", Timer_id[ 1 ] );
status = rtems_task_delete( RTEMS_SELF );
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
}

View File

@@ -0,0 +1,31 @@
/* Print_time
*
* This routine prints the name of Task_1 and the current time of day.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
void Print_time( void )
{
rtems_time_of_day time;
rtems_status_code status;
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get" );
put_name( Task_name[ 1 ], FALSE );
print_time( "- rtems_clock_get - ", &time, "\n" );
}

View File

@@ -0,0 +1,19 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2002.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.OARcorp.com/rtems/license.html.
#
This file describes the directives and concepts tested by this test set.
test set name: test31
directives:
concepts:

View File

@@ -0,0 +1,29 @@
*** TEST 31 ***
INIT - rtems_timer_create - creating timer 1
INIT - timer 1 has id (0x14010001)
TA1 - rtems_timer_ident - identing timer 1
TA1 - timer 1 has id (0x14010001)
TA1 - rtems_clock_get - 09:00:00 12/31/1988
TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds
TA1 - rtems_task_suspend( RTEMS_SELF )
TA1 - rtems_clock_get - 09:00:03 12/31/1988
TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds
TA1 - rtems_task_wake_after - 1 second
TA1 - rtems_clock_get - 09:00:04 12/31/1988
TA1 - rtems_timer_reset - timer 1
TA1 - rtems_task_suspend( RTEMS_SELF )
TA1 - rtems_clock_get - 09:00:07 12/31/1988
<pause>
TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds
TA1 - rtems_timer_cancel - timer 1
TA1 - rtems_clock_get - 09:00:07 12/31/1988
TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds
TA1 - rtems_task_suspend( RTEMS_SELF )
TA1 - rtems_clock_get - 09:00:10 12/31/1988
TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds
TA1 - rtems_task_wake_after - 1 second
TA1 - rtems_clock_get - 09:00:11 12/31/1988
TA1 - rtems_timer_cancel - timer 1
TA1 - rtems_task_wake_after - YIELD (only task at priority)
TA1 - timer_deleting - timer 1
*** END OF TEST 31 ***

View File

@@ -0,0 +1,58 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include <tmacros.h>
/* functions */
rtems_task Init(
rtems_task_argument argument
);
rtems_timer_service_routine Delayed_resume(
rtems_id ignored_id,
void *ignored_address
);
void Print_time( void );
rtems_task Task_1(
rtems_task_argument argument
);
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 3
#define CONFIGURE_MAXIMUM_TIMERS 2
#define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXTRA_TASK_STACKS (1 * RTEMS_MINIMUM_STACK_SIZE)
#include <confdefs.h>
/* global variables */
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
TEST_EXTERN rtems_id Timer_id[ 2 ]; /* array of timer ids */
TEST_EXTERN rtems_name Timer_name[ 2 ]; /* array of timer names */
/* end of include file */

View File

@@ -0,0 +1,163 @@
/* Task_1
*
* This routine serves as a test task. It verifies the basic task
* switching capabilities of the executive.
*
* Input parameters:
* argument - task argument
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_task Task_1(
rtems_task_argument argument
)
{
rtems_id tmid;
rtems_time_of_day time;
rtems_status_code status;
/* Get id */
puts( "TA1 - rtems_timer_ident - identing timer 1" );
status = rtems_timer_ident( Timer_name[ 1 ], &tmid );
directive_failed( status, "rtems_timer_ident" );
printf( "TA1 - timer 1 has id (0x%x)\n", tmid );
/* after which is allowed to fire */
Print_time();
puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_after(
tmid,
3 * TICKS_PER_SECOND,
Delayed_resume,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after" );
puts( "TA1 - rtems_task_suspend( RTEMS_SELF )" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
Print_time();
/* after which is reset and allowed to fire */
puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_after(
tmid,
3 * TICKS_PER_SECOND,
Delayed_resume,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after" );
puts( "TA1 - rtems_task_wake_after - 1 second" );
status = rtems_task_wake_after( 1 * TICKS_PER_SECOND );
directive_failed( status, "rtems_task_wake_after" );
Print_time();
puts( "TA1 - rtems_timer_reset - timer 1" );
status = rtems_timer_reset( tmid );
directive_failed( status, "rtems_timer_reset" );
puts( "TA1 - rtems_task_suspend( RTEMS_SELF )" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
Print_time();
rtems_test_pause();
/*
* Reset the time since we do not know how long the user waited
* before pressing <cr> at the pause. This insures that the
* actual output matches the screen.
*/
build_time( &time, 12, 31, 1988, 9, 0, 7, 0 );
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
/* after which is canceled */
puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_after(
tmid,
3 * TICKS_PER_SECOND,
Delayed_resume,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after" );
puts( "TA1 - rtems_timer_cancel - timer 1" );
status = rtems_timer_cancel( tmid );
directive_failed( status, "rtems_timer_cancel" );
/* when which is allowed to fire */
Print_time();
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get" );
time.second += 3;
puts( "TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_when( tmid, &time, Delayed_resume, NULL );
directive_failed( status, "rtems_timer_server_fire_when" );
puts( "TA1 - rtems_task_suspend( RTEMS_SELF )" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
Print_time();
/* when which is canceled */
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get" );
time.second += 3;
puts( "TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_when( tmid, &time, Delayed_resume, NULL );
directive_failed( status, "rtems_timer_server_fire_when" );
puts( "TA1 - rtems_task_wake_after - 1 second" );
status = rtems_task_wake_after( 1 * TICKS_PER_SECOND );
directive_failed( status, "rtems_task_wake_after" );
Print_time();
puts( "TA1 - rtems_timer_cancel - timer 1" );
status = rtems_timer_cancel( tmid );
directive_failed( status, "rtems_timer_cancel" );
/* delete */
puts( "TA1 - rtems_task_wake_after - YIELD (only task at priority)" );
status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
directive_failed( status, "rtems_task_wake_after" );
puts( "TA1 - timer_deleting - timer 1" );
status = rtems_timer_delete( tmid );
directive_failed( status, "rtems_timer_delete" );
puts( "*** END OF TEST 31 *** " );
exit( 0 );
}

View File

@@ -1,3 +1,16 @@
2001-01-16 Joel Sherrill <joel@OARcorp.com>
* Added tests for task-based timers. This included the new tests
sp30 and sp31.
* Makefile.am, configure.ac: Modified to reflect new tests and files.
* sp09/screen14.c, sp09/sp09.scn: Modified to add error checks
for task-based timer services.
* sp30/.cvsignore, sp30/Makefile.am, sp30/init.c, sp30/resume.c,
sp30/sp30.doc, sp30/sp30.scn, sp30/system.h, sp30/task1.c,
sp31/.cvsignore, sp31/Makefile.am, sp31/delay.c, sp31/init.c,
sp31/prtime.c, sp31/sp31.doc, sp31/sp31.scn, sp31/system.h,
sp31/task1.c: New files.
2001-11-01 Joel Sherrill <joel@OARcorp.com>
* sp26/system.h: Properly account for stack memory used by

View File

@@ -8,7 +8,7 @@ ACLOCAL_AMFLAGS = -I ../../../../aclocal
## 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 sp27 sp28 sp29 \
spsize
sp30 sp31 spsize
EXTRA_DIST = sptests.am spfatal

View File

@@ -66,6 +66,8 @@ sp26/Makefile
sp27/Makefile
sp28/Makefile
sp29/Makefile
sp30/Makefile
sp31/Makefile
spsize/Makefile
])
AC_OUTPUT

View File

@@ -150,4 +150,86 @@ void Screen14()
&time,
" - before RTEMS_INVALID_CLOCK\n"
);
/* timer server interface routines */
status = rtems_timer_server_fire_after( 0, 5, NULL, NULL );
fatal_directive_status(
status,
RTEMS_INCORRECT_STATE,
"rtems_timer_server_fire_after incorrect state"
);
puts( "TA1 - rtems_timer_server_fire_after - RTEMS_INCORRECT_STATE" );
status = rtems_timer_server_fire_when( 0, &time, NULL, NULL );
fatal_directive_status(
status,
RTEMS_INCORRECT_STATE,
"rtems_timer_server_fire_when incorrect state"
);
puts( "TA1 - rtems_timer_server_fire_when - RTEMS_INCORRECT_STATE" );
status = rtems_timer_initiate_server( 0, 0 );
directive_failed( status, "rtems_timer_initiate_server" );
puts( "TA1 - rtems_timer_initiate_server" );
status = rtems_timer_server_fire_after(
0x010100,
5 * TICKS_PER_SECOND,
Delayed_routine,
NULL
);
fatal_directive_status(
status,
RTEMS_INVALID_ID,
"rtems_timer_server_fire_after illegal id"
);
puts( "TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_ID" );
build_time( &time, 12, 31, 1994, 9, 0, 0, 0 );
status = rtems_timer_server_fire_when( 0x010100, &time, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_ID,
"rtems_timer_server_fire_when with illegal id"
);
puts( "TA1 - rtems_timer_server_fire_when - RTEMS_INVALID_ID" );
status = rtems_timer_server_fire_after( Timer_id[ 1 ], 0, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_NUMBER,
"rtems_timer_server_fire_after with 0 ticks"
);
puts( "TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_NUMBER" );
build_time( &time, 2, 5, 1987, 8, 30, 45, 0 );
status = rtems_timer_server_fire_when( Timer_id[ 1 ], &time, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_CLOCK,
"rtems_timer_server_fire_when with illegal time"
);
print_time(
"TA1 - rtems_timer_server_fire_when - ",
&time,
" - RTEMS_INVALID_CLOCK\n"
);
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_set" );
print_time( "TA1 - rtems_clock_get - ", &time, "\n" );
build_time( &time, 2, 5, 1990, 8, 30, 45, 0 );
status = rtems_timer_server_fire_when( Timer_id[ 1 ], &time, Delayed_routine, NULL );
fatal_directive_status(
status,
RTEMS_INVALID_CLOCK,
"rtems_timer_server_fire_when before current time"
);
print_time(
"TA1 - rtems_timer_server_fire_when - ",
&time,
" - before RTEMS_INVALID_CLOCK\n"
);
}

View File

@@ -246,6 +246,15 @@ TA1 - rtems_timer_fire_after - RTEMS_INVALID_ID
TA1 - rtems_timer_fire_when - RTEMS_INVALID_ID
TA1 - rtems_timer_fire_after - RTEMS_INVALID_NUMBER
TA1 - rtems_timer_fire_when - 08:30:45 02/05/1987 - RTEMS_INVALID_CLOCK
TA1 - rtems_clock_get - 00:00:00 01/01/1992
TA1 - rtems_clock_get - 00:00:01 01/01/1992
TA1 - rtems_timer_fire_when - 08:30:45 02/05/1990 - before RTEMS_INVALID_CLOCK
TA1 - rtems_timer_server_fire_after - RTEMS_INCORRECT_STATE
TA1 - rtems_timer_server_fire_when - RTEMS_INCORRECT_STATE
TA1 - rtems_timer_initiate_server
TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_ID
TA1 - rtems_timer_server_fire_when - RTEMS_INVALID_ID
TA1 - rtems_timer_server_fire_after - RTEMS_INVALID_NUMBER
TA1 - rtems_timer_server_fire_when - 08:30:45 02/05/1987 - RTEMS_INVALID_CLOCK
TA1 - rtems_clock_get - 00:00:01 01/01/1992
TA1 - rtems_timer_server_fire_when - 08:30:45 02/05/1990 - before RTEMS_INVALID_CLOCK
*** END OF TEST 9 ***

View File

@@ -0,0 +1,2 @@
Makefile
Makefile.in

View File

@@ -0,0 +1,36 @@
##
## $Id$
##
AUTOMAKE_OPTIONS = foreign 1.4
TEST = sp30
MANAGERS = all
C_FILES = init.c resume.c task1.c
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o)
DOCTYPES = scn
DOCS = $(DOCTYPES:%=$(TEST).%)
SRCS = $(C_FILES) $(H_FILES)
OBJS = $(C_O_FILES)
PRINT_SRCS = $(DOCS)
PGM = ${ARCH}/$(TEST).exe
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../../../../automake/compile.am
include $(top_srcdir)/../../../../automake/leaf.am
include $(top_srcdir)/sptests.am
${PGM}: $(OBJS) $(LINK_FILES)
$(make-exe)
all-local: $(ARCH) $(TMPINSTALL_FILES)
EXTRA_DIST = $(C_FILES) $(DOCS)
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -0,0 +1,81 @@
/* 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-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#define TEST_INIT
#include "system.h"
rtems_task Init(
rtems_task_argument argument
)
{
rtems_time_of_day time;
rtems_unsigned32 index;
rtems_status_code status;
puts( "\n\n*** TEST 30 ***" );
build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
status = rtems_timer_initiate_server(
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_ATTRIBUTES
);
directive_failed( status, "rtems_timer_initiate_server" );
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', ' ' );
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
Timer_name[ 2 ] = rtems_build_name( 'T', 'M', '2', ' ' );
Timer_name[ 3 ] = rtems_build_name( 'T', 'M', '3', ' ' );
for ( index = 1 ; index <= 3 ; index++ ) {
status = rtems_task_create(
Task_name[ index ],
1,
RTEMS_MINIMUM_STACK_SIZE * 2,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&Task_id[ index ]
);
directive_failed( status, "rtems_task_create loop" );
status = rtems_timer_create(
Timer_name[ index ],
&Timer_id[ index ]
);
directive_failed( status, "rtems_timer_create loop" );
}
for ( index = 1 ; index <= 3 ; index++ ) {
status = rtems_task_start( Task_id[ index ], Task_1_through_3, index );
directive_failed( status, "rtems_task_start loop" );
}
status = rtems_task_delete( RTEMS_SELF );
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
}

View File

@@ -0,0 +1,33 @@
/* Resume_task
*
* This subprogram is scheduled as a timer service routine. When
* it fires it resumes the task which is mapped to this timer.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_timer_service_routine Resume_task(
rtems_id timer_id,
void *ignored_address
)
{
rtems_id task_to_resume;
rtems_status_code status;
task_to_resume = Task_id[ rtems_get_index( timer_id ) ];
status = rtems_task_resume( task_to_resume );
directive_failed_with_level( status, "rtems_task_resume", 1 );
}

View File

@@ -0,0 +1,50 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2002.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.OARcorp.com/rtems/license.html.
#
This file describes the directives and concepts tested by this test set.
test set name: test30
directives:
ex_init, ex_start, t_create, t_start, tm_tick, i_return, t_ident,
ev_receive
concepts:
a. This test is a cyclic version of test1. The times printed by
each test should not skew as in test1 (see output section).
b. Verifies system can create and start both the executive's system
initialization and idle task.
c. Verifies executive can swap between three application tasks at the
same priority and the executive's internal idle task.
d. Verifies can print strings to the CRT on port 2 of the mvme136 board
using Print and Println in the board support package.
e. Verifies interrupt handler can handler a task switch from an interrupt
as specified with the i_return directive.
f. Verifies executive initialization performed correctly.
g. Verifies the executive trap handler except for the halt function.
h. Verifies that a task can get the task identification number of itself.
output:
"TA1" is printed once every 5 seconds. "TA2" is printed once
every 10 seconds. "TA3" is printed once every 15 seconds.
The times printed should be multiples of 5 seconds for TA1, 10 seconds
for TA2, and 15 seconds for TA3. If this does not happen, the calendar
time does not correspond correctly to the number of ticks.

View File

@@ -0,0 +1,16 @@
*** TEST 30 ***
TA1 - rtems_clock_get - 09:00:00 12/31/1988
TA2 - rtems_clock_get - 09:00:00 12/31/1988
TA3 - rtems_clock_get - 09:00:00 12/31/1988
TA1 - rtems_clock_get - 09:00:05 12/31/1988
TA2 - rtems_clock_get - 09:00:10 12/31/1988
TA1 - rtems_clock_get - 09:00:10 12/31/1988
TA3 - rtems_clock_get - 09:00:15 12/31/1988
TA1 - rtems_clock_get - 09:00:15 12/31/1988
TA2 - rtems_clock_get - 09:00:20 12/31/1988
TA1 - rtems_clock_get - 09:00:20 12/31/1988
TA1 - rtems_clock_get - 09:00:25 12/31/1988
TA3 - rtems_clock_get - 09:00:30 12/31/1988
TA2 - rtems_clock_get - 09:00:30 12/31/1988
TA1 - rtems_clock_get - 09:00:30 12/31/1988
*** END OF TEST 30 ***

View File

@@ -0,0 +1,55 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include <tmacros.h>
/* functions */
rtems_task Init(
rtems_task_argument argument
);
rtems_timer_service_routine Resume_task(
rtems_id timer_id,
void *ignored_address
);
rtems_task Task_1_through_3(
rtems_task_argument argument
);
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 5
#define CONFIGURE_MAXIMUM_TIMERS 3
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
#include <confdefs.h>
/* global variables */
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
TEST_EXTERN rtems_id Timer_id[ 4 ]; /* array of timer ids */
TEST_EXTERN rtems_name Timer_name[ 4 ]; /* array of timer names */
/* end of include file */

View File

@@ -0,0 +1,57 @@
/* Task_1_through_3
*
* This task is a cyclic version of test1 to asssure that the times
* displayed are not skewed as in test1. "TA1" is printed once every
* 5 seconds, "TA2" is printed once every 10 seconds, and "TA3" is
* printed once every 15 seconds. The times displayed should be
* in multiples of 5, 10, and 15 for TA1, TA2, and TA3 respectively.
* If the times are skewed from these values, then the calendar time
* does not correspond correctly with the number of ticks.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_task Task_1_through_3(
rtems_task_argument argument
)
{
rtems_id tid;
rtems_time_of_day time;
rtems_status_code status;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
directive_failed( status, "rtems_task_ident of self" );
while ( FOREVER ) {
status = rtems_timer_server_fire_after(
Timer_id[ argument ],
task_number( tid ) * 5 * TICKS_PER_SECOND,
Resume_task,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after failed" );
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get failed" );
if ( time.second >= 35 ) {
puts( "*** END OF TEST 30 ***" );
exit( 0 );
}
put_name( Task_name[ task_number( tid ) - 1 ], FALSE );
print_time( " - rtems_clock_get - ", &time, "\n" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
}
}

View File

@@ -0,0 +1,2 @@
Makefile
Makefile.in

View File

@@ -0,0 +1,36 @@
##
## $Id$
##
AUTOMAKE_OPTIONS = foreign 1.4
TEST = sp31
MANAGERS = all
C_FILES = delay.c init.c prtime.c task1.c
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o)
DOCTYPES = scn
DOCS = $(DOCTYPES:%=$(TEST).%)
SRCS = $(C_FILES) $(H_FILES)
OBJS = $(C_O_FILES)
PRINT_SRCS = $(DOCS)
PGM = ${ARCH}/$(TEST).exe
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../../../../automake/compile.am
include $(top_srcdir)/../../../../automake/leaf.am
include $(top_srcdir)/sptests.am
${PGM}: $(OBJS) $(LINK_FILES)
$(make-exe)
all-local: $(ARCH) $(TMPINSTALL_FILES)
EXTRA_DIST = $(C_FILES) $(DOCS)
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -0,0 +1,31 @@
/* Delayed_resume
*
* This routine is scheduled to be fired as a timer service routine.
* When fired this subprogram resumes Task_1.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_timer_service_routine Delayed_resume(
rtems_id ignored_id,
void *ignored_address
)
{
rtems_status_code status;
status = rtems_task_resume( Task_id[ 1 ] );
directive_failed_with_level( status, "rtems_task_resume of self", 1 );
}

View File

@@ -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-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#define TEST_INIT
#include "system.h"
rtems_task Init(
rtems_task_argument argument
)
{
rtems_time_of_day time;
rtems_status_code status;
puts( "\n\n*** TEST 31 ***" );
build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
status = rtems_timer_initiate_server(
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_ATTRIBUTES
);
directive_failed( status, "rtems_timer_initiate_server" );
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
status = rtems_task_create(
Task_name[ 1 ],
1,
RTEMS_MINIMUM_STACK_SIZE * 2,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&Task_id[ 1 ]
);
directive_failed( status, "rtems_task_create of TA1" );
status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
directive_failed( status, "rtems_task_start of TA1" );
puts( "INIT - rtems_timer_create - creating timer 1" );
status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] );
directive_failed( status, "rtems_timer_create" );
printf( "INIT - timer 1 has id (0x%x)\n", Timer_id[ 1 ] );
status = rtems_task_delete( RTEMS_SELF );
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
}

View File

@@ -0,0 +1,31 @@
/* Print_time
*
* This routine prints the name of Task_1 and the current time of day.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
void Print_time( void )
{
rtems_time_of_day time;
rtems_status_code status;
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get" );
put_name( Task_name[ 1 ], FALSE );
print_time( "- rtems_clock_get - ", &time, "\n" );
}

View File

@@ -0,0 +1,19 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2002.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.OARcorp.com/rtems/license.html.
#
This file describes the directives and concepts tested by this test set.
test set name: test31
directives:
concepts:

View File

@@ -0,0 +1,29 @@
*** TEST 31 ***
INIT - rtems_timer_create - creating timer 1
INIT - timer 1 has id (0x14010001)
TA1 - rtems_timer_ident - identing timer 1
TA1 - timer 1 has id (0x14010001)
TA1 - rtems_clock_get - 09:00:00 12/31/1988
TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds
TA1 - rtems_task_suspend( RTEMS_SELF )
TA1 - rtems_clock_get - 09:00:03 12/31/1988
TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds
TA1 - rtems_task_wake_after - 1 second
TA1 - rtems_clock_get - 09:00:04 12/31/1988
TA1 - rtems_timer_reset - timer 1
TA1 - rtems_task_suspend( RTEMS_SELF )
TA1 - rtems_clock_get - 09:00:07 12/31/1988
<pause>
TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds
TA1 - rtems_timer_cancel - timer 1
TA1 - rtems_clock_get - 09:00:07 12/31/1988
TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds
TA1 - rtems_task_suspend( RTEMS_SELF )
TA1 - rtems_clock_get - 09:00:10 12/31/1988
TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds
TA1 - rtems_task_wake_after - 1 second
TA1 - rtems_clock_get - 09:00:11 12/31/1988
TA1 - rtems_timer_cancel - timer 1
TA1 - rtems_task_wake_after - YIELD (only task at priority)
TA1 - timer_deleting - timer 1
*** END OF TEST 31 ***

View File

@@ -0,0 +1,58 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include <tmacros.h>
/* functions */
rtems_task Init(
rtems_task_argument argument
);
rtems_timer_service_routine Delayed_resume(
rtems_id ignored_id,
void *ignored_address
);
void Print_time( void );
rtems_task Task_1(
rtems_task_argument argument
);
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 3
#define CONFIGURE_MAXIMUM_TIMERS 2
#define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXTRA_TASK_STACKS (1 * RTEMS_MINIMUM_STACK_SIZE)
#include <confdefs.h>
/* global variables */
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
TEST_EXTERN rtems_id Timer_id[ 2 ]; /* array of timer ids */
TEST_EXTERN rtems_name Timer_name[ 2 ]; /* array of timer names */
/* end of include file */

View File

@@ -0,0 +1,163 @@
/* Task_1
*
* This routine serves as a test task. It verifies the basic task
* switching capabilities of the executive.
*
* Input parameters:
* argument - task argument
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include "system.h"
rtems_task Task_1(
rtems_task_argument argument
)
{
rtems_id tmid;
rtems_time_of_day time;
rtems_status_code status;
/* Get id */
puts( "TA1 - rtems_timer_ident - identing timer 1" );
status = rtems_timer_ident( Timer_name[ 1 ], &tmid );
directive_failed( status, "rtems_timer_ident" );
printf( "TA1 - timer 1 has id (0x%x)\n", tmid );
/* after which is allowed to fire */
Print_time();
puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_after(
tmid,
3 * TICKS_PER_SECOND,
Delayed_resume,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after" );
puts( "TA1 - rtems_task_suspend( RTEMS_SELF )" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
Print_time();
/* after which is reset and allowed to fire */
puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_after(
tmid,
3 * TICKS_PER_SECOND,
Delayed_resume,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after" );
puts( "TA1 - rtems_task_wake_after - 1 second" );
status = rtems_task_wake_after( 1 * TICKS_PER_SECOND );
directive_failed( status, "rtems_task_wake_after" );
Print_time();
puts( "TA1 - rtems_timer_reset - timer 1" );
status = rtems_timer_reset( tmid );
directive_failed( status, "rtems_timer_reset" );
puts( "TA1 - rtems_task_suspend( RTEMS_SELF )" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
Print_time();
rtems_test_pause();
/*
* Reset the time since we do not know how long the user waited
* before pressing <cr> at the pause. This insures that the
* actual output matches the screen.
*/
build_time( &time, 12, 31, 1988, 9, 0, 7, 0 );
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
/* after which is canceled */
puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_after(
tmid,
3 * TICKS_PER_SECOND,
Delayed_resume,
NULL
);
directive_failed( status, "rtems_timer_server_fire_after" );
puts( "TA1 - rtems_timer_cancel - timer 1" );
status = rtems_timer_cancel( tmid );
directive_failed( status, "rtems_timer_cancel" );
/* when which is allowed to fire */
Print_time();
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get" );
time.second += 3;
puts( "TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_when( tmid, &time, Delayed_resume, NULL );
directive_failed( status, "rtems_timer_server_fire_when" );
puts( "TA1 - rtems_task_suspend( RTEMS_SELF )" );
status = rtems_task_suspend( RTEMS_SELF );
directive_failed( status, "rtems_task_suspend" );
Print_time();
/* when which is canceled */
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
directive_failed( status, "rtems_clock_get" );
time.second += 3;
puts( "TA1 - rtems_timer_server_fire_when - timer 1 in 3 seconds" );
status = rtems_timer_server_fire_when( tmid, &time, Delayed_resume, NULL );
directive_failed( status, "rtems_timer_server_fire_when" );
puts( "TA1 - rtems_task_wake_after - 1 second" );
status = rtems_task_wake_after( 1 * TICKS_PER_SECOND );
directive_failed( status, "rtems_task_wake_after" );
Print_time();
puts( "TA1 - rtems_timer_cancel - timer 1" );
status = rtems_timer_cancel( tmid );
directive_failed( status, "rtems_timer_cancel" );
/* delete */
puts( "TA1 - rtems_task_wake_after - YIELD (only task at priority)" );
status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
directive_failed( status, "rtems_task_wake_after" );
puts( "TA1 - timer_deleting - timer 1" );
status = rtems_timer_delete( tmid );
directive_failed( status, "rtems_timer_delete" );
puts( "*** END OF TEST 31 *** " );
exit( 0 );
}