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 <rtems.h>
0034 #include <tmacros.h>
0035
0036 #include <rtems/score/percpu.h>
0037
0038 const char rtems_test_name[] = "SPSTKALLOC 3";
0039
0040 static int thread_stacks_count = 0xff;
0041
0042 static rtems_task Init(
0043 rtems_task_argument ignored
0044 )
0045 {
0046 rtems_print_printer_fprintf_putc(&rtems_test_printer);
0047 TEST_BEGIN();
0048 rtems_test_assert(thread_stacks_count == 2);
0049 TEST_END();
0050 rtems_test_exit( 0 );
0051 }
0052
0053 static uint8_t stack_memory[RTEMS_MINIMUM_STACK_SIZE * 4];
0054
0055 static int stack_offset_next;
0056
0057 static void *allocate_helper(size_t size)
0058 {
0059 size_t next;
0060 void *alloc;
0061
0062 next = stack_offset_next + size;
0063 rtems_test_assert( next < sizeof(stack_memory) );
0064
0065 alloc = &stack_memory[stack_offset_next];
0066 stack_offset_next = next;
0067 return alloc;
0068 }
0069
0070 static void thread_stacks_initialize(size_t stack_space_size)
0071 {
0072 rtems_test_assert(thread_stacks_count == 0xff);
0073 thread_stacks_count = 0;
0074 }
0075
0076 static void *thread_stacks_allocate(size_t stack_size)
0077 {
0078 rtems_test_assert(thread_stacks_count == 1);
0079 thread_stacks_count++;
0080 return allocate_helper(stack_size);
0081 }
0082
0083 static void thread_stacks_free(void *addr)
0084 {
0085 rtems_test_assert(false);
0086 }
0087
0088 static void *thread_stacks_allocate_for_idle(
0089 uint32_t cpu,
0090 size_t *stack_size
0091 )
0092 {
0093 rtems_test_assert(thread_stacks_count == 0);
0094 thread_stacks_count++;
0095 return allocate_helper(*stack_size);
0096 }
0097
0098
0099
0100
0101
0102 #define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
0103 #define CONFIGURE_TASK_STACK_ALLOCATOR_INIT thread_stacks_initialize
0104 #define CONFIGURE_TASK_STACK_ALLOCATOR thread_stacks_allocate
0105 #define CONFIGURE_TASK_STACK_DEALLOCATOR thread_stacks_free
0106 #define CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE thread_stacks_allocate_for_idle
0107
0108
0109
0110 #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
0111 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0112
0113 #define CONFIGURE_MAXIMUM_TASKS 1
0114
0115 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0116
0117 #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
0118
0119 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0120
0121 #define CONFIGURE_INIT
0122 #include <rtems/confdefs.h>