Improved mpy format with support for native code, and new JavaScript port
In this release the mpy file format has been moved to version 4 and has
some significant improvements: mpy file size is reduced on average by about
35%, loading time of mpy files is reduced by about 40%, and they now have
support to save native, viper and inline assembler code (or machine code
generated from any other source). Size reduction of mpy files was achieved
by adding a qstr window to reuse past qstrs when encoding them, by packing
qstrs directly in the bytecode, and by defining a static qstr set.
Some VM opcodes were also changed to fix a bug when doing a break/continue
out of a finally block, and to make some simplifications. In particular
POP_BLOCK and POP_EXCEPT opcodes were replaced with POP_EXCEPT_JUMP.
Most uppercase macros have been converted to lowercase to make a more
consistent C API, including all MP_OBJ_IS_xxx and MP_xxx_SLOT_IS_FILLED
macros.
The default PYTHON makefile variable is now changed from "python" to
"python3", but Python 2 is still supported via "make PYTHON=python2".
The mpy-cross compiler supports the new mpy version 4 and has new command
line options: "-march=" to select the native emitter, and "--version"
to print the MicroPython version and the mpy version. Also mpy-tool.py has
support for freezing native code.
A module system for external, user C modules has been implemented and
documentation for this is available in the new "docs/develop" section.
A new "javascript" port has been added which targets JavaScript as the
machine via Emscripten. This allows to run MicroPython as an application
within node.js, and to run it within a browser (among other things).
All bare-metal ports have the following improvements: machine.sleep() is
now machine.lightsleep(), and both lightsleep() and deepsleep() now take an
optional argument which is the maximum time to sleep in milliseconds.
These ports also now allow freezing of boot.py and main.py using the usual
methods. And a new I2C method i2c.writevto(addr, vect) is added which can
be used to write a tuple/list of buffers all at once to an I2C device.
The stm32 port now has a fully integrated Ethernet MAC driver (see the
network.LAN class) using lwIP for the TCP/IP stack, and sockets were made
significantly more robust. Support for F413 MCUs was added. There are
also some minor user-facing changes to this port:
For the esp32 port, the build process has been updated to align better with
the ESP IDF and now uses sdkconfig to configure features. Dual core mode
is now enabled by default, SPIRAM is in memory-mapped mode so all of it can
be used for the MicroPython heap, there is support to change the CPU
frequency, and the WDT now panics and resets the device if it times out.
A detailed list of changes follows.
py core:
extmod:
websocket
to uwebsocket
lib:
drivers:
tools:
tests:
mpy-cross:
all ports:
unix port:
windows port:
qemu-arm port:
stm32 port:
cc3200 port:
esp8266 port:
esp32 port:
javascript port:
nrf port:
zephyr port:
docs:
travis:
Vast improvements to native emitter, new nrf port, unified documentation
In this release there are a wide range of improvements and additions to
both the core and the ports. In the core the main improvement was to the
native emitter to have much more comprehensive support for general Python
features, such as generators and complex exception handling, and the
generated machine code is smaller and retains its efficiency. Elsewhere,
fuzzy testing was used to find and eliminate some corner-case bugs, user
classes were optimised when they don't use special accessors, underscores
in numeric literals are now supported (PEP515), and the uio.IOBase class
was added to allow user defined streams.
For the extended modules there is now a VfsPosix filesystem component,
a new ucryptolib module with AES support, addition of ure.sub() and of
uhashlib.md5, and the lwIP socket implementation now has working TCP
listen/accept backlog.
Compared to the last release the minimal baseline core code size is reduced
by about 2.2%, down by roughly 1500 bytes for bare-arm port and 3500 bytes
for minimal x86 port. Most other ports have increased in size due to the
addition of new features (eg ucryptolib, ure.sub).
The stm32 port sees the introduction of a new bootloader -- mboot -- which
supports DFU upload via USB FS, USB HS, as well as a custom I2C protocol,
and also support to program external SPI flash. There is significant
refactoring of the USB device driver, improved VCP throughput, and support
for 2x VCP interfaces on the one USB device. lwIP has been integrated, and
support added for SDRAM. Cortex-M0 CPUs are now supported along with
STM32F0 MCUs.
For the esp8266 port the heap is increased by 2kbytes, the radio is
automatically put to sleep if no WLAN interfaces are active, and the UART
can now be disconnected from the REPL and its RX buffer length configured.
Upon soft-reset sockets are now cleaned up.
The esp32 port has added support for external SPI RAM, PPPoS functionality,
improved performance and stability when using threads, and other general
bug fixes.
There is a new nrf port for Nordic MCUs, currently supporting nRF51x and
nRF52x chips.
The docs have now been unified so there is just one set of documentation
covering all ports. And initial documentation for the esp32 port is added.
There are two changes at the Python API level that are not backwards with
previous versions:
A detailed list of changes follows.
py core:
extmod:
lib:
drivers:
tools:
tests:
mpy-cross:
minimal port:
unix port:
windows port:
stm32 port:
cc3200 port:
esp8266 port:
esp32 port:
nrf port:
pic16bit port:
teensy port:
zephyr port:
docs:
travis:
examples:
README:
Introduction of ports subdirectory where all ports are moved to
The main change in this release is the introduction of a "ports/"
subdirectory at the top-level of the repository, and all of the ports are
moved here. In the process the "stmhal" port is renamed to "stm32" to
better reflect the MCU that it targets. In addition, the STM32 CMSIS and
HAL sources are moved to a new submodule called "stm32lib".
The bytecode has changed in this release, compared to the previous release,
and as a consequence the .mpy version number has increased to version 3.
This means that scripts compiled with the previous mpy-cross must be
recompiled to work with this new version.
There have also been various enhancements and optimisations, such as:
check for valid UTF-8 when creating str objects, support for reverse
special binary operations like radd, full domain checking in the math
module, support for floor-division and modulo in the viper emitter,
and addition of stack overflow checking when executing a regex.
The stm32 port sees improved support for F7 MCUs, addition of a new board
B_L475E_IOT01A based on the STM32L475, and support for the Wiznet W5500
chipset along with improved socket behaviour.
A detailed list of changes follows.
py core:
extmod:
lib:
drivers:
tools:
tests:
unix port:
stm32 port:
cc3200 port:
esp8266 port:
zephyr port:
pic16bit port:
docs:
travis:
examples:
all:
README:
.gitattributes:
Double precision math library and support on pyboard, and improved ussl
This release brings general improvements and bug fixes to the core and
various ports, as well as documentation additions, clean-ups and better
consistency. And effort has been made to clean up the source code to
make it more consistent across the core and all ports.
There is a new tool "mpy_bin2res.py" to convert arbitrary (binary) files
to Python resources for inclusion in source code (frozen or otherwise).
The ussl module has seen improvements, including implementation of
server_hostname (for axtls) and server_side mode (for mbedtls).
There is now a double-precision float math library and stmhal has support
to build firmware with software or hardware double-precision.
A detailed list of changes follows.
py core:
extmod:
lib:
drivers:
tools:
tests:
minimal port:
unix port:
stmhal port:
cc3200 port:
esp8266 port:
zephyr port:
docs:
all:
README:
CODECONVENTIONS:
travis:
Fixes for stmhal USB mass storage, lwIP bindings and VFS regressions
This release provides an important fix for the USB mass storage device in
the stmhal port by implementing the SCSI SYNCHRONIZE_CACHE command, which
is now require by some Operating Systems. There are also fixes for the
lwIP bindings to improve non-blocking sockets and error codes. The VFS has
some regressions fixed including the ability to statvfs the root.
All changes are listed below.
py core:
extmod:
lib:
tests:
unix port:
windows port:
qemu-arm port:
stmhal port:
cc3200 port:
teensy port:
esp8266 port:
zephyr port:
docs:
examples:
Support for Xtensa emitter and assembler, and upgraded F4 and F7 STM HAL
This release adds support for the Xtensa architecture as a target for the
native emitter, as well as Xtensa inline assembler. The int.from_bytes
and int.to_bytes methods now require a second argument (the byte order)
per CPython (only "little" is supported at this time). The "readall"
method has been removed from all stream classes that used it; "read" with
no arguments should be used instead. There is now support for importing
packages from compiled .mpy files. Test coverage is increased to 96%.
The generic I2C driver has improvements: configurable clock stretching
timeout, "stop" argument added to readfrom/writeto methods, "nack"
argument added to readinto, and write[to] now returns num of ACKs
received. The framebuf module now handles 16-bit depth (generic colour
format) and has hline, vline, rect, line methods. A new utimeq module is
added for efficient queue ordering defined by modulo time (to be
compatible with time.ticks_xxx functions). The pyboard.py script has been
modified so that the target board is not reset between scripts or commands
that are given on a single command line.
For the stmhal port the STM Cube HAL has been upgraded: Cube F4 HAL to
v1.13.1 (CMSIS 2.5.1, HAL v1.5.2) and Cube F7 HAL to v1.1.2. There is a
more robust pyb.I2C implementation (DMA is now disabled by default, can be
enabled via an option), and there is an implementation of machine.I2C with
robust error handling and hardware acceleration on F4 MCUs. It is now
recommended to use machine.I2C instead of pyb.I2C. The UART class is now
more robust with better handling of errors/timeouts. There is also more
accurate VBAT and VREFINT measurements for the ADC. New boards that are
supported include: NUCLEO_F767ZI, STM32F769DISC and NUCLEO_L476RG.
For the esp8266 port select/poll is now supported for sockets using the
uselect module. There is support for native and viper emitters, as well
as an inline assembler (with limited iRAM for storage of native functions,
or the option to store code to flash). There is improved software I2C
with a slight API change: scl/sda pins can be specified as positional only
when "-1" is passed as the first argument to indicate the use of software
I2C. It is recommended to use keyword arguments for scl/sda. There is
very early support for over-the-air (OTA) updates using the yaota8266
project.
A detailed list of changes follows.
py core:
extmod:
lib:
drivers:
tools:
tests:
unix port:
windows port:
stmhal port:
cc3200 port:
esp8266 port:
zephyr port:
docs:
travis:
examples:
ESP8266 port uses SDK 2.0, has more heap, has support for 512k devices
This release brings some code size reductions to the core as well as
more tests and improved coverage which is now at 94.3%.
The time.ticks_diff(a, b) function has changed: the order of the arguments
has been swapped so that it behaves like "a - b", and it can now return a
negative number if "a" came before "b" (modulo the period of the ticks
functions).
For the ESP8266 port the Espressif SDK has been updated to 2.0.0, the
heap has been increased from 28k to 36k, and there is support for 512k
devices via "make 512k". upip is included by default as frozen bytecode.
The network module now allows access-point reconnection without WiFi
credentials, and exposes configuration for the station DHCP hostname. The
DS18B20 driver now handles negative temperatures, and NeoPixel and APA102
drivers handle 4 bytes-per-pixel LEDs.
For the CC3200 port there is now support for loading of precompiled .mpy
files and threading now works properly with interrupts.
A detailed list of changes follows.
py core:
extmod:
lib:
drivers:
tools:
tests:
minimal port:
unix port:
windows port:
qemu-arm port:
stmhal port:
cc3200 port:
teensy port:
esp8266 port:
zephyr port:
docs:
travis:
examples:
Support for stream decompression in uzlib, and more ESP8266 features
This release includes some bug fixes, code clean-up, updates to the docs,
more tests, and various feature additions. The uzlib module now supports
efficient stream decompression in the form of the uzlib.DecompIO class.
Freezing of bytecode now supports floats for the ESP8266 port, as well as
complex numbers for all ports. The stmhal port has ADC working on L4
microcontrollers, fixed initialisation for DAC, and addition of the
machine.WDT class and machine.reset_cause function.
For the ESP8266 port Pin(16) now works as an input pin and the hardware
SPI peripheral is exposed as machine.SPI(1). The os.umount function is
implemented and the port supports mounting of externally connected SD
cards. The machine.WDT class is added, wlan.scan() is fixed to return all
access points, and there is support for DS18S20 devices.
py core:
extmod:
lib:
drivers:
tools:
tests:
unix port:
qemu-arm port:
stmhal port:
cc3200 port:
teensy port:
esp8266 port:
docs:
misc:
Many small improvements and additions, with btree support in ESP8266 port
This release brings various improvements and additions to the core,
extended modules and the ESP8266 port, as well as enhancements to the docs.
There is now a "threshold" function in the gc module for the user to
configure the garbage collector to run earlier than usual, in order to help
reduce fragmentation of the heap. The btree module is now available in the
ESP8266 port, and there is improved WebREPL file transfer: get file is now
non-blocking (this change requires an update of the client software).
py core:
extmod:
lib:
tests:
mpy-cross:
minimal port:
unix port:
stmhal port:
esp8266 port:
docs:
misc:
examples:
qemu-arm:
Thread support, ESP8266 memory improvements, btree module, improved docs
This release brings multi-threading support in the form of the _thread
module, which closely matches the semantics of the corresponding CPython
module. There is support for GIL and non-GIL builds; without the GIL
enabled one must protect concurrent access to mutable Python state at the
Python level using Lock objects. Threading with the GIL is enabled in
the cc3200 port on the WiPy. Threading without the GIL is enabled on the
unix port. The ESP8266 port has support for frozen bytecode (for scripts
in the modules/ subdirectory), as well as optimisations for reduced
memory usage and decreased memory fragmentation. The ESP8266 RTC also
resumes correctly after a deepsleep. An initial "btree" module has been
implemented for database support (unix port only), and the documentation
has been further improved, with pre-built PDF versions of the docs now
available.
py core:
extmod:
lib:
drivers:
tests:
unix port:
windows port:
stmhal port:
cc3200 port:
teensy port:
esp8266 port:
qemu-arm port:
docs:
examples:
First general release of ESP8266 port, and support for frozen bytecode
This release marks the first general release of official ESP8266 support
within the MicroPython code base. The ESP8266 port has many improvements
and additions, including: websocket and webrepl modules, deep-sleep mode,
reading on UART, enhanced I2C support, enhanced network configuration,
full sequence of start-up scripts (built-in _boot.py, boot.py and
main.py), improved filesystem support with automatic flash-size detection
as well as documentation and a tutorial.
Known issues with ESP8266 port are:
In addition to ESP8266 support, this release brings frozen bytecode
which allows to compile bytecode offline and link it into the firmware,
completely eliminating the need for compilation (and the associated
RAM usage) at runtime. Basic async/await syntax is now supported, and
qstrs are now auto-generated in the build system.
A detailed list of changes is given below.
README:
ACKNOWLEDGEMENTS:
py core:
extmod:
lib:
drivers:
tools:
tests:
minimal port:
unix port:
windows port:
stmhal port:
cc3200 port:
esp8266 port:
docs:
examples:
New MicroPython cross-compiler, and vastly improved ESP8266 port
This release adds the MicroPython cross-compiler that can generate .mpy
files (pre-compiled bytecode) which can be executed within any
MicroPython runtime/VM. The ESP8266 port is also vastly improved thanks
to a hugely successful Kickstarter campaign. This port now has an
alternative event loop implementation to allow proper Berkeley sockets
using lwIP built from source, and a greatly improved network module.
Many extension modules are now enabled (ujson, ubinascii, uctypes,
uhashlib, urandom, uheapq, ure, uzlib) and the machine module includes
Timer, Pin, PWM, ADC, I2C, SPI, and basic UART. Bignums are supported,
along with 30-bit precision floating point, and normal error messages.
There is FatFS support and uos.dupterm.
Many other improvements and bug fixes have been made to the core and
other ports. The basic test suite can now run within a 16k heap. Inline
assembler functions now support 4 arguments. The Unix port has the -i
option to start the REPL after a script is finished. The stmhal port now
exposes the flash and SD card as proper objects with the block protocol.
There is support for generic STM32F439 boards, the NUCLEO-F411RE board,
and targets to deploy via ST-LINK and OpenOCD.
py core:
extmod:
lib:
drivers:
tests:
mpy-cross:
unix port:
stmhal port:
qemu-arm port:
cc3200 port:
esp8266 port:
examples:
docs:
IPv6 support in unix, bignum constant folding, urandom module, faster VCP
In this release there are many bug fixes and consolidation of previous
features. Constant folding in the parser can now operate on arbitrary
precision integers, and the inline assembler is no longer restricted to
using small-ints or 30-bits. The urandom module has been added with the
most useful random functions included. The uhashlib module now
implements SHA1. The Unix port supports IPv6. The stmhal port has much
faster USB VCP for board to PC transfers, and Timer(3) is now freed up
for general purpose use by the user.
py core:
extmod:
tests:
minimal port:
unix port:
windows port:
stmhal port:
docs:
travis:
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:
extmod:
lib:
tools:
tests:
unix port:
windows port:
stmhal port:
cc3200 port:
esp8266 port:
docs:
pic16bit:
ports:
First-class REPL, ussl module, machine module for WiPy, stuffed-floats
This release brings first-class REPL support, which now has tab completion,
auto-indent, paste mode, history and _ to hold the last computed value.
There is a new ussl module, and one can now build a standalone unix binary.
The new machine API is implemented in cc3200, with the machine module and
additions to time and os modules. stmhal contains the beginnings of this
new API, while still retaining full backwards compatibility with the original
pyb API. unix also includes the new time functions, sleep_ms, sleep_us,
ticks_ms, ticks_us and ticks_diff. A new object representation is available
which stores single-precision floats within a machine word (using 30-bit
precision), and allows to use float objects without the heap (not enabled in
any port). There are also bug fixes and general improvements.
py core:
extmod:
lib:
drivers:
tools:
tests:
unix port:
stmhal port:
cc3200 port:
docs:
misc: