zephyr/main: Collect registers during a MicroPython GC scan.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George 2024-08-19 14:38:59 +10:00
parent 7009c75f23
commit fc630e70c4
2 changed files with 3 additions and 4 deletions

View File

@ -54,6 +54,7 @@ list(TRANSFORM MICROPY_SOURCE_PORT PREPEND ${MICROPY_PORT_DIR}/)
set(MICROPY_SOURCE_SHARED
libc/printf.c
readline/readline.c
runtime/gchelper_generic.c
runtime/interrupt_char.c
runtime/mpirq.c
runtime/pyexec.c

View File

@ -48,6 +48,7 @@
#include "py/gc.h"
#include "py/mphal.h"
#include "py/stackctrl.h"
#include "shared/runtime/gchelper.h"
#include "shared/runtime/pyexec.h"
#include "shared/readline/readline.h"
#include "extmod/modbluetooth.h"
@ -180,11 +181,8 @@ soft_reset:
}
void gc_collect(void) {
// WARNING: This gc_collect implementation doesn't try to get root
// pointers from CPU registers, and thus may function incorrectly.
void *dummy;
gc_collect_start();
gc_collect_root(&dummy, ((mp_uint_t)MP_STATE_THREAD(stack_top) - (mp_uint_t)&dummy) / sizeof(mp_uint_t));
gc_helper_collect_regs_and_stack();
#if MICROPY_PY_THREAD
mp_thread_gc_others();
#endif