Skip to content
LwIP support, and preliminary implementation of persistent bytecode

This release includes the lwip network stack module with slip support.
There is a preliminary implementation of persistent bytecode which allows
to save compiled bytecode to a .mpy file, to be loaded at a later time by
another MicroPython instance.  Double precision floating-point formatting
is now provided by the core, and the bundled upip module is no longer
dependent on FFI.  stmhal port has improved RTC startup.  There are many
bug fixes and improvements to the documentation.

py core:
- makeversionhdr.py works with backslashes in paths
- in inline asm, vldr and vstr offsets now in bytes not words
- modstruct: support repetition counters for all types, not just string
- add py/mphal.h and use it in all ports
- adjust object repr C (30-bit stuffed float) to reduce code size
- clear finalizer flag when calling gc_free
- objint_longlong: instead of assert, throw OverflowError
- asmthumb: allow to compile with -Wsign-compare and -Wunused-parameter
- emitinlinethumb: allow to compile with -Wsign-compare
- reorganise bytecode layout so it's more structured, easier to edit
- put all bytecode state (arg count, etc) in bytecode
- add constant table to bytecode
- add MICROPY_PERSISTENT_CODE so code can persist beyond the runtime
- add MICROPY_PERSISTENT_CODE_LOAD/SAVE to load/save bytecode
- allow to import compiled bytecode files
- modmath: make expm1() be in MICROPY_PY_MATH_SPECIAL_FUNCTIONS
- compile: don't unnecessarily save state when compiling param list
- implement default and star args for lambdas
- modmath: make log2, log10 and hyperbolic funcs be SPECIAL_FUNCTIONS
- in mp_state_ctx_t, make mp_pending_exception volatile
- store key/value in earliest possible slot in hash table
- add Cygwin support to py/nlrx86.S
- add mp_compile_to_raw_code() to return raw code object
- emitglue: add mp_raw_code_load_mem to load raw-code from memory
- emitglue: host definition of mp_verbose_flag
- formatfloat: convert to fully portable implementation
- formatfloat: fix incorrect rounding for %f format
- formatfloat: handle calculation of integer digit for %f format properly
- mpz: normalize xor operation result to fix bugs in comparisons
- emitglue: add feature-flag header to .mpy to detect bytecode compat
- emitglue: implement persistent saving and loading of const objects
- check that second argument to hasattr is actually a string
- do proper checking of * and ** in function definition

extmod:
- modlwip: initial commit of the lwip network stack module
- modlwip: slip: Use stream protocol and be port-independent
- modlwip: lwip_tcp_send(): Common subexpression elimination, use MIN()
- modlwip: socket->incoming changed by async callbacks, must be volatile
- modlwip: change void pointers to unions, include new mphal.h file
- moductypes: implement buffer protocol
- moductypes: when dealing with UINT64, use mp_obj_new_int_from_ull()
- re1.5: update to 0.8, implements ?: and ??, as well as improved robustness
- re1.5: workaround issue with mingw32-gcc 4.2.1
- modure: make sure that errors in regexps are caught early

lib:
- lwip: add LwIP stack as a submodule in the library directory
- pyexec: for paste mode use "Ctrl" as the name of the key, not "CTRL"
- memzip: factor out memzip from teensy/ into lib/memzip
- mp-readline: make it easy to exit auto-indent mode by pressing enter
- fatfs: unify fatfs configuration
- pyexec: move header pyexec.h from stmhal directory
- utils/printf: move from stmhal/

tools:
- pyboard.py: make -c (inline Python code) option compatible with python2
- pyboard.py: don't add terminating \x04 character to stdout output
- update to upip 0.6.2: removes FFI dependency

tests:
- jni: test for basic object operations
- make sure test output has \r\n line-ends when running on Windows
- base/struct1.py: add test for repetition counters
- jni: add test for working with container of List interface
- float/string_format: add testcase for incorrect rounding for %f
- int_big_xor: test that xor result is normalized
- int_big_*: add more tests for result normalization

minimal port:
- use mp_hal_ticks_ms()
- add an explicit comment on the gchelper.s line in the Makefile

