diff options
| author | Damien <damien.p.george@gmail.com> | 2013-10-21 23:46:04 +0100 |
|---|---|---|
| committer | Damien <damien.p.george@gmail.com> | 2013-10-21 23:46:04 +0100 |
| commit | 3f69aca2e23c9479320b9de545eae1d3d8983d35 (patch) | |
| tree | 169c0a479165ba8e18d7b20ccdcf472c7a556576 /stm/main.c | |
| parent | dcced92c265ba67d467251cf8cacac427ec5951c (diff) | |
Make stm use garbage collector.
Diffstat (limited to 'stm/main.c')
| -rw-r--r-- | stm/main.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/stm/main.c b/stm/main.c index 9f7bda8e6..d49c2398b 100644 --- a/stm/main.c +++ b/stm/main.c @@ -6,6 +6,8 @@ #include "std.h" #include "misc.h" +#include "mpyconfig.h" +#include "gc.h" #include "systick.h" #include "led.h" #include "lcd.h" @@ -14,6 +16,8 @@ #include "usb.h" #include "ff.h" +extern uint32_t _heap_start; + static void impl02_c_version() { int x = 0; while (x < 400) { @@ -163,7 +167,6 @@ static void board_info() { extern void *_ebss; extern void *_estack; extern void *_etext; - extern void *_heap_start; printf("_sidata=%p\n", &_sidata); printf("_sdata=%p\n", &_sdata); printf("_edata=%p\n", &_edata); @@ -263,6 +266,14 @@ void do_repl() { } } +void gc_collect() { + gc_collect_start(); + gc_collect_root((void**)0x20000000, (((uint32_t)&_heap_start) - 0x20000000) / 4); + gc_collect_root((void**)(0x20000000 + 0x18000), (0x20000 - 0x18000) / 4); + // TODO registers + gc_collect_end(); +} + int main() { // TODO disable JTAG @@ -284,6 +295,10 @@ int main() { lcd_init(); storage_init(); + // GC init + gc_init(&_heap_start, (void*)(0x20000000 + 0x18000)); + sys_tick_delay_ms(2000); + // Python init qstr_init(); rt_init(); |
