sparc stack and heap
Joel Sherrill
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
malloc.
workspace_size refers to the RTEMS Workspace which is strictly used
for RTEMS objects, task stacks, etc.
-joel
> Cheers,
>
> aleix
>
> 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 -
>> STACK_SIZE;
>> 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 *
>>> RTEMS_MINIMUM_STACK_SIZE)
>>>
>>> #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
>>> Workspace.
>>>
>>
>> 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,
>>
>> aleix
>
>
More information about the users
mailing list