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>
This commit is contained in:
Phil Howard 2022-08-05 09:43:22 +01:00 committed by Damien George
parent 6e51dbd95a
commit 71f6eb5ac9
2 changed files with 7 additions and 1 deletions

View File

@ -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));

View File

@ -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__ = .;