From a215b09c0dc29b82161092e92ea2e5e004d79468 Mon Sep 17 00:00:00 2001 From: mux Date: Fri, 24 Jan 2014 21:27:55 +0200 Subject: Move gc_collect to py/gc.c * Move gc_collect from main to py/gc.c * Define GC's memory boundaries in linker script * Issue #220 --- py/gc.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'py') diff --git a/py/gc.c b/py/gc.c index 70b071ebc..73e243665 100644 --- a/py/gc.c +++ b/py/gc.c @@ -187,6 +187,22 @@ void gc_collect_end(void) { gc_sweep(); } +extern void gc_helper_get_regs_and_clean_stack(machine_uint_t *regs, machine_uint_t heap_end); + +void gc_collect(void) { + extern char _ram_start; /* defined by linker script */ + extern char _ram_end; /* defined by linker script */ + extern char _heap_start; /* defined by linker script */ + extern char _heap_end; /* defined by linker script */ + + gc_collect_start(); + gc_collect_root((void**)&_ram_start, (&_heap_start - &_ram_start) / 4); + machine_uint_t regs[10]; + gc_helper_get_regs_and_clean_stack(regs, (uint32_t) &_heap_end); + gc_collect_root((void**)&_heap_end, (&_ram_end - &_heap_end) / 4); // will trace regs since they now live in this function on the stack + gc_collect_end(); +} + void gc_info(gc_info_t *info) { info->total = (gc_pool_end - gc_pool_start) * sizeof(machine_uint_t); info->used = 0; -- cgit v1.2.3