diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-08-09 16:48:00 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-25 14:54:06 +0200 |
commit | 47a3cd8f73780bad3eff5135f0eb58e8c98af91d (patch) | |
tree | 8acdfc6ebe5d596f9c6b974e6c460dc69e824e3c /c/src/lib/libbsp/shared/bspgetworkarea.c | |
parent | score: Append to free list in _Heap_Extend() (diff) | |
download | rtems-47a3cd8f73780bad3eff5135f0eb58e8c98af91d.tar.bz2 |
score: Work area initialization API change
The work areas (RTEMS work space and C program heap) will be initialized
now in a separate step and are no longer part of
rtems_initialize_data_structures(). Initialization is performed with
tables of Heap_Area entries. This allows usage of scattered memory
areas present on various small scale micro-controllers.
The sbrk() support API changes also. The bsp_sbrk_init() must now deal
with a minimum size for the first memory chunk to take the configured
work space size into account.
Diffstat (limited to 'c/src/lib/libbsp/shared/bspgetworkarea.c')
-rw-r--r-- | c/src/lib/libbsp/shared/bspgetworkarea.c | 54 |
1 files changed, 4 insertions, 50 deletions
diff --git a/c/src/lib/libbsp/shared/bspgetworkarea.c b/c/src/lib/libbsp/shared/bspgetworkarea.c index a2ad2e93ce..4122c9b358 100644 --- a/c/src/lib/libbsp/shared/bspgetworkarea.c +++ b/c/src/lib/libbsp/shared/bspgetworkarea.c @@ -1,25 +1,20 @@ /* - * This routine is an implementation of the bsp_get_work_area() + * This routine is an implementation of the bsp_work_area_initialize() * that can be used by all BSPs following linkcmds conventions * regarding heap, stack, and workspace allocation. * * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2011 embedded brains GmbH. + * Copyright (c) 2011-2012 embedded brains GmbH. * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. */ -/* #define BSP_GET_WORK_AREA_DEBUG */ - #include <bsp.h> #include <bsp/bootcard.h> -#ifdef BSP_GET_WORK_AREA_DEBUG - #include <rtems/bspIo.h> -#endif #ifdef BSP_INTERRUPT_STACK_AT_WORK_AREA_BEGIN #include <rtems/config.h> #endif @@ -32,7 +27,6 @@ * These are provided by the linkcmds for ALL of the BSPs which use this file. */ extern char WorkAreaBase[]; -extern char HeapSize[]; /* * We may get the size information from U-Boot or the linker scripts. @@ -44,17 +38,7 @@ extern char HeapSize[]; extern char RamSize[]; #endif -/* - * This method returns the base address and size of the area which - * is to be allocated between the RTEMS Workspace and the C Program - * Heap. - */ -void bsp_get_work_area( - void **work_area_start, - uintptr_t *work_area_size, - void **heap_start, - uintptr_t *heap_size -) +void bsp_work_area_initialize(void) { uintptr_t work_base = (uintptr_t) WorkAreaBase; uintptr_t ram_end; @@ -70,35 +54,5 @@ void bsp_get_work_area( work_base += Configuration.interrupt_stack_size; #endif - *work_area_start = (void *) work_base; - *work_area_size = ram_end - work_base; - *heap_start = BSP_BOOTCARD_HEAP_USES_WORK_AREA; - *heap_size = (uintptr_t) HeapSize; - - /* - * The following may be helpful in debugging what goes wrong when - * you are allocating the Work Area in a new BSP. - */ - #ifdef BSP_GET_WORK_AREA_DEBUG - { - void *sp = __builtin_frame_address(0); - void *end = *work_area_start + *work_area_size; - printk( - "work_area_start = 0x%p\n" - "work_area_size = %d 0x%08x\n" - "end = 0x%p\n" - "heap_start = 0x%p\n" - "heap_size = %d\n" - "current stack pointer = 0x%p%s\n", - *work_area_start, - *work_area_size, /* decimal */ - *work_area_size, /* hexadecimal */ - end, - *heap_start, - *heap_size, - sp, - ((sp >= *work_area_start && sp <= end) ? " OVERLAPS!" : "") - ); - } - #endif + bsp_work_area_initialize_default( (void *) work_base, ram_end - work_base ); } |