Get additional 32K of RAM on nrf52. See errata #33 and #34

Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/commit/acbd147d
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/acbd147d
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/acbd147d

Branch: refs/heads/master
Commit: acbd147dae0fe9f0ac90b81160042b002094ad6b
Parents: 1d324a7
Author: wes3 <w...@micosa.io>
Authored: Wed Dec 9 11:09:54 2015 -0800
Committer: wes3 <w...@micosa.io>
Committed: Wed Dec 9 16:56:56 2015 -0800

----------------------------------------------------------------------
 hw/bsp/nrf52pdk/nrf52pdk.ld | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/acbd147d/hw/bsp/nrf52pdk/nrf52pdk.ld
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf52pdk/nrf52pdk.ld b/hw/bsp/nrf52pdk/nrf52pdk.ld
index 8be5b6a..144ea23 100755
--- a/hw/bsp/nrf52pdk/nrf52pdk.ld
+++ b/hw/bsp/nrf52pdk/nrf52pdk.ld
@@ -33,10 +33,17 @@
  */
 OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
 
+/* 
+ * NOTE: This linker script is for version 1.0 of the nrf52. See
+ * errata #33 and #34 on nordic infocenter website for details. This errata
+ * causes us to allocate a memory regision we call "CODE_RAM" so that we can
+ * access the full 64K RAM provided by the chip.
+ */ 
 MEMORY
 {
   FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x80000
-  RAM (rwx) :  ORIGIN = 0x20000000, LENGTH = 0x8000
+  RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x8000
+  CODE_RAM (rwx) : ORIGIN = 0x8000000, LENGTH = 0x8000
 }
 
 /* Linker script to place sections and symbol values. Should be used together
@@ -168,20 +175,20 @@ SECTIONS
         __bss_end__ = .;
     } > RAM
 
-    /* Heap starts after BSS */
-    __HeapBase = .;
-
     /* .stack_dummy section doesn't contains any symbols. It is only
      * used for linker to calculate size of stack sections, and assign
      * values to stack symbols later */
     .stack_dummy (COPY):
     {
         *(.stack*)
-    } > RAM
-
-    /* Set stack top to end of RAM, and stack limit move down by
-     * size of stack_dummy section */
-    __StackTop = ORIGIN(RAM) + LENGTH(RAM);
+    } > CODE_RAM
+
+    /* 
+     * Place heap and stack in CODE_RAM. Heap is at start, stack is at the
+     * top and stack limit is the bottom of the stack.
+     */
+    __HeapBase = ORIGIN(CODE_RAM);
+    __StackTop = ORIGIN(CODE_RAM) + LENGTH(CODE_RAM);
     __StackLimit = __StackTop - SIZEOF(.stack_dummy);
     PROVIDE(__stack = __StackTop);
 

Reply via email to