File indexing completed on 2025-05-11 08:24:49
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <tmacros.h>
0034
0035 const char rtems_test_name[] = "SPSTKALLOC";
0036
0037
0038 rtems_task Init(rtems_task_argument argument);
0039
0040 #define MAXIMUM_STACKS 2
0041
0042 typedef struct {
0043 uint8_t Space[CPU_STACK_MINIMUM_SIZE];
0044 } StackMemory_t;
0045
0046 int stackToAlloc = 0;
0047 StackMemory_t Stacks[MAXIMUM_STACKS];
0048 void *StackDeallocated = NULL;
0049
0050 static void *StackAllocator(size_t size)
0051 {
0052 if (stackToAlloc < MAXIMUM_STACKS)
0053 return &Stacks[stackToAlloc++];
0054 return NULL;
0055 }
0056
0057 static void StackDeallocator(void *stack)
0058 {
0059 StackDeallocated = stack;
0060 }
0061
0062 rtems_task Init(
0063 rtems_task_argument ignored
0064 )
0065 {
0066 rtems_status_code rc;
0067 rtems_id taskId;
0068 rtems_id taskId1;
0069
0070 TEST_BEGIN();
0071
0072 puts( "Init - create task TA1 to use custom stack allocator - OK" );
0073 rc = rtems_task_create(
0074 rtems_build_name( 'T', 'A', '1', ' ' ),
0075 1,
0076 RTEMS_MINIMUM_STACK_SIZE,
0077 RTEMS_DEFAULT_MODES,
0078 RTEMS_DEFAULT_ATTRIBUTES,
0079 &taskId
0080 );
0081 directive_failed( rc, "rtems_task_create of TA1" );
0082
0083 puts( "Init - create task TA1 to have custom stack allocator fail" );
0084 rc = rtems_task_create(
0085 rtems_build_name( 'F', 'A', 'I', 'L' ),
0086 1,
0087 RTEMS_MINIMUM_STACK_SIZE,
0088 RTEMS_DEFAULT_MODES,
0089 RTEMS_DEFAULT_ATTRIBUTES,
0090 &taskId1
0091 );
0092 fatal_directive_status( rc, RTEMS_UNSATISFIED, "rtems_task_create of FAIL" );
0093
0094 puts( "Init - delete task TA1 to use custom stack deallocator - OK" );
0095 rc = rtems_task_delete( taskId );
0096 directive_failed( rc, "rtems_task_delete of TA1" );
0097
0098 TEST_END();
0099 rtems_test_exit(0);
0100 }
0101
0102
0103
0104 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0105 #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
0106
0107 #define CONFIGURE_TASK_STACK_ALLOCATOR StackAllocator
0108 #define CONFIGURE_TASK_STACK_DEALLOCATOR StackDeallocator
0109
0110 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0111
0112 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0113 #define CONFIGURE_MAXIMUM_TASKS 3
0114
0115 #define CONFIGURE_INIT
0116 #include <rtems/confdefs.h>
0117
0118