Skip to content

Commit

Permalink
Updated MicroPython core
Browse files Browse the repository at this point in the history
Some improvements in garbage collector

Added MicroPython system options in 'menuconfig'

Updated some frozen modules
  upip, urequests, logging
  • Loading branch information
loboris committed May 16, 2018
1 parent d7f5a18 commit f724c16
Show file tree
Hide file tree
Showing 54 changed files with 368 additions and 268 deletions.
2 changes: 2 additions & 0 deletions MicroPython_BUILD/BUILD.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@

#=======================
TOOLS_VER=ver20180515.id
BUILD_VER=ver20180516.id
#=======================

# -----------------------------
Expand Down Expand Up @@ -94,6 +95,7 @@ if [ $? -ne 0 ]; then
exit 1
fi

# Goto base repository directory
cd ../

# -----------------------------------
Expand Down
25 changes: 22 additions & 3 deletions MicroPython_BUILD/build_func.sh
Original file line number Diff line number Diff line change
Expand Up @@ -319,9 +319,9 @@ check_OS() {
# =================================================
#--------------------
check_Environment() {
# ----------------------------------------
# Remove directories from previous version
# ----------------------------------------
# --------------------------------------------------
# Remove directories from early MicroPython versions
# --------------------------------------------------
if [ -d "esp-idf" ]; then
rm -rf esp-idf/ > /dev/null 2>&1
rmdir esp-idf > /dev/null 2>&1
Expand Down Expand Up @@ -371,6 +371,9 @@ check_Environment() {
rm -f *.id > /dev/null 2>&1
touch ${TOOLS_VER}
echo "toolchains & esp-idf version" > ${TOOLS_VER}
rm -f ${BUILD_BASE_DIR}/*.id > /dev/null 2>&1
touch ${BUILD_BASE_DIR}/${BUILD_VER}
echo "Build ID, do not delete this file" > ${BUILD_BASE_DIR}/${BUILD_VER}
# remove executables
rm -f ${BUILD_BASE_DIR}/components/mpy_cross_build/mpy-cross/mpy-cross > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mpy_cross_build/mpy-cross/mpy-cross.exe > /dev/null 2>&1
Expand All @@ -388,6 +391,22 @@ check_Environment() {
rm -f ${BUILD_BASE_DIR}/sdkconfig.old > /dev/null 2>&1
rm -rf ${BUILD_BASE_DIR}/build/ > /dev/null 2>&1
rmdir ${BUILD_BASE_DIR}/build > /dev/null 2>&1
else
# -----------------------
# Check the build version
# -----------------------
if [ ! -f "${BUILD_BASE_DIR}/${BUILD_VER}" ]; then
echo "Build updated, running menuconfig is needed..."
rm -f ${BUILD_BASE_DIR}/*.id > /dev/null 2>&1
touch ${BUILD_BASE_DIR}/${BUILD_VER}
echo "Build ID, do not delete this file" > ${BUILD_BASE_DIR}/${BUILD_VER}
# remove build directory and configs
cp -f ${BUILD_BASE_DIR}/sdkconfig ${BUILD_BASE_DIR}/_sdkconfig.saved > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/sdkconfig > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/sdkconfig.old > /dev/null 2>&1
rm -rf ${BUILD_BASE_DIR}/build/ > /dev/null 2>&1
rmdir ${BUILD_BASE_DIR}/build > /dev/null 2>&1
fi
fi

if [ ! -d "esp-idf" ]; then
Expand Down
35 changes: 21 additions & 14 deletions MicroPython_BUILD/components/micropython/Kconfig.projbuild
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,13 @@ menu "MicroPython"
Running without UNICODE support may solve some issues,
also the string operations may be faster

config MICROPY_ENABLE_FINALISER
bool "Enable finalizer"
default y
help
Whether to enable finalisers in the garbage collector
If enabled, the __del__ methods of the objects will be called during garbage collect

config MICROPY_GC_COLLECT_RETVAL
bool "gc.collect returns value"
default n
Expand Down Expand Up @@ -309,6 +316,20 @@ menu "MicroPython"
help
Include GSM module and PPPoS support into build

config MICROPY_USE_GPS
bool "Use GPS module"
default y
help
Include GPS module into build

config MICROPY_GPS_SERVICE_STACK
int "GPS service stack size"
depends on MICROPY_USE_GPS
default 3072
range 3072 6144
help
Set the stack size of GPS service task

config MICROPY_USE_ETHERNET
bool "Use Ethernet module"
default n
Expand Down Expand Up @@ -337,20 +358,6 @@ menu "MicroPython"
Include CURL module into build
Using CURL module will add ~230 KB to your flash code size

config MICROPY_USE_GPS
bool "Use GPS module"
default y
help
Include GPS module into build

config MICROPY_GPS_SERVICE_STACK
int "GPS service stack size"
depends on MICROPY_USE_GPS
default 3072
range 3072 6144
help
Set the stack size of GPS service task

config MICROPY_USE_CURL_TLS
bool "Enable TLS in Curl module"
depends on MICROPY_USE_CURL
Expand Down
47 changes: 4 additions & 43 deletions MicroPython_BUILD/components/micropython/esp32/gccollect.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
#include "soc/cpu.h"
#include "xtensa/hal.h"

/*
static int n_marked;

static void gc_collect_inner(int level, int flag)
{
if (level < XCHAL_NUM_AREGS / 8) {
Expand All @@ -49,34 +50,23 @@ static void gc_collect_inner(int level, int flag)
}

if (level == XCHAL_NUM_AREGS / 8) {
#if MICROPY_PY_GC_COLLECT_RETVAL
int n_marked = MP_STATE_MEM(gc_marked);
#endif
n_marked = MP_STATE_MEM(gc_marked);

// get the stack pointer
volatile uint32_t sp = (uint32_t)get_sp();
gc_collect_root((void**)sp, ((mp_uint_t)MP_STATE_THREAD(stack_top) - sp) / sizeof(uint32_t));
//volatile uint32_t sp = mp_thread_get_sp();
//gc_collect_root(sp, ((mp_uint_t)MP_STATE_THREAD(stack_top) - sp) / sizeof(uint32_t));

#if MICROPY_PY_GC_COLLECT_RETVAL
if ((flag) && ((MP_STATE_MEM(gc_marked) - n_marked) > 0)) printf("gc_collect: marked on stack: %d (%p - %p)\n", MP_STATE_MEM(gc_marked) - n_marked, (void *)sp, (void *)MP_STATE_THREAD(stack_top));
#endif
return;
}

// Trace root pointers from other threads
#if MICROPY_PY_GC_COLLECT_RETVAL
int n_marked = MP_STATE_MEM(gc_marked);
#endif

mp_thread_gc_others(flag);

#if MICROPY_PY_GC_COLLECT_RETVAL
if ((flag) && ((MP_STATE_MEM(gc_marked) - n_marked) > 0)) printf("gc_collect: marked on others: %d\n", MP_STATE_MEM(gc_marked) - n_marked);
#endif
}
*/

//-----------------------
void gc_collect(int flag)
Expand All @@ -91,53 +81,24 @@ void gc_collect(int flag)

// Trace root pointers.
gc_collect_start();
#if MICROPY_PY_GC_COLLECT_RETVAL
if (flag) printf("gc_collect: marked on START: %d (th='%s')\n", MP_STATE_MEM(gc_marked), th_name);
#endif

// ---- Collect inner -------------------------------------------------------
//gc_collect_inner(0, flag);
#if MICROPY_PY_GC_COLLECT_RETVAL
int n_marked = MP_STATE_MEM(gc_marked);
#endif

// get the stack pointer
volatile uint32_t sp = (uint32_t)get_sp();
gc_collect_root((void**)sp, ((mp_uint_t)MP_STATE_THREAD(stack_top) - sp) / sizeof(uint32_t));

#if MICROPY_PY_GC_COLLECT_RETVAL
if ((flag) && ((MP_STATE_MEM(gc_marked) - n_marked) > 0)) printf("gc_collect: marked on stack: %d (%p - %p)\n", MP_STATE_MEM(gc_marked) - n_marked, (void *)sp, (void *)MP_STATE_THREAD(stack_top));
#endif

// Trace root pointers from other threads
#if MICROPY_PY_GC_COLLECT_RETVAL
n_marked = MP_STATE_MEM(gc_marked);
#endif

mp_thread_gc_others(flag);

#if MICROPY_PY_GC_COLLECT_RETVAL
if ((flag) && ((MP_STATE_MEM(gc_marked) - n_marked) > 0)) printf("gc_collect: marked on others: %d\n", MP_STATE_MEM(gc_marked) - n_marked);
#endif
// ---- Collect inner -------------------------------------------------------
gc_collect_inner(0, flag);

if (flag > 1) {
mp_thread_mutex_unlock(&(mp_state_ctx.mem.gc_mutex));
gc_dump_alloc_table();
mp_thread_mutex_lock(&(mp_state_ctx.mem.gc_mutex), 1);
}

#if MICROPY_PY_GC_COLLECT_RETVAL
n_marked = MP_STATE_MEM(gc_marked);
#endif

gc_collect_end();

#if MICROPY_PY_GC_COLLECT_RETVAL
if (flag) {
if ((MP_STATE_MEM(gc_marked) - n_marked) > 0) printf("gc_collect: marked on end: %d\n", MP_STATE_MEM(gc_marked) - n_marked);
printf("gc_collect: marked total: %d; collected: %d\n", MP_STATE_MEM(gc_marked), MP_STATE_MEM(gc_collected));
}
#endif
if (flag > 1) gc_dump_alloc_table();
}
81 changes: 41 additions & 40 deletions MicroPython_BUILD/components/micropython/esp32/modsocket.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include "py/mperrno.h"
#include "lib/netutils/netutils.h"
#include "tcpip_adapter.h"
#include "modnetwork.h"

#include "lwip/sockets.h"
#include "lwip/netdb.h"
Expand Down Expand Up @@ -622,29 +623,29 @@ STATIC mp_uint_t socket_stream_ioctl(mp_obj_t self_in, mp_uint_t request, uintpt
return MP_STREAM_ERROR;
}

STATIC const mp_map_elem_t socket_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&mp_stream_close_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&mp_stream_close_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_bind), (mp_obj_t)&socket_bind_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_listen), (mp_obj_t)&socket_listen_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_accept), (mp_obj_t)&socket_accept_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_accepted), (mp_obj_t)&socket_accepted_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_connect), (mp_obj_t)&socket_connect_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_send), (mp_obj_t)&socket_send_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_sendall), (mp_obj_t)&socket_sendall_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_sendto), (mp_obj_t)&socket_sendto_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_recv), (mp_obj_t)&socket_recv_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_recvfrom), (mp_obj_t)&socket_recvfrom_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_setsockopt), (mp_obj_t)&socket_setsockopt_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_settimeout), (mp_obj_t)&socket_settimeout_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_setblocking), (mp_obj_t)&socket_setblocking_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_makefile), (mp_obj_t)&socket_makefile_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_fileno), (mp_obj_t)&socket_fileno_obj },

