diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-24 14:48:06 -0800 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-24 14:48:06 -0800 |
commit | baba08bff913963cd10a227ab765b31cdcc96ab0 (patch) | |
tree | 59fa570428be3c1e7dd06da30bc0ed1ad5b940b9 /py/gc.c | |
parent | 41d02b654e5c844f85fbb79283eaebf35af60fbb (diff) | |
parent | a215b09c0dc29b82161092e92ea2e5e004d79468 (diff) | |
download | micropython-baba08bff913963cd10a227ab765b31cdcc96ab0.tar.gz micropython-baba08bff913963cd10a227ab765b31cdcc96ab0.zip |
Merge pull request #218 from iabdalkader/master
Move file obj to separate module
Diffstat (limited to 'py/gc.c')
-rw-r--r-- | py/gc.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -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; |