diff options
| author | Phil Howard <phil@gadgetoid.com> | 2022-08-05 09:43:22 +0100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2022-08-11 14:16:29 +1000 |
| commit | 71f6eb5ac953637e815ec9c5cbc785b4027a8759 (patch) | |
| tree | ea927aae3434f076319a2a0dd8316a70fb1fe457 | |
| parent | 6e51dbd95aa051533e2618e2df8f51cb0f06cfed (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.c | 2 | ||||
| -rw-r--r-- | ports/rp2/memmap_mp.ld | 6 |
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__ = .; |
