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