From ab29fefe853e21672b97ebd125bd9c97bcc2d5f1 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 3 Dec 2008 21:33:17 +0000 Subject: 2008-12-03 Joel Sherrill * sp45/init.c: New file. --- testsuites/sptests/ChangeLog | 4 ++ testsuites/sptests/sp45/init.c | 126 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 testsuites/sptests/sp45/init.c diff --git a/testsuites/sptests/ChangeLog b/testsuites/sptests/ChangeLog index 5638d6c901..ac5007b359 100644 --- a/testsuites/sptests/ChangeLog +++ b/testsuites/sptests/ChangeLog @@ -1,3 +1,7 @@ +2008-12-03 Joel Sherrill + + * sp45/init.c: New file. + 2008-12-03 Joel Sherrill PR 1347/cpukit diff --git a/testsuites/sptests/sp45/init.c b/testsuites/sptests/sp45/init.c new file mode 100644 index 0000000000..2619740222 --- /dev/null +++ b/testsuites/sptests/sp45/init.c @@ -0,0 +1,126 @@ +/* + * COPYRIGHT (c) 1989-2008. + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include + +rtems_id Timer_id[ 3 ]; /* array of timer ids */ +rtems_name Timer_name[ 3 ]; /* array of timer names */ + +volatile int TSR_fired; +volatile void *TSR_malloc_ptr; + +rtems_timer_service_routine Malloc_From_TSR( + rtems_id ignored_id, + void *ignored_address +) +{ + rtems_status_code status; + + TSR_fired = 2; + puts( "TSR: calling malloc" ); + TSR_malloc_ptr = malloc( 64 ); + + puts( "TSR: calling free" ); + free( (void *) TSR_malloc_ptr ); + + puts( "TSR: delaying with rtems_task_wake_after" ); + status = rtems_task_wake_after( TICKS_PER_SECOND / 2 ); + directive_failed( status, "rtems_task_wake_after" ); +} + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_status_code status; + + puts( "\n\n*** TEST 45 ***" ); + + status = rtems_timer_initiate_server( + RTEMS_TIMER_SERVER_DEFAULT_PRIORITY, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_ATTRIBUTES + ); + directive_failed( status, "rtems_timer_initiate_server" ); + + /* + * Initialize Timers + */ + + Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' ); + Timer_name[ 2 ] = rtems_build_name( 'T', 'M', '2', ' ' ); + + 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 ] ); + + puts( "INIT - rtems_timer_create - creating timer 2" ); + status = rtems_timer_create( Timer_name[ 2 ], &Timer_id[ 2 ] ); + directive_failed( status, "rtems_timer_create" ); + printf( "INIT - timer 2 has id (0x%x)\n", Timer_id[ 2 ] ); + + /* + * Schedule malloc TSR for 1 second from now + */ + + TSR_fired = 0; + TSR_malloc_ptr = (void *) 0xa5a5a5; + puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 1 seconds" ); + status = rtems_timer_server_fire_after( + Timer_id[ 1 ], + 1 * TICKS_PER_SECOND, + Malloc_From_TSR, + NULL + ); + directive_failed( status, "rtems_timer_server_fire_after" ); + + puts( "TA1 - rtems_task_wake_after - 2 second" ); + status = rtems_task_wake_after( 2 * TICKS_PER_SECOND ); + directive_failed( status, "rtems_task_wake_after" ); + + if ( TSR_fired == 2 && + (TSR_malloc_ptr && TSR_malloc_ptr != (void *)0xa5a5a5) ) + puts( "TSR appears to have executed OK" ); + else { + printf( "FAILURE ptr=%p TSR_fired=%d\n", TSR_malloc_ptr, TSR_fired ); + rtems_test_exit( 0 ); + } + + /* + * Delete timer and exit test + */ + puts( "TA1 - timer_deleting - timer 1" ); + status = rtems_timer_delete( Timer_id[ 1 ] ); + directive_failed( status, "rtems_timer_delete" ); + + + puts( "*** END OF TEST 45 *** " ); + rtems_test_exit( 0 ); +} + +#define CONFIGURE_INIT +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +/* Two Tasks: Init and Timer Server */ +#define CONFIGURE_MAXIMUM_TASKS 2 +#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 + -- cgit v1.2.3