sparc stack and heap
Aleix Conchillo Flaqué
aconchillo at ieec.fcr.es
Tue Jul 25 12:41:26 UTC 2006
I'll answer my self, task stacks are allocated in the heap. Right?
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