2626
2727#include <stdio.h>
2828
29+ #include "py/mpstate.h"
2930#include "py/builtin.h"
3031#include "py/stackctrl.h"
3132#include "py/gc.h"
3233
3334// Various builtins specific to MicroPython runtime,
3435// living in micropython module
3536
37+ #if MICROPY_PY_MICROPYTHON_MEM_INFO
38+
3639#if MICROPY_MEM_STATS
3740STATIC mp_obj_t mp_micropython_mem_total () {
3841 return MP_OBJ_NEW_SMALL_INT (m_get_total_bytes_allocated ());
@@ -48,11 +51,18 @@ STATIC mp_obj_t mp_micropython_mem_peak() {
4851 return MP_OBJ_NEW_SMALL_INT (m_get_peak_bytes_allocated ());
4952}
5053STATIC MP_DEFINE_CONST_FUN_OBJ_0 (mp_micropython_mem_peak_obj , mp_micropython_mem_peak );
54+ #endif
5155
5256mp_obj_t mp_micropython_mem_info (mp_uint_t n_args , const mp_obj_t * args ) {
57+ #if MICROPY_MEM_STATS
5358 printf ("mem: total=" UINT_FMT ", current=" UINT_FMT ", peak=" UINT_FMT "\n" ,
5459 m_get_total_bytes_allocated (), m_get_current_bytes_allocated (), m_get_peak_bytes_allocated ());
60+ #endif
61+ #if MICROPY_STACK_CHECK
62+ printf ("stack: " UINT_FMT " out of " INT_FMT "\n" , mp_stack_usage (), MP_STATE_VM (stack_limit ) - mp_stack_usage ());
63+ #else
5564 printf ("stack: " UINT_FMT "\n" , mp_stack_usage ());
65+ #endif
5666#if MICROPY_ENABLE_GC
5767 gc_dump_info ();
5868 if (n_args == 1 ) {
@@ -72,18 +82,21 @@ STATIC mp_obj_t qstr_info(void) {
7282 return mp_const_none ;
7383}
7484STATIC MP_DEFINE_CONST_FUN_OBJ_0 (mp_micropython_qstr_info_obj , qstr_info );
75- #endif
85+
86+ #endif // MICROPY_PY_MICROPYTHON_MEM_INFO
7687
7788#if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF && (MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE == 0 )
7889STATIC MP_DEFINE_CONST_FUN_OBJ_1 (mp_alloc_emergency_exception_buf_obj , mp_alloc_emergency_exception_buf );
7990#endif
8091
8192STATIC const mp_map_elem_t mp_module_micropython_globals_table [] = {
8293 { MP_OBJ_NEW_QSTR (MP_QSTR___name__ ), MP_OBJ_NEW_QSTR (MP_QSTR_micropython ) },
94+ #if MICROPY_PY_MICROPYTHON_MEM_INFO
8395#if MICROPY_MEM_STATS
8496 { MP_OBJ_NEW_QSTR (MP_QSTR_mem_total ), (mp_obj_t )& mp_micropython_mem_total_obj },
8597 { MP_OBJ_NEW_QSTR (MP_QSTR_mem_current ), (mp_obj_t )& mp_micropython_mem_current_obj },
8698 { MP_OBJ_NEW_QSTR (MP_QSTR_mem_peak ), (mp_obj_t )& mp_micropython_mem_peak_obj },
99+ #endif
87100 { MP_OBJ_NEW_QSTR (MP_QSTR_mem_info ), (mp_obj_t )& mp_micropython_mem_info_obj },
88101 { MP_OBJ_NEW_QSTR (MP_QSTR_qstr_info ), (mp_obj_t )& mp_micropython_qstr_info_obj },
89102#endif
0 commit comments