mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
2008-06-17 Joel Sherrill <joel.sherrill@oarcorp.com>
* sapi/include/confdefs.h: When you disabled newlib reentrancy, it still reserved memory for the reentrancy structure. This is about 1K per task. On psim, we now reserve only 1936 bytes and only 240 remain after all allocations. Further analysis will be required to narrow that down. In addition, the new constant CONFIGURE_CONFDEFS_DEBUG can be defined and the structure named Configuration_Memory_Debug will be instantiated. This structure contains many of the component values that go into the memory reservation computation. This is helpful when tracking down problems.
This commit is contained in:
@@ -1,3 +1,15 @@
|
||||
2008-06-17 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* sapi/include/confdefs.h: When you disabled newlib reentrancy, it
|
||||
still reserved memory for the reentrancy structure. This is about 1K
|
||||
per task. On psim, we now reserve only 1936 bytes and only 240 remain
|
||||
after all allocations. Further analysis will be required to narrow
|
||||
that down. In addition, the new constant CONFIGURE_CONFDEFS_DEBUG can
|
||||
be defined and the structure named Configuration_Memory_Debug will be
|
||||
instantiated. This structure contains many of the component values
|
||||
that go into the memory reservation computation. This is helpful when
|
||||
tracking down problems.
|
||||
|
||||
2008-06-17 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* sapi/include/confdefs.h: The math in the _Configure_Object_RAM macro
|
||||
|
||||
@@ -897,7 +897,7 @@ extern rtems_configuration_table Configuration;
|
||||
#endif
|
||||
|
||||
#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
|
||||
( \
|
||||
_Configure_From_workspace( \
|
||||
sizeof (POSIX_API_Control) + \
|
||||
(sizeof (void *) * (CONFIGURE_MAXIMUM_POSIX_KEYS)) \
|
||||
)
|
||||
@@ -1030,8 +1030,7 @@ extern rtems_configuration_table Configuration;
|
||||
#endif
|
||||
|
||||
#define CONFIGURE_MEMORY_FOR_POSIX \
|
||||
( \
|
||||
CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
|
||||
( CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
|
||||
CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
|
||||
CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
|
||||
CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
|
||||
@@ -1240,8 +1239,7 @@ extern rtems_configuration_table Configuration;
|
||||
#endif
|
||||
|
||||
#define CONFIGURE_MEMORY_FOR_ITRON \
|
||||
( \
|
||||
CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
|
||||
( CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
|
||||
CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
|
||||
CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
|
||||
CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
|
||||
@@ -1273,12 +1271,18 @@ extern rtems_configuration_table Configuration;
|
||||
|
||||
#endif /* RTEMS_ITRON_API */
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
/**
|
||||
* This macro specifies the amount of memory to be reserved for the
|
||||
* Newlib C Library reentrancy structure -- if we are using newlib.
|
||||
*/
|
||||
|
||||
#if (defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
|
||||
#include <reent.h>
|
||||
|
||||
#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY sizeof(struct _reent)
|
||||
#define CONFIGURE_MEMORY_PER_TASK_FOR_NEWLIB \
|
||||
_Configure_From_workspace(sizeof(struct _reent))
|
||||
#else
|
||||
#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY 0
|
||||
#define CONFIGURE_MEMORY_PER_TASK_FOR_NEWLIB 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -1300,9 +1304,9 @@ extern rtems_configuration_table Configuration;
|
||||
((_tasks) * \
|
||||
(_Configure_From_workspace(CONFIGURE_MINIMUM_TASK_STACK_SIZE) + \
|
||||
_Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_CLASSIC_API) + \
|
||||
_Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY) + \
|
||||
_Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API) + \
|
||||
_Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API))) + \
|
||||
CONFIGURE_MEMORY_PER_TASK_FOR_NEWLIB + \
|
||||
CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
|
||||
CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API)) + \
|
||||
_Configure_From_workspace((_number_FP_tasks) * CONTEXT_FP_SIZE) \
|
||||
)
|
||||
|
||||
@@ -1394,15 +1398,27 @@ extern rtems_configuration_table Configuration;
|
||||
#define CONFIGURE_API_MUTEX_MEMORY \
|
||||
_Configure_Object_RAM(1, sizeof(API_Mutex_Control))
|
||||
|
||||
/**
|
||||
* This defines the memory used by the thread ready chains. There is
|
||||
* one chain per priority.
|
||||
*/
|
||||
#define CONFIGURE_MEMORY_FOR_THREAD_READY_CHAINS \
|
||||
_Configure_From_workspace( \
|
||||
((CONFIGURE_MAXIMUM_PRIORITY+1) * sizeof(Chain_Control)) )
|
||||
/**
|
||||
* This defines the amount of memory reserved for the IDLE task
|
||||
* control structures and stack.
|
||||
*/
|
||||
#define CONFIGURE_MEMORY_FOR_IDLE_TASK \
|
||||
(CONFIGURE_MEMORY_FOR_TASKS(1, 0) + \
|
||||
(CONFIGURE_IDLE_TASK_STACK_SIZE - CONFIGURE_MINIMUM_TASK_STACK_SIZE))
|
||||
|
||||
/**
|
||||
* This macro accounts for general RTEMS system overhead.
|
||||
*/
|
||||
#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
|
||||
( \
|
||||
CONFIGURE_MEMORY_FOR_TASKS(1, 0) + /* IDLE and stack */ \
|
||||
(CONFIGURE_IDLE_TASK_STACK_SIZE - CONFIGURE_MINIMUM_TASK_STACK_SIZE) + \
|
||||
_Configure_From_workspace( /* Ready chains */ \
|
||||
((CONFIGURE_MAXIMUM_PRIORITY+1) * sizeof(Chain_Control)) ) + \
|
||||
( CONFIGURE_MEMORY_FOR_IDLE_TASK + /* IDLE and stack */ \
|
||||
CONFIGURE_MEMORY_FOR_THREAD_READY_CHAINS + /* Ready chains */ \
|
||||
CONFIGURE_INTERRUPT_VECTOR_TABLE + /* interrupt vectors */ \
|
||||
CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \
|
||||
CONFIGURE_API_MUTEX_MEMORY /* allocation mutex */ \
|
||||
@@ -1495,7 +1511,7 @@ extern rtems_configuration_table Configuration;
|
||||
CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(CONFIGURE_MAXIMUM_USER_EXTENSIONS) \
|
||||
)
|
||||
|
||||
#if 1 && defined(CONFIGURE_INIT)
|
||||
#if defined(CONFIGURE_CONFDEFS_DEBUG) && defined(CONFIGURE_INIT)
|
||||
/**
|
||||
* This is a debug mechanism, so if you need to, the executable will
|
||||
* have a structure with various partial values. Add to this as you
|
||||
@@ -1504,23 +1520,114 @@ extern rtems_configuration_table Configuration;
|
||||
* down errors and analyzing where over and under allocations are.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t Classic;
|
||||
uint32_t ITRON;
|
||||
uint32_t SYSTEM_OVERHEAD;
|
||||
uint32_t STATIC_EXTENSIONS;
|
||||
uint32_t INITIALIZATION_THREADS_STACKS;
|
||||
|
||||
uint32_t CLASSIC;
|
||||
uint32_t POSIX;
|
||||
uint32_t TASKS;
|
||||
uint32_t INIT_TASK_STACKS;
|
||||
uint32_t CLASSIC_SEMAPHORES;
|
||||
uint32_t ITRON;
|
||||
|
||||
/* System overhead pieces */
|
||||
uint32_t INTERRUPT_VECTOR_TABLE;
|
||||
uint32_t INTERRUPT_STACK_MEMORY;
|
||||
uint32_t THREAD_READY_CHAINS;
|
||||
uint32_t MEMORY_FOR_IDLE_TASK;
|
||||
|
||||
/* Classic API Pieces */
|
||||
uint32_t TASK_VARIABLES;
|
||||
uint32_t TIMERS;
|
||||
uint32_t SEMAPHORES;
|
||||
uint32_t MESSAGE_QUEUES;
|
||||
uint32_t PARTITIONS;
|
||||
uint32_t REGIONS;
|
||||
uint32_t PORTS;
|
||||
uint32_t PERIODS;
|
||||
uint32_t BARRIERS;
|
||||
uint32_t USER_EXTENSIONS;
|
||||
#ifdef RTEMS_POSIX_API
|
||||
/* POSIX API Pieces */
|
||||
uint32_t POSIX_MUTEXES;
|
||||
uint32_t POSIX_CONDITION_VARIABLES;
|
||||
uint32_t POSIX_KEYS;
|
||||
uint32_t POSIX_TIMERS;
|
||||
uint32_t POSIX_QUEUED_SIGNALS;
|
||||
uint32_t POSIX_MESSAGE_QUEUES;
|
||||
uint32_t POSIX_SEMAPHORES;
|
||||
uint32_t POSIX_BARRIERS;
|
||||
uint32_t POSIX_SPINLOCKS;
|
||||
uint32_t POSIX_RWLOCKS;
|
||||
#endif
|
||||
#ifdef RTEMS_ITRON_API
|
||||
/* ITRON API Pieces */
|
||||
uint32_t ITRON_SEMAPHORES;
|
||||
uint32_t ITRON_EVENTFLAGS;
|
||||
uint32_t ITRON_MAILBOXES;
|
||||
uint32_t ITRON_MESSAGE_BUFFERS;
|
||||
uint32_t ITRON_PORTS;
|
||||
uint32_t ITRON_MEMORY_POOLS;
|
||||
uint32_t ITRON_FIXED_MEMORY_POOLS;
|
||||
#endif
|
||||
} Configuration_Debug_t;
|
||||
|
||||
Configuration_Debug_t Configuration_Memory_Debug = {
|
||||
CONFIGURE_MEMORY_FOR_CLASSIC, /* MEMORY_CLASSIC */
|
||||
CONFIGURE_MEMORY_FOR_ITRON, /* MEMORY_ITRON */
|
||||
CONFIGURE_MEMORY_FOR_POSIX, /* MEMORY_POSIX */
|
||||
CONFIGURE_MEMORY_FOR_TASKS( /* MEMORY_TASKS */
|
||||
CONFIGURE_TOTAL_TASKS_AND_THREADS, CONFIGURE_TOTAL_TASKS_AND_THREADS),
|
||||
CONFIGURE_INITIALIZATION_THREADS_STACKS, /* INIT_TASK_STACKS */
|
||||
CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
|
||||
CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES)
|
||||
/* General Information */
|
||||
CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD,
|
||||
CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS,
|
||||
CONFIGURE_INITIALIZATION_THREADS_STACKS,
|
||||
CONFIGURE_MEMORY_FOR_CLASSIC,
|
||||
CONFIGURE_MEMORY_FOR_POSIX,
|
||||
CONFIGURE_MEMORY_FOR_ITRON,
|
||||
|
||||
/* System overhead pieces */
|
||||
CONFIGURE_INTERRUPT_VECTOR_TABLE,
|
||||
CONFIGURE_INTERRUPT_STACK_MEMORY,
|
||||
CONFIGURE_MEMORY_FOR_THREAD_READY_CHAINS,
|
||||
CONFIGURE_MEMORY_FOR_IDLE_TASK,
|
||||
|
||||
/* Classic API Pieces */
|
||||
CONFIGURE_MEMORY_FOR_TASK_VARIABLES(CONFIGURE_MAXIMUM_TASK_VARIABLES),
|
||||
CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS),
|
||||
CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES +
|
||||
CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES),
|
||||
CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES),
|
||||
CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS),
|
||||
CONFIGURE_MEMORY_FOR_REGIONS( CONFIGURE_MAXIMUM_REGIONS ),
|
||||
CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS),
|
||||
CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS),
|
||||
CONFIGURE_MEMORY_FOR_BARRIERS(CONFIGURE_MAXIMUM_BARRIERS),
|
||||
CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(CONFIGURE_MAXIMUM_USER_EXTENSIONS),
|
||||
|
||||
#ifdef RTEMS_POSIX_API
|
||||
/* POSIX API Pieces */
|
||||
CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(
|
||||
CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(
|
||||
CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(
|
||||
CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_BARRIERS( CONFIGURE_MAXIMUM_POSIX_BARRIERS ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS( CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS( CONFIGURE_MAXIMUM_POSIX_RWLOCKS ),
|
||||
CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ),
|
||||
#endif
|
||||
|
||||
#ifdef RTEMS_ITRON_API
|
||||
/* ITRON API Pieces */
|
||||
CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ),
|
||||
CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ),
|
||||
CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( CONFIGURE_MAXIMUM_ITRON_MAILBOXES ),
|
||||
CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(
|
||||
CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ),
|
||||
CONFIGURE_MEMORY_FOR_ITRON_PORTS( CONFIGURE_MAXIMUM_ITRON_PORTS ),
|
||||
CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(
|
||||
CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ),
|
||||
CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(
|
||||
CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ),
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user