diff options
| author | iabdalkader <i.abdalkader@gmail.com> | 2025-03-27 13:47:31 +0100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2025-06-26 12:10:04 +1000 |
| commit | cbe50635e85e7b7966d51fe65626304bd04f4032 (patch) | |
| tree | cb712877ad13dcda149fb8371bc6372ae88a0030 | |
| parent | 0815b454796c198eeed90c0bb5645b8d0e3b9b38 (diff) | |
stm32/main: Add support for additional GC blocks.
Add support for defining additional GC blocks via linker scripts. A board
would need to define `_gc_blocks_table_start` and `_gc_blocks_table_end`
and within that region have pairs of (address, length) for each GC block
to add.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
| -rw-r--r-- | ports/stm32/main.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/ports/stm32/main.c b/ports/stm32/main.c index e8395013b..5e114f562 100644 --- a/ports/stm32/main.c +++ b/ports/stm32/main.c @@ -521,6 +521,23 @@ soft_reset: // GC init gc_init(MICROPY_HEAP_START, MICROPY_HEAP_END); + // Add additional GC blocks (if enabled). + #if MICROPY_GC_SPLIT_HEAP + typedef struct { + uint8_t *addr; + uint32_t size; + } gc_blocks_table_t; + + extern const gc_blocks_table_t _gc_blocks_table_start; + extern const gc_blocks_table_t _gc_blocks_table_end; + + for (gc_blocks_table_t const *block = &_gc_blocks_table_start; block < &_gc_blocks_table_end; block++) { + if (block->size) { + gc_add(block->addr, block->addr + block->size); + } + } + #endif + #if MICROPY_ENABLE_PYSTACK static mp_obj_t pystack[384]; mp_pystack_init(pystack, &pystack[384]); |
