Skip to content
64-bit NaN-boxing, FreeDOS target, and PYBv1.1 and PYBLITEv1.0 boards

This release brings a new object model for 64-bit NaN-boxing on 32-bit
architectures, while allows double precision floating point numbers to
be used without allocating on the heap.  Unix and Windows ports have
better handling of Ctrl-C, and there is now a FreeDOS target within the
unix Makefile.  Windows (msvc) builds are now checked using Appveyor CI.
The stmhal port has new board config files for then next version of the
pyboard, PYBv1.1 and PYBLITEv1.0, as well as config files for the
STM32F429 discovery kit.  There is now delayed RTC initialisation with
LSI fallback, and DMA support for the SD card.  The DMA controllers are
turned off if DMA is idle for 100 msec or more, saving power.

py core:
- mpconfig.h: allow to build without alloca() for ANSI C compliance
- binary: make use of MP_ALIGN
- asmx86: fix function definition to use int32_t instead of int
- change mp_print_strn_t func type to use size_t for the str length
- change qstr_* functions to use size_t as the type for str len arg
- emit: change type of arg of load_const_obj from void* to mp_obj_t
- make mp_setup_code_state take concrete pointer for func arg
- use uintptr_t instead of mp_uint_t in MP_TAGPTR_* macros
- gc: move away from using mp_uint_t, instead use uintptr_t and size_t
- add MP_ROM_* macros and mp_rom_* types and use them
- wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR
- add support for 64-bit NaN-boxing object model, on 32-bit machine
- mpprint: printing of doubles is now supported (by uPy own routine)
- gc: make GC block size be configurable
- mpconfig: actually allow to override MICROPY_BYTES_PER_GC_BLOCK
- fix function calls that have positional and a star-arg-with-iterator
- modsys: implement sys.modules
- make it easy to build without MICROPY_PY_BUILTINS_COMPLEX
- add MICROPY_PY_BUILTINS_MIN_MAX, disable for minimal ports
- add min/max "default" keyword argument
- don't try to optimise for+range when args are not simple expressions
- fix calling of parent classmethod from instance of subclass
- add mp_get_stream_raise to factor out check for stream methods
- mkrules.mk: don't pass COPT to linker
- emitinlinethumb: add support for MRS instruction
- make UNARY_OP_NOT a first-class op, to agree with Py not semantics
- fix compiler to handle lambdas used as default arguments
- modmath: add domain error checking to sqrt, log, log2, log10
- objpolyiter: implement instance-polymorphic iterator type
- gc: scan GC blocks as an array of pointers, not an array of objects
- gc: for finaliser, interpret a pointer into the heap as concrete obj
- gc: use size_t instead of mp_uint_t to count things related to heap
- mpprint: implement %llu and %lld format specifiers for mp_printf
- bc: use size_t instead of mp_uint_t to count size of state and args
- qstr: use size_t instead of mp_uint_t when counting allocated bytes
- qstr: change type of qstr from mp_uint_t to size_t
- parse: replace mp_int_t/mp_uint_t with size_t etc, where appropriate
- compile: use size_t or uintptr_t instead of mp_uint_t
- parse: include stddef.h for definition of size_t
- compile: simplify compilation of comprehension iterators
- emitglue: add include of unistd.h for read function
- add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts
- gc: when printing info, use %u instead of UINT_FMT for size_t args
- obj: fix float constants for MICROPY_OBJ_REPR_C
- mpprint: fix printing of 64bit integers for 64bit windows builds
- objstr: make sure that b"%s" % b"foo" uses undecorated bytes value
- objstr: applying % (format) operator to bytes should return bytes, not str
- handle case of return within the finally block of try-finally
- be more restrictive binding self when looking up instance attrs
- map: add fast-path for hashing of map index when it is a qstr
- gc: improve mark/sweep debug output
- map: in map lookup, check for fixed map independent of ordered map
- nlr: use single preprocessor symbol to check if building on Windows

extmod:
- move fsusermount.c from stmhal for cross-port reuse
- fsusermount: make configurable with MICROPY_FSUSERMOUNT
- modmachine: use uintptr_t instead of mp_uint_t for address type
- moductypes: set_aligned(): Handle INT64/UINT64
- moductypes: sizeof operation depends on layout type of structure
- moduhashlib: add namespace prefix for crypto-algorithms/sha256.h
- modubinascii: add "separator" argument to hexlify()
- modlwip: tcp_recv: Use more regular and responsive poll pattern
- modlwip: mark some lwip_socket_obj_t's fields as volatile
- modlwip: user proper field name and value names for socket state
- modlwip: avoid magic numeric values in memcpy()
- modlwip: use _ERR_BADF instead of magic number

lib:
- utils/printf: apply workaround for static linking with uclibc
- utils/printf: add vsnprintf alias for Clang
- libm: allow math funcs to be used by non-Thumb archs
- utils: add pyexec_frozen_module to load and execute frozen module

