summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Howard <phil@gadgetoid.com>2022-08-05 09:43:22 +0100
committerDamien George <damien@micropython.org>2022-08-11 14:16:29 +1000
commit71f6eb5ac953637e815ec9c5cbc785b4027a8759 (patch)
treeea927aae3434f076319a2a0dd8316a70fb1fe457
parent6e51dbd95aa051533e2618e2df8f51cb0f06cfed (diff)
rp2: Mark gc_heap NOLOAD for faster boot.
Create a new linker section .unitialized_bss for bss that does not need zero-initialising. Move gc_heap to this section, which saves ~30ms from rising edge of RESET to setting a pin HIGH in MicroPython. Zero fill happens in Pico SDK crt0.S before ROSC is configured. It's very, very slow. Signed-off-by: Phil Howard <phil@gadgetoid.com>
-rw-r--r--ports/rp2/main.c2
-rw-r--r--ports/rp2/memmap_mp.ld6
2 files changed, 7 insertions, 1 deletions
diff --git a/ports/rp2/main.c b/ports/rp2/main.c
index d976464de..1062236a3 100644
--- a/ports/rp2/main.c
+++ b/ports/rp2/main.c
@@ -66,7 +66,7 @@
#endif
extern uint8_t __StackTop, __StackBottom;
-static char gc_heap[MICROPY_GC_HEAP_SIZE];
+__attribute__((section(".uninitialized_bss"))) static char gc_heap[MICROPY_GC_HEAP_SIZE];
// Embed version info in the binary in machine readable form
bi_decl(bi_program_version_string(MICROPY_GIT_TAG));
diff --git a/ports/rp2/memmap_mp.ld b/ports/rp2/memmap_mp.ld
index 0dc96743e..82f9cb01c 100644
--- a/ports/rp2/memmap_mp.ld
+++ b/ports/rp2/memmap_mp.ld
@@ -180,6 +180,12 @@ SECTIONS
*(.uninitialized_data*)
} > RAM
+ /* bss without zero init on startup */
+ .uninitialized_bss (NOLOAD): {
+ . = ALIGN(4);
+ *(.uninitialized_bss*)
+ } > RAM
+
/* Start and end symbols must be word-aligned */
.scratch_x : {
__scratch_x_start__ = .;