{ MP_OBJ_NEW_QSTR(MP_QSTR_read), (mp_obj_t)&mp_stream_read_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_readinto), (mp_obj_t)&mp_stream_readinto_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_readline), (mp_obj_t)&mp_stream_unbuffered_readline_obj},
{ MP_OBJ_NEW_QSTR(MP_QSTR_write), (mp_obj_t)&mp_stream_write_obj },
STATIC const mp_rom_map_elem_t socket_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mp_stream_close_obj) },
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&mp_stream_close_obj) },
{ MP_ROM_QSTR(MP_QSTR_bind), MP_ROM_PTR(&socket_bind_obj) },
{ MP_ROM_QSTR(MP_QSTR_listen), MP_ROM_PTR(&socket_listen_obj) },
{ MP_ROM_QSTR(MP_QSTR_accept), MP_ROM_PTR(&socket_accept_obj) },
{ MP_ROM_QSTR(MP_QSTR_accepted), MP_ROM_PTR(&socket_accepted_obj) },
{ MP_ROM_QSTR(MP_QSTR_connect), MP_ROM_PTR(&socket_connect_obj) },
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&socket_send_obj) },
{ MP_ROM_QSTR(MP_QSTR_sendall), MP_ROM_PTR(&socket_sendall_obj) },
{ MP_ROM_QSTR(MP_QSTR_sendto), MP_ROM_PTR(&socket_sendto_obj) },
{ MP_ROM_QSTR(MP_QSTR_recv), MP_ROM_PTR(&socket_recv_obj) },
{ MP_ROM_QSTR(MP_QSTR_recvfrom), MP_ROM_PTR(&socket_recvfrom_obj) },
{ MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&socket_setsockopt_obj) },
{ MP_ROM_QSTR(MP_QSTR_settimeout), MP_ROM_PTR(&socket_settimeout_obj) },
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socket_setblocking_obj) },
{ MP_ROM_QSTR(MP_QSTR_makefile), MP_ROM_PTR(&socket_makefile_obj) },
{ MP_ROM_QSTR(MP_QSTR_fileno), MP_ROM_PTR(&socket_fileno_obj) },