unix port:
- modjni: don't pass Java object to a method which doesn't expect it
- modjni: actually check argument type when doing method resolution
- gccollect: fallback to setjmp-based register fetching automatically
- modjni: add missing get_jclass_name() function
- allow to override MICROPY_PY_MATH_SPECIAL_FUNCTIONS from command-line
- switch stderr printing from ANSI C to native POSIX
- modos: add getenv()
- modos: add mkdir()
- modos: getenv(): Handle non-existing envvar correctly
- input: switch to POSIX I/O for history reading/writing
- add "uselect" module, with poll() function
- modsocket: implement sockaddr() function to decode raw socket address
- modsocket: use snprintf(), as defined by lib/utils/printf.c
- use printf() implementation in terms of mp_printf()
- main: get rid of perror() which uses stdio

windows port:
- do not use wildcards when looking in dirs containing optional features
- add usleep() implementation for msvc port
- REPL: erase pre-calc'd number of chars instead of clearing whole line
- rename "time" module to "utime" for consistency with others
- call _set_output_format() only on Visual Studio versions 2013 or lower
- use write() instead of fwrite() to avoid out-of-order output
- README: deprecate mingw32, suggest using mingw64
- update build instructions in the README
- fix project file for Visual Studio 2015
- allow specifying the python executable to use for msvc builds
- define ssize_t and use renamed mphal header

stmhal port:
- ffconf.h: include py/mpconfig.h
- fix USB_VCP.recv so that it returns actual amount of bytes read
- pyexec: use mp_hal_ticks_ms()
- moduselect: use mp_hal_ticks_ms()
- make accel AVDD pin configurable via mpconfigboard.h
- enable sdcard on STM32F7DISC board
- add define for UNIQUE_ID address (differs per MCU)
- make RTC init skip startup if LTE is already enabled and ready
- update PYBv3 and PYBv4 pin defs to include MMA pins, and others
- pyexec.c is common module, move to lib/utils/
- add symbolic #defines for interrupt levels in irq.h
- can: fix a bug in filter handling
- rtc: lSx oscillator is only initialized upon initial power up
- add missing regex property for parsing header comments
- print more information at HardFault time
- fatFS configuration moved to the library folder
- moduselect: expose POLLIN/OUT/ERR/HUP constants
- modmachine: initial attempt to add I2C & SPI classes

cc3200 port:
- add created sockets to the registry
- enable WLAN irq on creation
- allow to read pin value when in OPEN_DRAIN mode
- update README to change pyb to machine
- set pin direction first, then value
- fix bug in FTP command buffer, and set listening backlog to 0
- actually allow to specify a custom build directory
- switch from HAL_Delay() to mp_hal_delay_ms()
- switch from HAL_GetTick() to mp_hal_ticks_ms()
- use common pyexec.c
- fix SPI clock divider calculation
- make telnet server ignore NULL characters
- force SSL method to be TLSV1
- fatFS configuration moved to the library folder
- unmount all user file systems after a soft reset
- appsign.sh: use md5 if running under Darwin

teensy port:
- switch from HAL_* to mp_hal_* functions
- switch over to using frozen modules instead of memzip

esp8266 port:
- switch to standard mp_hal_*() functions

examples:
- add example of I2C usage, taking PyBoard accelerometer as subject

docs:
- add remark about ssl sockets and standard sockets
- correct machine.RTC examples
- explicitly specify behavior of UART stream protocol methods on timeout
- USB_VCP: Always in non-blocking mode, clarify stream method returns
- wipy: fix error in WLAN quickref
- wipy: fix several typos and change some pyboard to WiPy
- wipy: fix bug in example code and add note regarding OTA
- select: Describe poll.poll() return value in detail
- actually add unix port indexes, so docs for it could be generated
- library/index.rst: minimally adapt for unix port
- move instructions on generating the documentation to docs/README.md
- add docs about REPL paste-mode and Control-C
- select: document POLLIN/OUT/ERR/HUP
- update docs for WiPy wlan.connect()
- wipy: add warning about losing wlan connection when changing mode
- wipy: make wifi/wlan naming consistent with tutorial.rst