tools:
- allow pyboard.py to work when boot.py prints things
- add option to pyboard.py to wait for serial device to be ready
- upgrade upip to 0.6.3; updated for _os -> uos builtin module rename
- add C middle-processor to make builtin tables proper hash tables

tests:
- run-tests: improve robustness of REPL tests
- extra_coverage: update for sys.modules addition
- run-tests: allow to skip complex tests if it's not compiled in
- add min/max "default" agrument test
- builtin_minmax: add testcase for lazy iterable (generator)
- add test for "not" of a user defined class
- add tests for %-formatting of bytes
- add tests for stream IO errors
- add test which demonstrates uctypes LITTLE_ENDIAN packing failure

unix port:
- unix_mphal: use size_t instead of mp_uint_t in stdout_tx_strn decls
- moduselect: fix bug in poll.poll() scanning loop
- moduselect: poll.register(): Reuse freed entries in poll array
- moduselect: support growing of poll array
- modtime: sleep(): automatically restart after receiving EINTR
- modtime: sleep(): return early if KeyboardInterrupt is pending
- mpconfigport.h: for MICROPY_NO_ALLOCA=1, don't even include alloca.h
- main: check pending exception at the end of code block execution
- moduselect: register(): allow to call with duplicate file descriptor
- modtermios: provide B57600 and B115200 constants only if defined
- moduselect: implement "one-shot" flag for poll.poll()
- rename "_os" module to "uos" for consistency with baremetal ports
- move modmachine into unix directory
- moduselect: make configurable with MICROPY_PY_USELECT
- modtime: add strftime() function (only single argument is supported)
- modos: implement ilistdir()
- modos: allow to configure use of d_ino using _DIRENT_HAVE_D_INO
- modos: add errno() function to get/set errno value
- add FreeDos target
- change define logic of _DIRENT_HAVE_D_INO to match other macros
- unix_mphal: properly initialize struct sigaction
- unix_mphal: just consistently set sigaction.sa_flags to 0
- machine_mem improvements
- properly cancel REPL input when Ctrl-C is pressed
- unix_mphal: raise KeyboardInterrupt straight from signal handler
- implement uos.dupterm(), conditional on MICROPY_PY_OS_DUPTERM

windows port:
- cleanup makefile
- support 64bit mingw-w64 builds
- make keyboard_interrupt_obj available, it's standard feature
- add basic support for raising KeyboardInterrupt
- add Appveyor CI builds for msvc port
- better handling of Ctrl-C
- msvc: nicer handling of asserts and 'invalid' parameters
- msvc: use different output directories depending on build type
- msvc: use new modmachine infrastructure per changes in f925165
- msvc: add dirent.h/.c implementation

stmhal port:
- implement delayed RTC initialization with LSI fallback
- put IRQs into priority order
- turn off DMA clocks when idle for 100 msec
- add dma support for sdcard
- on SysTick IRQ, only process one DMA channel at a time
- irq: add comment about SDIO priority being higher than DMA
- irq: set all IRQ subpriorities to 0, since they aren't used
- move flash storage idle tick handler from TIM3 to SysTick
- in SysTick IRQ handler, make uwTick variable non-volatile
- process storage idle tick handler in different slot to DMA
- increase the priority of UART IRQ
- add support for the STM32F429I-DISCO kit by STMicro
- allow make DEBUG=1 to build
- make stm.mem* support large integers
- uart.any() function now returns number of bytes available
- make uart.write() function correctly for timeout=0
- add board config files for PYBv1.1 and PYBLITEv1.0
- put all DMA channel & stream definitions in dma.h
- add raise_irq_pri and restore_irq_pri functions
- protect SD card DMA transactions against USB MSC contention
- add rtc.init() method to force RTC to re-initialise
- only use BASEPRI irq stuff if Cortex is M3 or higher
- add option to free up TIM3 from USB VCP polling
- fix uart off by 1 circular buffer size
- execute boot.py and main.py when formatting the file system
- print exception information in nlr_jump_failed
- enable two USB phys to be supported together
- timer: use mp_float_t instead of float
- for SPI config, use HW_SPIx_SCK instead of HW_ENABLE_SPIx
- make uart init use struct instead of array for parsing args
- extend SPI support to fully support all SPI devices on STM32F429
- moduselect: implement "oneshot polling" flag
- change PLL configuration for STM32F7DISC
- add mem8/mem16/mem32 operations to machine module
- add pyb.irq_stats() to get statistics about IRQ calls
- add struct qstr to block of qstrs needed for MICROPY_PY_STRUCT
- fix usbd_conf.c for devices which don't have USB_HS at all

cc3200 port:
- correct buffer offset in serial flash diskio module
- add __get_BASEPRI and __set_BASEPRI inline function definitions

esp8266 port:
- modesp: implement flash_read(offset, size_bytes) function
- mac() function belongs to network module per the latest API
- modesp: allow to compile out proprietary espconn stuff

docs:
- library: add network server example
- add discussion on interrupt handlers incl uPy specific techniques

pic16bit:
- use global MICROPY_NO_ALLOCA setting

ports:
- rename "machine" module to "umachine"