zephyr/main: Use mp_stack API instead of local pointer for stack top.

The MP_STATE_THREAD(stack_top) is always available so use it instead of
creating a separate variable.  This also allows gc_collect() to be used as
an independent function, without real_main() being called.
pull/1/head
Kamil Klimek 2019-10-25 17:28:29 +02:00 committed by Damien George
parent a8138b75b1
commit 53f3cbc2c4
1 changed files with 2 additions and 5 deletions

View File

@ -48,7 +48,6 @@
#include TEST #include TEST
#endif #endif
static char *stack_top;
static char heap[MICROPY_HEAP_SIZE]; static char heap[MICROPY_HEAP_SIZE];
void init_zephyr(void) { void init_zephyr(void) {
@ -79,9 +78,7 @@ void init_zephyr(void) {
} }
int real_main(void) { int real_main(void) {
int stack_dummy; mp_stack_ctrl_init();
stack_top = (char*)&stack_dummy;
mp_stack_set_top(stack_top);
// Make MicroPython's stack limit somewhat smaller than full stack available // Make MicroPython's stack limit somewhat smaller than full stack available
mp_stack_set_limit(CONFIG_MAIN_STACK_SIZE - 512); mp_stack_set_limit(CONFIG_MAIN_STACK_SIZE - 512);
@ -130,7 +127,7 @@ void gc_collect(void) {
// pointers from CPU registers, and thus may function incorrectly. // pointers from CPU registers, and thus may function incorrectly.
void *dummy; void *dummy;
gc_collect_start(); gc_collect_start();
gc_collect_root(&dummy, ((mp_uint_t)stack_top - (mp_uint_t)&dummy) / sizeof(mp_uint_t)); gc_collect_root(&dummy, ((mp_uint_t)MP_STATE_THREAD(stack_top) - (mp_uint_t)&dummy) / sizeof(mp_uint_t));
gc_collect_end(); gc_collect_end();
//gc_dump_info(); //gc_dump_info();
} }