d2a3cd7ac4
Obtaining the stack-top via a few function calls may yield a pointer which is too deep within the stack. So require the user to obtain it from a higher level (or via some other means). Fixes issue #11781. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
52 lines
1.4 KiB
C
52 lines
1.4 KiB
C
/* This file is part of the MicroPython project, http://micropython.org/
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2022-2023 Damien P. George
|
|
*/
|
|
|
|
#include "port/micropython_embed.h"
|
|
|
|
// This is example 1 script, which will be compiled and executed.
|
|
static const char *example_1 =
|
|
"print('hello world!', list(x + 1 for x in range(10)), end='eol\\n')";
|
|
|
|
// This is example 2 script, which will be compiled and executed.
|
|
static const char *example_2 =
|
|
"for i in range(10):\n"
|
|
" print('iter {:08}'.format(i))\n"
|
|
"\n"
|
|
"try:\n"
|
|
" 1//0\n"
|
|
"except Exception as er:\n"
|
|
" print('caught exception', repr(er))\n"
|
|
"\n"
|
|
"import gc\n"
|
|
"print('run GC collect')\n"
|
|
"gc.collect()\n"
|
|
"\n"
|
|
"print('finish')\n"
|
|
;
|
|
|
|
// This array is the MicroPython GC heap.
|
|
static char heap[8 * 1024];
|
|
|
|
int main() {
|
|
// Initialise MicroPython.
|
|
//
|
|
// Note: &stack_top below should be good enough for many cases.
|
|
// However, depending on environment, there might be more appropriate
|
|
// ways to get the stack top value.
|
|
// eg. pthread_get_stackaddr_np, pthread_getattr_np,
|
|
// __builtin_frame_address/__builtin_stack_address, etc.
|
|
int stack_top;
|
|
mp_embed_init(&heap[0], sizeof(heap), &stack_top);
|
|
|
|
// Run the example scripts (they will be compiled first).
|
|
mp_embed_exec_str(example_1);
|
|
mp_embed_exec_str(example_2);
|
|
|
|
// Deinitialise MicroPython.
|
|
mp_embed_deinit();
|
|
|
|
return 0;
|
|
}
|