{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&mp_stream_read_obj) },
{ MP_ROM_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&mp_stream_readinto_obj) },
{ MP_ROM_QSTR(MP_QSTR_readline), MP_ROM_PTR(&mp_stream_unbuffered_readline_obj) },
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) },
};
STATIC MP_DEFINE_CONST_DICT(socket_locals_dict, socket_locals_dict_table);

Expand Down Expand Up @@ -735,23 +736,23 @@ STATIC mp_obj_t esp_socket_initialize() {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_socket_initialize_obj, esp_socket_initialize);

STATIC const mp_map_elem_t mp_module_socket_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_usocket) },
{ MP_OBJ_NEW_QSTR(MP_QSTR___init__), (mp_obj_t)&esp_socket_initialize_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_socket), (mp_obj_t)&get_socket_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_getaddrinfo), (mp_obj_t)&esp_socket_getaddrinfo_obj },

{ MP_OBJ_NEW_QSTR(MP_QSTR_AF_INET), MP_OBJ_NEW_SMALL_INT(AF_INET) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_AF_INET6), MP_OBJ_NEW_SMALL_INT(AF_INET6) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SOCK_STREAM), MP_OBJ_NEW_SMALL_INT(SOCK_STREAM) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SOCK_DGRAM), MP_OBJ_NEW_SMALL_INT(SOCK_DGRAM) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SOCK_RAW), MP_OBJ_NEW_SMALL_INT(SOCK_RAW) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_IPPROTO_TCP), MP_OBJ_NEW_SMALL_INT(IPPROTO_TCP) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_IPPROTO_UDP), MP_OBJ_NEW_SMALL_INT(IPPROTO_UDP) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_IPPROTO_IP), MP_OBJ_NEW_SMALL_INT(IPPROTO_IP) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SOL_SOCKET), MP_OBJ_NEW_SMALL_INT(SOL_SOCKET) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SO_REUSEADDR), MP_OBJ_NEW_SMALL_INT(SO_REUSEADDR) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_IP_ADD_MEMBERSHIP), MP_OBJ_NEW_SMALL_INT(IP_ADD_MEMBERSHIP) },
STATIC const mp_rom_map_elem_t mp_module_socket_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },
{ MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&esp_socket_initialize_obj) },
{ MP_ROM_QSTR(MP_QSTR_socket), MP_ROM_PTR(&get_socket_obj) },
{ MP_ROM_QSTR(MP_QSTR_getaddrinfo), MP_ROM_PTR(&esp_socket_getaddrinfo_obj) },

