zephyr/main: Collect registers during a MicroPython GC scan.
Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
@@ -54,6 +54,7 @@ list(TRANSFORM MICROPY_SOURCE_PORT PREPEND ${MICROPY_PORT_DIR}/)
|
|||||||
set(MICROPY_SOURCE_SHARED
|
set(MICROPY_SOURCE_SHARED
|
||||||
libc/printf.c
|
libc/printf.c
|
||||||
readline/readline.c
|
readline/readline.c
|
||||||
|
runtime/gchelper_generic.c
|
||||||
runtime/interrupt_char.c
|
runtime/interrupt_char.c
|
||||||
runtime/mpirq.c
|
runtime/mpirq.c
|
||||||
runtime/pyexec.c
|
runtime/pyexec.c
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
#include "py/gc.h"
|
#include "py/gc.h"
|
||||||
#include "py/mphal.h"
|
#include "py/mphal.h"
|
||||||
#include "py/stackctrl.h"
|
#include "py/stackctrl.h"
|
||||||
|
#include "shared/runtime/gchelper.h"
|
||||||
#include "shared/runtime/pyexec.h"
|
#include "shared/runtime/pyexec.h"
|
||||||
#include "shared/readline/readline.h"
|
#include "shared/readline/readline.h"
|
||||||
#include "extmod/modbluetooth.h"
|
#include "extmod/modbluetooth.h"
|
||||||
@@ -180,11 +181,8 @@ soft_reset:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gc_collect(void) {
|
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_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
|
#if MICROPY_PY_THREAD
|
||||||
mp_thread_gc_others();
|
mp_thread_gc_others();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user