[rtems commit] bsps/stackalloc: Add initialization hook

Sebastian Huber sebh at rtems.org
Thu Apr 26 09:00:05 UTC 2012


Module:    rtems
Branch:    master
Commit:    ed67d9317125d386ea6be12ee6ec256dd59f838a
Changeset: http://git.rtems.org/rtems/commit/?id=ed67d9317125d386ea6be12ee6ec256dd59f838a

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Apr 26 10:03:38 2012 +0200

bsps/stackalloc: Add initialization hook

---

 c/src/lib/libbsp/shared/include/stackalloc.h |   11 ++++++++++
 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 b8516ef..6ed898f 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 be84057..b8d7b9c 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);
   }




More information about the vc mailing list