summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-04-26 10:03:38 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-04-26 10:05:42 +0200
commited67d9317125d386ea6be12ee6ec256dd59f838a (patch)
tree5407fbec909090ba2492b6f412149ee153d9dd79
parentc36ebbda308ae9bac76b1b09b6a5ee7bc68455a5 (diff)
downloadrtems-ed67d9317125d386ea6be12ee6ec256dd59f838a.tar.bz2
bsps/stackalloc: Add initialization hook
-rw-r--r--c/src/lib/libbsp/shared/include/stackalloc.h11
-rw-r--r--c/src/lib/libbsp/shared/src/stackalloc.c28
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);
}