mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-20 20:12:26 +08:00
new test submitted by Craig Lebakken (lebakken@minn.net) and Derrick Ostertag
(ostertag@transition.com)
This commit is contained in:
114
testsuites/libtests/malloctest/init.c
Normal file
114
testsuites/libtests/malloctest/init.c
Normal file
@@ -0,0 +1,114 @@
|
||||
/* 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$
|
||||
*/
|
||||
|
||||
#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*** MALLOC TEST ***" );
|
||||
|
||||
build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
|
||||
status = rtems_clock_set( &time );
|
||||
directive_failed( status, "rtems_clock_set" );
|
||||
|
||||
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', ' ' );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 1 ],
|
||||
1,
|
||||
TASK_STACK_SIZE,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 1 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA1" );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 2 ],
|
||||
1,
|
||||
TASK_STACK_SIZE,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 2 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA2" );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 3 ],
|
||||
1,
|
||||
TASK_STACK_SIZE,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 3 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA3" );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 4 ],
|
||||
1,
|
||||
TASK_STACK_SIZE,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 4 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA4" );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 5 ],
|
||||
1,
|
||||
TASK_STACK_SIZE,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 5 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA5" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 1 ], Task_1_through_5, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA1" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 2 ], Task_1_through_5, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA2" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 3 ], Task_1_through_5, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA3" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 4 ], Task_1_through_5, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA4" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 5 ], Task_1_through_5, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA5" );
|
||||
|
||||
status = rtems_task_delete( RTEMS_SELF );
|
||||
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
||||
}
|
||||
49
testsuites/libtests/malloctest/system.h
Normal file
49
testsuites/libtests/malloctest/system.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/* 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 <tmacros.h>
|
||||
|
||||
/* macros */
|
||||
|
||||
#define TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE*3)
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
rtems_task Task_1_through_5(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
void blow_stack( void );
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_SPTEST
|
||||
|
||||
#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#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 */
|
||||
|
||||
/* end of include file */
|
||||
67
testsuites/libtests/malloctest/task1.c
Normal file
67
testsuites/libtests/malloctest/task1.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/* task1.c
|
||||
*
|
||||
* This set of three tasks do some simple task switching for about
|
||||
* 15 seconds and then call a routine to "blow the stack".
|
||||
*
|
||||
* 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"
|
||||
#include <libcsupport.h> /* for malloc_dump, malloc_walk */
|
||||
#include <string.h> /* for memset */
|
||||
|
||||
#define NUM_PASSES 100
|
||||
|
||||
rtems_task Task_1_through_5(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
int i;
|
||||
unsigned int passes = 0;
|
||||
rtems_id tid;
|
||||
rtems_time_of_day time;
|
||||
rtems_status_code status;
|
||||
unsigned char *mem_ptr;
|
||||
int mem_amt;
|
||||
|
||||
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
|
||||
directive_failed( status, "rtems_task_ident" );
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
if ( passes++ > NUM_PASSES )
|
||||
exit(0);
|
||||
|
||||
status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
|
||||
directive_failed( status, "rtems_clock_get" );
|
||||
|
||||
put_name( Task_name[ task_number( tid ) ], FALSE );
|
||||
print_time( " - rtems_clock_get - ", &time, "\n" );
|
||||
|
||||
mem_amt = rand() * task_number( tid );
|
||||
printf("mallocing %d bytes\n",mem_amt);
|
||||
mem_ptr = malloc ( mem_amt);
|
||||
memset( mem_ptr, mem_amt, mem_amt );
|
||||
malloc_dump();
|
||||
malloc_walk(1,FALSE);
|
||||
status = rtems_task_wake_after( task_number( tid ) * 1 * TICKS_PER_SECOND/4 );
|
||||
for (i=0; i < mem_amt; i++)
|
||||
{
|
||||
if ( mem_ptr[i] != (mem_amt & 0xff))
|
||||
{
|
||||
printf("failed %d, %d, 0x%x, 0x%x\n",i,mem_amt,mem_ptr[i],mem_amt&0xff);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
directive_failed( status, "rtems_task_wake_after" );
|
||||
free( mem_ptr );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user