sparc stack and heap
joel.sherrill at oarcorp.com
Tue Jul 25 13:53:40 UTC 2006
Aleix Conchillo Flaqué wrote:
> I'll answer my self, task stacks are allocated in the heap. Right?
No. Task stacks are allocated from the RTEMS Workspace not the
C Program Heap.
heap size refers to the size of the C Program Heap which is used for
workspace_size refers to the RTEMS Workspace which is strictly used
for RTEMS objects, task stacks, etc.
> On 25 Jul 2006, at 14:31, Aleix Conchillo Flaqué wrote:
>> On 25 Jul 2006, at 14:06, Joel Sherrill wrote:
>>> STACK_SIZE in linkcmds looks the size of the initial stack used for
>>> system initialization in that BSP.
>>> Do you see symbols near it in start.S used to set the stack pointer?
>> STACK_SIZE is defined inside bspstart.c:
>> #define STACK_SIZE 16 + 1024
>> Then heap_size is calculated (in bsp_pretasking_hook) as:
>> heap_size = BSP_Configuration.work_space_start - (void *)&end -
>> heap_size &= 0xfffffff0;
>> bsp_libc_init ((void *) heap_start, heap_size, 0);
>>> The application usually uses confdefs.h to specify the RTEMS
>>> resources needed. confdefs.h calculates
>>> the required amount of workspace. If you configure 10 tasks, then
>>> it calculates you need 40K for corresponding
>>> task stacks. This is from the ticker sample:
>>> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>>> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
>>> #define CONFIGURE_MAXIMUM_TASKS 4
>>> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>>> #define CONFIGURE_EXTRA_TASK_STACKS (3 *
>>> #include <rtems/confdefs.h>
>>> It says that the application wants a maximum of 4 Classic API tasks
>>> and 3 of those use stacks of
>>> twice the minimum.
>>> No. You can have as many as you have RAM. See libbsp/sparc/
>>> shared/bspstart.c which
>>> tries to give the required memory above the heap to the RTEMS
>> OK, I understand this and it makes sense at all, what I don't
>> understand is the heap_size variable initialisation.
>> Thanks for the fast answer.
>> Best regards,
More information about the users