summaryrefslogtreecommitdiffstatshomepage
path: root/py/gc.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-01-24 14:48:06 -0800
committerDamien George <damien.p.george@gmail.com>2014-01-24 14:48:06 -0800
commitbaba08bff913963cd10a227ab765b31cdcc96ab0 (patch)
tree59fa570428be3c1e7dd06da30bc0ed1ad5b940b9 /py/gc.c
parent41d02b654e5c844f85fbb79283eaebf35af60fbb (diff)
parenta215b09c0dc29b82161092e92ea2e5e004d79468 (diff)
downloadmicropython-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.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/py/gc.c b/py/gc.c
index 70b071ebc8..73e2436655 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;