{ MP_ROM_QSTR(MP_QSTR_AF_INET), MP_ROM_INT(AF_INET) },
{ MP_ROM_QSTR(MP_QSTR_AF_INET6), MP_ROM_INT(AF_INET6) },
{ MP_ROM_QSTR(MP_QSTR_SOCK_STREAM), MP_ROM_INT(SOCK_STREAM) },
{ MP_ROM_QSTR(MP_QSTR_SOCK_DGRAM), MP_ROM_INT(SOCK_DGRAM) },
{ MP_ROM_QSTR(MP_QSTR_SOCK_RAW), MP_ROM_INT(SOCK_RAW) },
{ MP_ROM_QSTR(MP_QSTR_IPPROTO_TCP), MP_ROM_INT(IPPROTO_TCP) },
{ MP_ROM_QSTR(MP_QSTR_IPPROTO_UDP), MP_ROM_INT(IPPROTO_UDP) },
{ MP_ROM_QSTR(MP_QSTR_IPPROTO_IP), MP_ROM_INT(IPPROTO_IP) },
{ MP_ROM_QSTR(MP_QSTR_SOL_SOCKET), MP_ROM_INT(SOL_SOCKET) },
{ MP_ROM_QSTR(MP_QSTR_SO_REUSEADDR), MP_ROM_INT(SO_REUSEADDR) },
{ MP_ROM_QSTR(MP_QSTR_IP_ADD_MEMBERSHIP), MP_ROM_INT(IP_ADD_MEMBERSHIP) },
};

STATIC MP_DEFINE_CONST_DICT(mp_module_socket_globals, mp_module_socket_globals_table);
Expand Down
29 changes: 24 additions & 5 deletions MicroPython_BUILD/components/micropython/esp32/modules/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,30 @@

class Logger:

level = NOTSET

def __init__(self, name):
self.level = NOTSET
self.name = name

def _level_str(self, level):
if level in _level_dict:
return _level_dict[level]
return "LVL" + str(level)
l = _level_dict.get(level)
if l is not None:
return l
return "LVL%s" % level

def setLevel(self, level):
self.level = level

def isEnabledFor(self, level):
return level >= (self.level or _level)

def log(self, level, msg, *args):
if level >= (self.level or _level):
print(("%s:%s:" + msg) % ((self._level_str(level), self.name) + args), file=_stream)
_stream.write("%s:%s:" % (self._level_str(level), self.name))
if not args:
print(msg, file=_stream)
else:
print(msg % args, file=_stream)

def debug(self, msg, *args):
self.log(DEBUG, msg, *args)
Expand All @@ -47,6 +59,13 @@ def error(self, msg, *args):
def critical(self, msg, *args):
self.log(CRITICAL, msg, *args)

def exc(self, e, msg, *args):
self.log(ERROR, msg, *args)
sys.print_exception(e, _stream)

def exception(self, msg, *args):
self.exc(sys.exc_info()[1], msg, *args)


_level = INFO
_loggers = {}
Expand Down
Loading

0 comments on commit f724c16

Please sign in to comment.