diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-04-26 10:03:38 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-04-26 10:05:42 +0200 |
commit | ed67d9317125d386ea6be12ee6ec256dd59f838a (patch) | |
tree | 5407fbec909090ba2492b6f412149ee153d9dd79 /c/src/lib/libbsp | |
parent | smp08 screen replacement (diff) | |
download | rtems-ed67d9317125d386ea6be12ee6ec256dd59f838a.tar.bz2 |
bsps/stackalloc: Add initialization hook
Diffstat (limited to 'c/src/lib/libbsp')
-rw-r--r-- | c/src/lib/libbsp/shared/include/stackalloc.h | 11 | ||||
-rw-r--r-- | c/src/lib/libbsp/shared/src/stackalloc.c | 28 |
2 files changed, 23 insertions, 16 deletions
diff --git a/c/src/lib/libbsp/shared/include/stackalloc.h b/c/src/lib/libbsp/shared/include/stackalloc.h index b8516ef85f..6ed898fa65 100644 --- a/c/src/lib/libbsp/shared/include/stackalloc.h +++ b/c/src/lib/libbsp/shared/include/stackalloc.h @@ -52,6 +52,12 @@ extern "C" { */ /** + * @brief Task stack allocator initialization for + * @ref CONFIGURE_TASK_STACK_ALLOCATOR_INIT. + */ +void bsp_stack_allocate_init(size_t stack_space_size); + +/** * @brief Task stack allocator for @ref CONFIGURE_TASK_STACK_ALLOCATOR. * * In case the designated task stack space from bsp_stack_initialize() is @@ -65,6 +71,11 @@ void *bsp_stack_allocate(size_t size); void bsp_stack_free(void *stack); /** + * @brief Task stack allocator initialization configuration option. + */ +#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT bsp_stack_allocate_init + +/** * @brief Task stack allocator configuration option. */ #define CONFIGURE_TASK_STACK_ALLOCATOR bsp_stack_allocate diff --git a/c/src/lib/libbsp/shared/src/stackalloc.c b/c/src/lib/libbsp/shared/src/stackalloc.c index be84057aae..b8d7b9cc2c 100644 --- a/c/src/lib/libbsp/shared/src/stackalloc.c +++ b/c/src/lib/libbsp/shared/src/stackalloc.c @@ -27,30 +27,26 @@ #include <bsp/linker-symbols.h> -#define BSP_STACK_MAGIC 0xdeadbeef +static Heap_Control bsp_stack_heap; -static Heap_Control bsp_stack_heap = { - .page_size = BSP_STACK_MAGIC -}; +void bsp_stack_allocate_init(size_t stack_space_size) +{ + _Heap_Initialize( + &bsp_stack_heap, + bsp_section_stack_begin, + (uintptr_t) bsp_section_stack_size, + CPU_STACK_ALIGNMENT + ); +} void *bsp_stack_allocate(size_t size) { void *stack = NULL; - if (bsp_stack_heap.page_size == BSP_STACK_MAGIC) { - uintptr_t rv = _Heap_Initialize( - &bsp_stack_heap, - bsp_section_stack_begin, - (uintptr_t) bsp_section_stack_size, - CPU_STACK_ALIGNMENT - ); - if (rv == 0) { - return NULL; - } + if (bsp_stack_heap.area_begin != 0) { + stack = _Heap_Allocate(&bsp_stack_heap, size); } - stack = _Heap_Allocate(&bsp_stack_heap, size); - if (stack == NULL) { stack = _Workspace_Allocate(size); } |