tag:github.com,2008:https://github.com/Python3-Training/micropython/releasesRelease notes from micropython2019-12-20T05:59:02Ztag:github.com,2008:Repository/290133466/v1.122019-12-20T05:59:02Zv1.12: PYBD boards, BLE and littlefs, dynamic native modules, samd and powerpc<p>This release sees a reduction in overall bytecode size due to compression<br>
of the bytecode prelude, saving 7 bytes of bytecode per function for<br>
roughly 80% of functions. The bytecode opcode values are also redefined to<br>
group them based on their argument size and format. Support is also added<br>
for the matrix multiplication operator "@" (PEP 465).</p>
<p>The .mpy file format moved to version 5 to support the new bytecode<br>
encoding, and added support for relocation of native machine code, along<br>
with separate rodata and BSS sections. This allows a MicroPython system to<br>
import dynamic native modules, .mpy files that are generated from C code.<br>
Examples of this feature are provided in "examples/natmod/" and<br>
documentation in "docs/develop/natmod.rst".</p>
<p>Some code-size saving optimisations were implemented leading to a reduction<br>
in size of minimal firmware: bare-arm reduced by 584 bytes, minimal x86 by<br>
5476 bytes (partly due to changed compiler optimisation flags) and minimal<br>
ARM Thumb 2 by 1440 bytes (all measured with gcc 9.2.0).</p>
<p>A new mechanism to freeze scripts into firmware is provided - a frozen<br>
manifest - whereby scripts to freeze are listed in a Python file (eg<br>
manifest.py). All ports are updated to use this new feature.</p>
<p>When weak module links are enabled (via MICROPY_MODULE_WEAK_LINKS) an<br>
import will now automatically search for the built-in u-variant of a module<br>
if the non-u-variant fails (eg searches for "ufoo" if "foo" fails), so<br>
ports no longer provide an explicit list of these. The unix and windows<br>
ports now enable this feature.</p>
<p>A performance benchmarking test suite is added which can be used to compare<br>
changes in absolute performance when optimising features, as well as<br>
compare across different ports. See "tests/run-perfbench.py".</p>
<p>Bluetooth (BLE only) support is added via the "ubluetooth" module and<br>
provides the ability to implement the four BLE roles. The BLE stack is<br>
used is Mynewt Nimble and it currently runs on PYBD boards, STM32WB55 MCUs<br>
and ESP32 boards.</p>
<p>Support for littlefs filesystems is added through the MicroPython VFS<br>
interface, and it works on the unix, stm32, esp8266 and esp32 ports.</p>
<p>A new "machine.ADC.read_u16()" method is defined and implemented on stm32,<br>
esp8266, esp32 and nrf ports, providing a consistent way to read an ADC<br>
that returns a value in the range 0-65535. This new method should be<br>
preferred to the existing "ADC.read()" method.</p>
<p>The stm32 port sees support for the new PYBD range of pyboards which<br>
include a fully integrated CYW43xx WiFi/BT chip. USB is enhanced to<br>
support VCP+MSC+HID mode and up to 3x simultaneous VCP interfaces. Support<br>
is also added for STM32WBxx MCUs including BLE. There is a new machine.ADC<br>
class which is compatible with other ports, along with a new machine.Timer<br>
class that implements a software timer with millisecond resolution and<br>
number of active timers only limited by RAM. Support for littlefs is<br>
available by default via uos.VfsLfs2. Documentation for using littlefs is<br>
found in "docs/reference/filesystem.rst".</p>
<p>The esp8266 port has switched to use per-board configurations and builds,<br>
as well as the new frozen manifest feature. It also has optional littlefs<br>
support (requires a separate build).</p>
<p>The esp32 port has the following new features: native code generation,<br>
machine.SDCard, hardware I2C, mDNS queries and responder, esp32.Partition,<br>
esp32.RMT, BLE (requires IDF v4), and built-in support for VfsLfs2. It has<br>
switched to use per-board configurations and builds, and frozen manifests.<br>
The default SSL output buffer is resized from 16kiB down to 4kiB to save<br>
RAM.</p>
<p>There are new, minimal ports to Microchip SAMDxx microcontrollers, and<br>
the bare metal PowerPC architecture.</p>
<p>A code-of-conduct based on the PSF's code is added in CODEOFCONDUCT.md.</p>
<p>The following new Git submodules are added: mbedtls, asf4, tinyusb,<br>
mynewt-nimble. And a new third-party library: littlefs.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>nativeglue: make private glue funs all static, remove commented code</li>
<li>nativeglue: remove dependency on mp_fun_table in dyn-compiler mode</li>
<li>obj: optimise small-int comparison to 0 in mp_obj_is_true</li>
<li>nlrthumb: save and restore VFP registers s16-s21 when CPU has them</li>
<li>mkrules.mk: use <math-renderer class="js-inline-math" style="display: inline-block" data-run-id="e5bbd56eae0f1debd6b958232c04350c">$(CPP) not $</math-renderer>(CC) -E for preprocessor rule</li>
<li>define EMIT_MACHINE_CODE as EMIT_NATIVE || EMIT_INLINE_ASM</li>
<li>persistentcode: fix compilation with load and save both enabled</li>
<li>persistentcode: ensure prelude_offset is always initialised</li>
<li>asmarm: use __clear_cache on Linux/GCC when creating new asm code</li>
<li>nlrthumb: check <strong>thumb2</strong> instead of <strong>ARM_ARCH_6M</strong>
</li>
<li>objgenerator: add missing #if guard for PY_GENERATOR_PEND_THROW</li>
<li>asmarm: use __builtin___clear_cache instead of __clear_cache</li>
<li>makeqstrdata.py: allow using \r\n as a qstr if a port requires it</li>
<li>scheduler: rename sched_stack to sched_queue</li>
<li>objstringio: guard bytesio_stream_p struct w/ MICROPY_PY_IO_BYTESIO</li>
<li>objdict: quote non-string types when used as keys in JSON output</li>
<li>builtinimport: populate <strong>file</strong> when importing frozen or mpy files</li>
<li>runtime: allow to override builtins.<strong>import</strong> with Python func</li>
<li>modio: call mp_import_name to do resource stream import</li>
<li>allow to pass in read-only buffers to viper and inline-asm funcs</li>
<li>showbc: fix off-by-one when showing address of unknown opcode</li>
<li>implement new sys.atexit feature</li>
<li>objarray: fix amount of free space in array when doing slice assign</li>
<li>modmath: implement math.isclose() for non-complex numbers</li>
<li>introduce MP_UNREACHABLE macro to annotate unreachable code</li>
<li>nlr: use MP_UNREACHABLE at the end of arch-specific nlr_jump funcs</li>
<li>compile: improve the line numbering precision for comprehensions</li>
<li>emitbc: rewrite switch in load_const_tok to reduce code size</li>
<li>emitbc: make all emit_write_bytecode_* funcs take a stack_adj arg</li>
<li>objgenerator: move defn of mp_const_GeneratorExit_obj here</li>
<li>vm: shorten error message for not-implemented opcode</li>
<li>vm: don't add traceback info for exc's propagated through a finally</li>
<li>vm: don't add traceback info for exceptions that are re-raised</li>
<li>add global default_emit_opt variable to make emit kind persistent</li>
<li>compile: improve the line numbering precision for lambdas</li>
<li>bc: factor out code to get bytecode line number info into new func</li>
<li>profile: add initial implementation of sys.settrace feature</li>
<li>integrate sys.settrace feature into the VM and runtime</li>
<li>profile: add debugging for sys.settrace feature</li>
<li>objtuple: allow compatible subclasses of tuple in mp_obj_tuple_get</li>
<li>modstruct: fix struct.unpack with unaligned offset of native type</li>
<li>modstruct: fix struct.pack_into with unaligned offset of native type</li>
<li>binary: change mp_uint_t to size_t for index, size, align args</li>
<li>bc: fix size calculation of UNWIND_JUMP opcode in mp_opcode_format</li>
<li>mkenv.mk: add GDB variable</li>
<li>vm: factor cached map lookup code to inline function</li>
<li>mkrules.mk: add QSTR_GLOBAL_REQUIREMENTS variable for qstr auto-gen</li>
<li>persistentcode: enable persistent code saving for Windows ports</li>
<li>lexer: reorder operator tokens to match corresponding binary ops</li>
<li>parse: use calculation instead of table to convert token to operator</li>
<li>compile: use calculation instead of switch to convert token to op</li>
<li>add support for matmul operator @ as per PEP 465</li>
<li>bc0: order opcodes into groups based on their size and format</li>
<li>bc: replace big opcode format table with simple macro</li>
<li>introduce and use constants for multi-opcode sizes</li>
<li>split RAISE_VARARGS opcode into 3 separate ones</li>
<li>nlr.h: factor out constants to specific macros</li>
<li>emitnative: factor sizeof/offsetof calculations to macros</li>
<li>rename MP_QSTR_NULL to MP_QSTRnull to avoid intern collisions</li>
<li>nativeglue: make mp_fun_table fixed size regardless of config</li>
<li>persistentcode: bump .mpy version to 5</li>
<li>ringbuf: add helpers for put16/get16</li>
<li>bc: change mp_code_state_t.exc_sp to exc_sp_idx</li>
<li>add n_state to mp_code_state_t struct</li>
<li>compress first part of bytecode prelude</li>
<li>rework and compress second part of bytecode prelude</li>
<li>bc: don't include mp_decode_uint funcs when not needed</li>
<li>compile: disallow 'import *' outside module level</li>
<li>makeqstrdefs.py: remove unused blacklist</li>
<li>vm: fix handling of unwind jump out of active finally</li>
<li>runtime: fix PEP479 behaviour throwing StopIteration into yield from</li>
<li>emitnative: add support for archs with windowed registers</li>
<li>emitnative: add support for using setjmp with native emitter</li>
<li>emitnative: add support for archs that cannot read executable data</li>
<li>asmxtensa: add support for Xtensa with windowed registers</li>
<li>add new Xtensa-Windowed arch for native emitter</li>
<li>persistentcode: make .mpy more compact with qstr directly in prelude</li>
<li>objtype: add type.<strong>bases</strong> attribute</li>
<li>mkrules.mk: add warning/error for invalid frozen config</li>
<li>objstr: size-optimise failure path for mp_obj_str_get_buffer</li>
<li>automatically provide weak links from "foo" to "ufoo" module name</li>
<li>modarray: rename "array" module to "uarray"</li>
<li>runtime: reorder some binary ops so they don't require conditionals</li>
<li>stream.h: add MP_STREAM_POLL_NVAL constant</li>
<li>nativeglue: remove unused mp_obj_new_cell from mp_fun_table</li>
<li>objgenerator: remove globals from mp_obj_gen_instance_t</li>
<li>objgenerator: allow pend_throw to an unstarted generator</li>
<li>persistentcode: move declarations for .mpy header from .c to .h file</li>
<li>modsys: report .mpy version in sys.implementation</li>
<li>emitnative: fix typo, REG_PARENT_ARG_RET should be REG_PARENT_RET</li>
<li>emitnx86: make mp_f_n_args table match order of mp_fun_kind_t</li>
<li>objdict: support ujson.dump() of OrderedDict objects</li>
<li>ringbuf: add peek16 method</li>
<li>compile: coalesce error message for break/continue outside loop</li>
<li>builtinimport: raise exception on empty module name</li>
<li>qstr: raise exception in qstr_from_strn if str to intern is too long</li>
<li>objstringio: slightly optimize stringio_copy_on_write for code size</li>
<li>objenumerate: check for valid args in enumerate constructor</li>
<li>persistentcode: add ability to relocate loaded native code</li>
<li>nativeglue: add new header file with native function table typedef</li>
<li>nativeglue: add funcs/types to native glue table for dynamic runtime</li>
<li>persistentcode: make ARM Thumb archs support multiple sub-archs</li>
<li>nativeglue: add float new/get functions with both single and double</li>
<li>dynruntime: add support for float API to make/get floats</li>
<li>dynruntime: implement uint new/get, mp_obj_len and mp_obj_subscr</li>
<li>persistentcode: move loading of rodata/bss to before obj/raw-code</li>
</ul>
<p>extmod:</p>
<ul>
<li>add network-level class binding to cyw43 driver</li>
<li>factor out makefile rules from py.mk to new extmod.mk file</li>
<li>extmod.mk: integrate mbedTLS so it is built from source</li>
<li>modussl_mbedtls: allow to build with object representation D</li>
<li>extmod.mk: include mdns app source in lwIP build</li>
<li>uos_dupterm: add mp_uos_dupterm_poll to poll all dupterms</li>
<li>moduwebsocket: make close_resp static array const to not use RAM</li>
<li>modwebrepl: make prompt/ver static arrays const to not use RAM</li>
<li>modwebrepl: add config option to put filebuf[512] on stack/bss</li>
<li>modlwip: for TCP send keep trying tcp_write if it returns ERR_MEM</li>
<li>modlwip: use mp_sched_schedule to schedule socket callbacks</li>
<li>modlwip: implement raw sockets for lwIP</li>
<li>modure: make regex dump-code debugging feature optional</li>
<li>moducryptolib: use "static" not "STATIC" for inline functions</li>
<li>give vars/funcs unique names so STATIC can be set to nothing</li>
<li>modujson: support passing bytes/bytearray to json.loads</li>
<li>crypto-algorithms: add source to header and populate copyright</li>
<li>vfs_posix: include stdio.h for declaration of function 'rename'</li>
<li>nimble: add nimble bindings</li>
<li>modbluetooth: add low-level Python BLE API</li>
<li>modbluetooth_nimble: implement modbluetooth API with Nimble</li>
<li>modbluetooth_nimble: use random addr if public isn't available</li>
<li>modbluetooth: allow MP_BLUETOOTH_MAX_ATTR_SIZE in board config</li>
<li>modbluetooth: allow config of scan interval/window</li>
<li>modbluetooth: use us instead of ms for advertising interval</li>
<li>modbluetooth: increase maximum connections from 1 to 4</li>
<li>modbluetooth: clear gap_advertise payload when data is empty</li>
<li>modbluetooth: fix order of params to IRQ_GATTS_WRITE event</li>
<li>modbluetooth: improve ringbuf handling</li>
<li>modbluetooth: make gap_disconnect not raise when disconnected</li>
<li>modbluetooth: in gap_advertise only accept None to stop adv</li>
<li>re1.5: support escaping within RE classes</li>
<li>modbluetooth: make UUID support the buffer protocol</li>
<li>modbluetooth: persist reference to NimBLE service instances</li>
<li>modbluetooth_nimble: use <code>data_alloc</code> length to truncate writes</li>
<li>modbluetooth: rename module to "ubluetooth"</li>
<li>factor out block-device struct to make independent of fatfs</li>
<li>vfs_blockdev: factor out block device interface code</li>
<li>vfs_blockdev: add extended read/write methods</li>
<li>add VFS littlefs bindings</li>
<li>vfs: rename BP_IOCTL_xxx constants to MP_BLOCKDEV_IOCTL_xxx</li>
<li>vfs: add MP_BLOCKDEV_IOCTL_BLOCK_ERASE constant</li>
<li>modbluetooth: add gatts_set_buffer</li>
<li>vfs_lfs: allow compiling in VfsLfs1 and VfsLfs2 separately</li>
<li>modlwip: unconditionally return POLLHUP when polling new socket</li>
<li>modlwip: make socket poll return POLLNVAL in case of bad file</li>
<li>modlwip: unconditionally return POLLHUP/POLLERR when polling</li>
<li>modussl_mbedtls: fix getpeercert to return None if no cert avail</li>
<li>modussl_mbedtls: check for invalid key/cert data</li>
<li>nimble: remove unneeded nimble_sprintf wrapper function</li>
<li>nimble: factor out stm32-specific HCI UART RX/TX code</li>
<li>modbtree: make FILEVTABLE const to put it in ROM</li>
<li>convert nlr_raise(mp_obj_new_exception_msg(x)) to mp_raise_msg(x)</li>
<li>vfs: add autodetect of littlefs filesystem when mounting</li>
<li>consolidate FAT FS config to MICROPY_VFS_FAT across all ports</li>
<li>modbluetooth: prioritise non-scan-result events</li>
<li>modbluetooth: create UUID from bytes and allow comparison ops</li>
<li>modbluetooth_nimble: make gap_scan_stop no-op if no scan ongoing</li>
<li>modbluetooh_nimble: fix UUID conversion for 16 and 32 bit values</li>
<li>modbluetooth: simplify management of pre-allocated event data</li>
<li>vfs_lfs: pass flag along to ioctl when init'ing bdev for lfs</li>
<li>vfs_lfs: fix bug when passing no args to constructor and mkfs</li>
<li>modbluetooth: simplify how BLE IRQ callback is scheduled</li>
<li>modbluetooth: remove limit on data coming from gattc data input</li>
<li>modbluetooth: add optional 4th arg to gattc_write for write mode</li>
<li>modbluetooth: allow setting ringbuf size via BLE.config(rxbuf=)</li>
<li>modbtree: use mp_printf instead of printf</li>
<li>add dynamic-runtime guards to btree/framebuf/uheapq/ure/uzlib</li>
<li>webrepl: move webrepl scripts to common place and use manifest</li>
</ul>
<p>lib:</p>
<ul>
<li>cmsis: upgrade to CMSIS 5.5.1</li>
<li>netutils: add DHCP server component</li>
<li>add new submodule for mbedtls, currently at v2.17.0</li>
<li>utils/sys_stdio_mphal: add support to poll sys.stdin and sys.stdout</li>
<li>add asf4 as a submodule</li>
<li>add tinyusb as a submodule</li>
<li>stm32lib: update library for updated H7xx, new L0xx, new WBxx</li>
<li>lwip: update lwIP to v2.1.2, tag STABLE-2_1_2_RELEASE</li>
<li>mynewt-nimble: add Apache mynewt nimble as a submodule</li>
<li>littlefs: add littlefs v1.7.2 source</li>
<li>littlefs: add littlefs v2.1.3 source</li>
<li>littlefs: add README describing origin and how to gen lfs1/lfs2</li>
<li>libc/string0: add simple implementations of strspn and strcspn</li>
</ul>
<p>drivers:</p>
<ul>
<li>add driver for CYW43xx WiFi SoCs</li>
<li>memory/spiflash: add support to put SPI flash in sleep mode</li>
<li>cyw43: add low-level CYW43xx Bluetooth HCI UART driver</li>
<li>onewire/ds18x20.py: add support for DS1822 sensor</li>
<li>sdcard: raise exception on timeout of readinto</li>
<li>wiznet5k: allow selecting maximum fixed buffer size for MACRAW</li>
</ul>
<p>tools:</p>
<ul>
<li>mpy-tool.py: fix linking qstrs in native code, and multiple files</li>
<li>mpy-tool.py: fix linking of qstr objects in native ARM Thumb code</li>
<li>add uf2conv.py from Microsoft/uf2 repository</li>
<li>pyboard.py: add filesystem commands to ls/cat/cp/rm remote files</li>
<li>mpy-tool.py: force native func alignment to halfword/word on ARM</li>
<li>mpy-tool.py: add initial support for frozen with settrace</li>
<li>mpy-tool.py: fix freezing of non-bytecode funcs with settrace</li>
<li>make-frozen.py: allow to run with no directory passed in</li>
<li>add mechanism to provide a manifest of frozen files</li>
<li>makemanifest.py: eval relative paths w.r.t. current manifest file</li>
<li>mpy-tool.py: use "<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/progbits/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/progbits">@progbits</a> #" attribute for native xtensa code</li>
<li>makemanifest.py: follow symlinks when freezing linked directories</li>
<li>makemanifest.py: skip freezing unsupported files with warning</li>
<li>makemanifest.py: use sys.executable when invoking Python scripts</li>
<li>mpy-tool.py: support qstr linking when freezing Xtensa native mpy</li>
<li>mpy-tool.py: add ability to merge multiple .mpy files into one</li>
<li>mpy_ld.py: add new mpy_ld.py tool and associated build files</li>
<li>mpy-tool.py: raise exception if trying to freeze relocatable mpy</li>
<li>pyboard.py: support executing .mpy files directly</li>
<li>tinytest-codegen.py: add extra newline and result message</li>
</ul>
<p>tests:</p>
<ul>
<li>rename "bench" tests to "internal_bench" and run-internalbench.py</li>
<li>add performance benchmarking test-suite framework</li>
<li>perf_bench: add some benchmarks from python-performance</li>
<li>perf_bench: add some miscellaneous performance benchmarks</li>
<li>perf_bench: add some viper performance benchmarks</li>
<li>stress/recursive_iternext.py: increase large depth to 5000</li>
<li>run-perfbench.py: add --emit option to select emitter for tests</li>
<li>add tests for overriding builtins.<strong>import</strong></li>
<li>misc/sys_atexit: add test for new sys.atexit feature</li>
<li>unix: update extra_coverage expected output with new atexit func</li>
<li>extmod: split json.loads of bytes/bytearray into separate test</li>
<li>split out test for optimisation level and line-no printing</li>
<li>add tests for sys.settrace feature</li>
<li>basics: add test for matmul operator</li>
<li>update tests for changes to opcode ordering</li>
<li>micropython: add test for native generators</li>
<li>basics: add test for getting name of func with closed over locals</li>
<li>basics: add test for throw into yield-from with normal return</li>
<li>perf_bench: add bm_fft test</li>
<li>run-perfbench.py: show error when truth check fails</li>
<li>run-perfbench.py: skip complex tests if target doesn't enable it</li>
<li>cpydiff: fix typo in types_bytes_keywords.py doc comments</li>
<li>rename "array" module to "uarray"</li>
<li>extmod: add littlefs tests</li>
<li>extmod: add test for blockdev with standard and extended protocol</li>
<li>basics: use str.format instead of % for formatting messages</li>
<li>basics/builtin_dir.py: look for "version" in dir(sys)</li>
<li>add feature check for bytearray and skip corresponding tests</li>
<li>basics: split out specific bytearray tests to separate files</li>
<li>basics: use bytes not bytearray when checking user buffer proto</li>
<li>add feature check for slice and skip corresponding tests</li>
<li>basics: split out specific slice tests to separate files</li>
<li>run-tests: add misc list of tests that use slice, to skip them</li>
<li>basics: automatically skip tests that use str/bytes modulo-format</li>
<li>add feature check for uio module and skip corresponding tests</li>
<li>basics: split sys.exit test to separate file so it can be skipped</li>
<li>extmod: add test for ussl when passing in key/cert params</li>
<li>stress: add test for maximum length limit of qstrs</li>
<li>import: add test for importing viper code with additional flags</li>
<li>add script to run dynamic-native-module tests</li>
<li>add .exp files for basics/parser and import/import_override</li>
<li>stress/qstr_limit: tune params to run with stm32 port</li>
<li>basics/memoryview_itemsize: make portable to 32- and 64-bit archs</li>
<li>extmod/vfs_lfs_error: use small ints in seek error test</li>
<li>pyb: refactor pyboard tests to work on PYBv1, PYBLITEv1 and PYBD</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>do not automatically build mpy-cross, rather do it manually</li>
<li>main: only accept full emit cmdline options if native enabled</li>
<li>make mpconfigport.h compatible with msvc compiler</li>
<li>add msvc build of mpy-cross</li>
<li>set number of registers in nlr_buf_t based on native arch</li>
<li>enable Xtensa-Windowed native emitter</li>
<li>support armv7em, armv7emsp, armv7emdp architectures</li>
<li>README.md: add notes about -march and -O</li>
</ul>
<p>all ports:</p>
<ul>
<li>provide mp_hal_stdio_poll for sys.stdio polling where needed</li>
<li>add new make target "submodules" which inits required modules</li>
</ul>
<p>minimal port:</p>
<ul>
<li>use soft float for CROSS=1 Cortex-M4 target</li>
<li>frozentest: recompile now that mpy version has changed</li>
<li>set CSUPEROPT=-Os to get minimal firmware size</li>
</ul>
<p>unix port:</p>
<ul>
<li>mpconfigport.mk: update comment about TLS implementations</li>
<li>unix_mphal: use CLOCK_MONOTONIC for ticks_ms/us when available</li>
<li>enable sys.atexit, triggered after the main script ends</li>
<li>main: only accept full emit cmd-line options if native enabled</li>
<li>coverage: add coverage tests for ringbuf</li>
<li>convert to use FROZEN_MANIFEST to specify frozen code</li>
<li>enable module weak links</li>
<li>enable uos.VfsLfs1, uos.VfsLfs2 on coverage build</li>
<li>modtermios: fix output speed setter in tcsetattr</li>
</ul>
<p>windows port:</p>
<ul>
<li>mpconfigport.h: define empty MP_WEAK symbol</li>
<li>mpconfigport.h: don't define restrict/inline/alignof for C++</li>
<li>msvc: treat compiler warnings as errors</li>
<li>Makefile: make use of CFLAGS_EXTRA, LDFLAGS_EXTRA and SRC_MOD</li>
<li>msvc: remove unneeded definitions for qstr generation</li>
<li>msvc: move build options from .vcxproj to .props files</li>
<li>msvc: enable overriding directories used in the build</li>
<li>msvc: change the way sources are listed</li>
<li>default to binary mode for files</li>
<li>enable module weak links</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>add testing of frozen native modules</li>
<li>convert to use FROZEN_MANIFEST to specify frozen code</li>
<li>add ldscript dependency in the final firmware.elf target</li>
<li>let tinytest.o be built by standard build rules</li>
<li>Makefile: allow overriding CROSS_COMPILE from another makefile</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>usb: refactor CDC VCP code to enable N CDC interfaces</li>
<li>usb: support up to 3 VCP interfaces on USB device peripheral</li>
<li>boards/make-pins.py: allow pins.csv to skip or hide board-pin name</li>
<li>boards/pllvalues.py: search nested headers for HSx_VALUE defines</li>
<li>boards: add board definition files for PYBD -SF2, -SF3, -SF6</li>
<li>modpyb: add pyb.country() function to set the country</li>
<li>extint: add extint_set() function for internal C access to EXTI</li>
<li>mphalport: add support for having MAC in OTP region</li>
<li>add low-level SDIO interface for cyw43 driver</li>
<li>integrate in the cyw43 driver and network.WLAN class</li>
<li>boards/PYBD_SFx: enable CYW43 WLAN driver</li>
<li>modnetwork: replace generic netif NIC polling with specific code</li>
<li>integrate optional mbedTLS component for ussl module</li>
<li>boards/PYBD_SFx: enable ussl module using mbedTLS</li>
<li>support optional lwIP mDNS responder</li>
<li>lwip_inc: update to enable mDNS, TCP listen backlog, faster DHCP</li>
<li>usbd_msc: rework USBD MSC code to support multiple logical units</li>
<li>usbd_msc: provide custom irquiry processing by MSC interface</li>
<li>usbd_msc: provide Mode Sense response data in MSC interface</li>
<li>usb: use ARG_xxx enums to access kw args in pyb_usb_mode</li>
<li>usb: add "msc" kw-arg to pyb.usb_mode to select MSC logical units</li>
<li>usbd_msc: allow to compile when USB enabled and SD card disabled</li>
<li>in link script, define start of stack separately from heap end</li>
<li>boards: enable ussl module via mbedtls for boards with network</li>
<li>Makefile: print info messages about use of mboot/QSPI flash</li>
<li>enter bootloader via a system reset</li>
<li>boards/pllvalues.py: support HSx_VALUE defined without uint32_t</li>
<li>boards: add stm32??xx_hal_conf_base.h files with common settings</li>
<li>boards: rework all stm32??xx_hal_conf.h files to use common code</li>
<li>usb: fix regression with auto USB PID value giving PID=0xffff</li>
<li>boards: optimise flash and RAM allocation for L4 boards</li>
<li>mpu: add helper functions for configuring MPU</li>
<li>eth: use MPU helper functions to configure MPU for ETH use</li>
<li>sdram: use MPU helper functions to configure MPU for SDRAM use</li>
<li>qspi: use MPU to allow access to valid memory-mapped QSPI region</li>
<li>qspi: force a reset of the QSPI peripheral when initialising it</li>
<li>qspi: handle bus acquisition</li>
<li>powerctrl: add hooks for a board to perform actions on sleep/wake</li>
<li>boards/PYBD_SFx: put SPI flash to sleep during sleep modes</li>
<li>mpconfigport.h: enable useful networking modules if lwIP enabled</li>
<li>usb: add support to auto-detect USB interface, either FS or HS</li>
<li>usb: add "port" keyword argument to pyb.usb_mode, to select FS/HS</li>
<li>spi: factor out code to calculate SPI source frequency</li>
<li>extint: simplify bitband support config for different MCUs</li>
<li>modmachine: make RTC class available in machine module</li>
<li>boards/PYBD_SF2: put mbedtls library code in external QSPI flash</li>
<li>update components to work with new H7xx HAL</li>
<li>Makefile: remove Wno-attributes for ll_usb HAL file</li>
<li>Makefile: use startup_stm32*.s file from stm32lib</li>
<li>boards: remove startup_stm32*.s files now they are in stm32lib</li>
<li>mpu: include MPU functions when ETH is enabled</li>
<li>lwip_inc: define LWIP_NO_CTYPE_H=1 to use lwIP ctype funcs</li>
<li>modmachine: disable IRQs before entering bootloader</li>
<li>boards/PYBD_SFx: configure EN_3V3 pin as output on boot</li>
<li>sdcard: add hook for a board to power on SD/MMC</li>
<li>boards/PYBD_SFx: automatically turn on EN_3V3 when powering SD/MMC</li>
<li>add initial support for STM32L0xx MCUs</li>
<li>boards: add MCU support files for STM32L072</li>
<li>mpconfigport.h: make "framebuf" module configurable by a board</li>
<li>boards/NUCLEO_L073RZ: add definition files for new board</li>
<li>powerctrl: move L0's SystemClock_Config to powerctrlboot.c file</li>
<li>powerctrl: move F0's SystemClock_Config to powerctrlboot.c</li>
<li>remove SystemInit funcs, use stm32lib versions instead</li>
<li>boards/NUCLEO_F446RE: enable DAC</li>
<li>add support for STM32L452 MCUs</li>
<li>boards/NUCLEO_L452RE: add definition files for new board</li>
<li>boards/NUCLEO_F413ZH: remove STARTUP_FILE, it's defined globally</li>
<li>mboot: make _estack an array to avoid compiler warnings</li>
<li>mboot: remove use of BSRRL/H for H7 MCUs due to stm32lib update</li>
<li>mboot: use STARTUP_FILE from stm32lib</li>
<li>mboot: update dependencies to enable parallel build with -j</li>
<li>boards/B_L072Z_LRWAN1: add definition files for new board</li>
<li>gccollect: always use MP_STATE_THREAD(stack_top) to get stack top</li>
<li>usb: add config options to disable USB MSC and/or HID</li>
<li>usbd_cdc_interface: make CDC TX/RX buffer sizes configurable</li>
<li>add support for USB on L0 MCUs</li>
<li>powerctrlboot: increase SYSCLK to 32MHz for L0 MCUs</li>
<li>mphalport: fix GPIO clock enable for L0 MCUs</li>
<li>Makefile: allow a board to disable float support</li>
<li>boards/B_L072Z_LRWAN1: enable USB VCP support</li>
<li>boards/STM32F769DISC: fix length of FLASH_APP section</li>
<li>make-stmconst.py: allow more variation in parens and int-suffix L</li>
<li>add initial support for STM32WBxx MCUs</li>
<li>boards: add MCU support files for STM32WB55</li>
<li>boards/NUCLEO_WB55: add definition files for new board</li>
<li>boards/USBDONGLE_WB55: add definition files for new board</li>
<li>flashbdev: support internal filesystem on STM32F722/23/32/33</li>
<li>boards/stm32f722.ld: provide memory regions for internal FS</li>
<li>boards/NUCLEO_F722ZE: add definition files for new board</li>
<li>dma: fix re-start of DMA stream by clearing all event flags</li>
<li>usbd_hid_interface: rewrite USB HID interface code</li>
<li>boards/xxx_WB55: enable USB HID now that it works on WB MCUs</li>
<li>usbd_hid_interface: include extra header to build with threading</li>
<li>lwip_inc: enable raw socket type</li>
<li>mpconfigport.h: enable lwIP raw sockets</li>
<li>sdcard: support configuring the SD/MMC bus width to 1 or 4 bits</li>
<li>modpyb: support building with PY_PYB_LEGACY on and HW_USB_HID off</li>
<li>usbd: introduce MICROPY_HW_USB_IS_MULTI_OTG to simplify USB config</li>
<li>usbd: support USB device mode on STM32L432 MCUs</li>
<li>boards/NUCLEO_L432KC: add config for USB VCP support</li>
<li>usbd: make USB device FIFO sizes dynamically configurable</li>
<li>i2c: fix generation of restart condition for hw I2C on F0/F7</li>
<li>mphalport: put PYBD specific MAC code in board specific file</li>
<li>mboot/Makefile: define "BUILDING_MBOOT" when building mboot</li>
<li>boards/PYBD_SF2: exclude certain things when building mboot</li>
<li>extint: fix EXTI mapping of PVD and RTC events for H7 MCUs</li>
<li>stm32_it: include correct EXTI interrupt handlers for L0 MCUs</li>
<li>dma: fix DMA config for L0 MCUs</li>
<li>powerctrl: fix machine.bootloader() for L0 MCUs</li>
<li>machine_adc: add machine.ADC class</li>
<li>machine_adc: improve operation of ADC for H7, L4 and WB MCUs</li>
<li>boards/stm32wb55_af.csv: fix ADC pin-channel function mapping</li>
<li>mboot: support boards with only two LEDs</li>
<li>boards/NUCLEO_L073RZ: fix typo in MCU name</li>
<li>boards/MIKROE_CLICKER2_STM32: add MikroElektronika Clicker2 board</li>
<li>boards/STM32F769DISC: fix number of SDRAM row bits</li>
<li>board/NUCLEO_F746ZG: enable Ethernet periph, lwip and ussl</li>
<li>usb: add support for VCP+MSC+HID mode, incl 2xVCP and 3xVCP</li>
<li>usb: verify number of used endpoints doesn't exceed maximum</li>
<li>lwip_inc: allocate additional MEMP_SYS_TIMEOUT when mDNS enabled</li>
<li>lwip_inc: enable LWIP_NETIF_EXT_STATUS_CALLBACK for mDNS</li>
<li>machine_adc: fix build for F4 and L4 MCUs that only have ADC1</li>
<li>modusocket: fix NULL deref when accept() an unbound socket</li>
<li>machine_i2c: add ability to specify I2C(4) by name</li>
<li>can: factor CAN driver into low-level and Python bindings</li>
<li>add support for FDCAN peripheral, exposed as pyb.CAN</li>
<li>boards/NUCLEO_H743ZI: enable FDCAN on this board</li>
<li>use mp_printf with MICROPY_ERROR_PRINTER for uncaught exceptions</li>
<li>can: guard header file by MICROPY_HW_ENABLE_CAN</li>
<li>usbd_cdc_interface: add CTS flow control option for USB VCP</li>
<li>support disabling the compiler</li>
<li>powerctrlboot: fix clock and PLL selection for HSI48 on F0 MCUs</li>
<li>powerctrlboot: add support for HSI at 8MHz on F0 MCUs</li>
<li>uart: add RTS/CTS pin configuration support to UART4</li>
<li>provide port-specific implementation for Nimble on STM32</li>
<li>mpconfigport.h: add modbluetooth module to stm32</li>
<li>boards/PYBD: enable BLE for Pyboard D</li>
<li>system_stm32: support selection of HSE and LSI on L4 MCUs</li>
<li>boards: enable MICROPY_HW_RTC_USE_LSE on L4 boards</li>
<li>{adc,machine_adc}: change ADC clock and sampling time for F0 MCUs</li>
<li>usbdev: fix compile error if MICROPY_HW_USB_CDC_NUM is set to 2</li>
<li>boards/PYBD_SF2: put nimble library in external QSPI XIP flash</li>
<li>extract port-specific Nimble implementation</li>
<li>mboot: add option to automatically reset when USB is disconnected</li>
<li>sdcard: support boards with no SD card detect pin</li>
<li>use hardware double sqrt on F7/H7 MCUs</li>
<li>boards: add new board ADAFRUIT_F405_EXPRESS</li>
<li>convert to use FROZEN_MANIFEST to specify frozen code</li>
<li>adc: update ADC driver to work with the new H7 HAL</li>
<li>adc: remove unused macro and channel check, and fix spacing</li>
<li>adc: use IS_CHANNEL_INTERNAL macro to check for internal channels</li>
<li>adc: fix sampling for internal channels on H7 MCUs</li>
<li>mpu: save and restore the IRQ state when configuring MPU</li>
<li>accel: rename MMA I2C macro constants to make it generic</li>
<li>accel: add support for KXTJ3</li>
<li>boards: add NADHAT_PYB405 board</li>
<li>accel: fix Accel.read() method so it does read a byte</li>
<li>powerctrlboot: fix config of systick IRQ priority on F0/L0/WB MCU</li>
<li>sdram: fix to use new mpu_config_start/mpu_config_end signature</li>
<li>Makefile: only enable hardware sqrt on parts that support it</li>
<li>timer: fix Timer.freq() calc so mult doesn't overflow uint32_t</li>
<li>add soft timer implementation, using SysTick at 1ms resolution</li>
<li>add machine.Timer with soft timer implementation</li>
<li>add support for RF coprocessor on WB55 MCUs</li>
<li>boards: enable support for bluetooth on WB55 boards</li>
<li>mpthreadport: include runtime.h to get defn of mp_raise_msg</li>
<li>boards/stm32f405_af.csv: fix typo in ETH_RMII_REF_CLK on PA1</li>
<li>nimble_hci_uart.c: prevent scheduler running during CYW-BT wakeup</li>
<li>generalise flash mounting code so it supports arbitrary FS</li>
<li>storage: make pyb.Flash configurable, and support ext block proto</li>
<li>main: auto detect block device used for main filesystem</li>
<li>moduos: add VfsLfs1 and VfsLfs2 to uos module, if enabled</li>
<li>boards: enable LFS2 on PYBv1.x and PYBD boards</li>
<li>storage: change storage_read/write_blocks to return int type</li>
<li>storage: make start/len args of pyb.Flash keyword only</li>
<li>qstrdefsport.h: remove unused qstrs and make USB ones conditional</li>
<li>boards/NUCLEO_L073RZ: skip board-pin names for CPU only pins</li>
<li>main: fix auto creation of pyb.Flash on boot with kw-only args</li>
<li>mpconfigport.h: use IRQ_PRI_PENDSV to protect bluetooth ringbuf</li>
<li>uart: add support for UART4/5 on L0 MCUs</li>
<li>boards/xxx_WB55: enable littlefs2 on WB55 boards</li>
<li>main: fix SKIPSD file detection so SD card is mounted by default</li>
<li>Makefile: enable max buffer size on W5200 NIC when used with lwIP</li>
<li>modusocket: handle case of NULL NIC in socket ioctl</li>
<li>boards/PYBD_SF2: configure LEDs as inverted, for LED.intensity()</li>
<li>boards/NUCLEO_F767ZI: add pins and config for using an SD card</li>
<li>boards/NUCLEO_F767ZI: update pins, peripherals and total flash</li>
<li>boards/NUCLEO_H743ZI: add extra pins and peripheral definitions</li>
<li>timer: add missing TIM 1/15/16/17 IRQ handlers for H7 MCUs</li>
<li>boards/PYBD: include webrepl helper scripts in frozen manifest</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>uart: fix invalid ringbuf name when event driven REPL enabled</li>
<li>provide custom machine_time_pulse_us that feeds soft WDT</li>
<li>mpconfigport.h: enable lwIP raw sockets</li>
<li>machine_uart: allow remapping UART TX/RX pins from 1/3 to 15/13</li>
<li>put new profile code in iROM</li>
<li>machine_adc: rename pyb_adc_* to machine_adc_*</li>
<li>machine_adc: add read_u16 method and refactor</li>
<li>add per-board configs, following other ports</li>
<li>modules/ntptime.py: always close socket, and set day-of-week</li>
<li>convert to use FROZEN_MANIFEST to specify frozen code</li>
<li>allow building without a manifest</li>
<li>boards: add manifest_release.py with files for a release</li>
<li>modules/flashbdev.py: support extended block protocol</li>
<li>moduos: add optional support for VfsLfs1 and VfsLfs2</li>
</ul>
<p>esp32 port:</p>
<ul>
<li>machine_timer: reuse Timer handles, deallocate only on soft-reset</li>
<li>add machine.SDCard class using built-in HW SD/MMC controller</li>
<li>update to use ESP IDF v3.3-beta3</li>
<li>modnetwork: still try to reconnect to WLAN even with AUTH_FAIL</li>
<li>Makefile: include all driver/*.c source files in the build</li>
<li>network_ppp: add ppp_set_usepeerdns(pcb, 1) when init'ing iface</li>
<li>add support for hardware I2C</li>
<li>Makefile: fix path expansion for ESPIDF_DRIVER_O</li>
<li>Makefile: put OBJ and LIB rule additions in gen_espidf_lib_rule</li>
<li>Makefile: simplify include of IDF source by using wildcards</li>
<li>pin MicroPython tasks to a specific core</li>
<li>Makefile: include CFLAGS_EXTRA in CFLAGS definition</li>
<li>network_ppp: add authentication support to the PPP interface</li>
<li>add support for mDNS queries and responder</li>
<li>modules: on initial setup mount internal flash at root</li>
<li>add per-board configs, following other ports</li>
<li>add esp32.Partition class to expose partition and OTA funcs</li>
<li>add 'config' function to network.LAN, reusing network.WLAN</li>
<li>Makefile: fix subst->patsubst in ESPIDF_BOOTLOADER_SUPPORT_O</li>
<li>machine_adc: add ADC.read_u16() method</li>
<li>update to use ESP IDF v3.3</li>
<li>boards/TINYPICO: switch to use QIO and 80MHz for SPI interface</li>
<li>add VFS FAT partition to partitions.csv and mount it as the FS</li>
<li>add support for ESP32-D2WD with 2MiB internal flash</li>
<li>modules/inisetup.py: use bdev.ioctl instead of bdev.SEC_SIZE</li>
<li>Makefile: add SDKCONFIG_H to QSTR_GLOBAL_REQUIREMENTS</li>
<li>support building with ESP IDF 4.0-beta1</li>
<li>add check to Makefile for pyparsing version</li>
<li>add check to Makefile that the toolchain is in PATH</li>
<li>main: use both 3.3 and 4.0 config vars to enable SPIRAM</li>
<li>Makefile: fix printing of supported git hash</li>
<li>enable native emitter</li>
<li>implement BLE using Nimble from IDF 4.x</li>
<li>boards: enable BLE by default when building with IDF 4.x</li>
<li>add 4.x version of IDLE WDT config</li>
<li>run NimBLE on the app core</li>
<li>convert to use FROZEN_MANIFEST to specify frozen code</li>
<li>machine_uart: add ability to invert UART pins</li>
<li>boards: split out CPU frequency config, make 160MHz the default</li>
<li>machine_hw_spi: fix exception msg when host is already in use</li>
<li>Makefile: add correct arch to MPY_CROSS_FLAGS for native code</li>
<li>remove unused "esponewire.c" in favour of extmod/modonewire</li>
<li>esp32_partition: support extended block protocol</li>
<li>moduos: enable uos.VfsLfs2 for littlefs filesystems</li>
<li>boards/sdkconfig.base: resize SSL output buffer from 16 to 4kiB</li>
<li>rtc: set system microseconds when setting time via RTC.datetime()</li>
<li>machine_rtc: make RTC.memory size and availability configurable</li>
<li>machine_rtc: reduce memory footprint of user mem functionality</li>
<li>boards: enable ULP in base sdk configuration</li>
<li>boards/TINYPICO: add tinypico.py, dotstar.py with custom manifest</li>
<li>esp32_rmt: add initial support for RMT peripheral</li>
</ul>
<p>javascript port:</p>
<ul>
<li>enable support for frozen bytecode via FROZEN_MPY_DIR</li>
</ul>
<p>nrf port:</p>
<ul>
<li>led: adjust how board LEDs are defined</li>
<li>clean up source by removing tabs, trailing spaces, non-ASCII chars</li>
<li>machine/adc: add ADC.read_u16() method</li>
<li>add ADC channel mapping to alt function table</li>
<li>machine/adc: allow to pass a Pin object in to ADC constructor</li>
<li>machine/adc: fix mapping of ADC channel to pin</li>
<li>boards/make-pins.py: fix gen of board pins to use correct index</li>
<li>Makefile: add support for flashing with a Black Magic Probe</li>
<li>boards: add Particle Xenon board configuration (an nRF52840)</li>
<li>boards: add board definition for uBlox Nina B1 series BLE modules</li>
<li>i2c: add support for TWIM (EasyDMA)</li>
<li>temp: move module configuration guard</li>
<li>uart: add support for UARTE (EasyDMA)</li>
<li>flash: update flash driver to use nrfx_nvmc driver</li>
<li>led: expose public API for LED manipulation</li>
<li>main: update the way the LED is used on startup</li>
<li>add support to activate MICROPY_PY_SYS_STDFILES</li>
<li>device: correct SPIM3 IRQ handler entry for nrf52840</li>
<li>add tinyusb support for nrf52840</li>
<li>boards: add support for pca10059</li>
<li>add nrf9160 base support</li>
<li>boards: add nrf9160 pca10090 board</li>
<li>main: execute boot.py/main.py frozen modules without a file system</li>
<li>boards/particle_xenon: enable USB CDC on Particle Xenon board</li>
</ul>
<p>powerpc port:</p>
<ul>
<li>add initial port to bare metal PowerPC arch</li>
</ul>
<p>samd port:</p>
<ul>
<li>add new port to Microchip SAMDxx microcontrollers</li>
<li>make common linker scripts, rename board.mk to mpconfigboard.mk</li>
<li>boards: add Adafruit Feather M0 Express board configuration</li>
<li>boards: add Mini SAM M4 board configuration</li>
<li>add minimum config for Atmel SAMD21-XPLAINED-PRO board</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>main: use mp_stack API instead of local pointer for stack top</li>
</ul>
<p>docs:</p>
<ul>
<li>machine: add initial docs for new machine.SDCard class</li>
<li>library/framebuf: add missing module reference in example code</li>
<li>library/sys: add documentation for sys.atexit function</li>
<li>pyboard: update name of mounted volume to match code</li>
<li>pyboard: clarify initial files on pyboard and fix up formatting</li>
<li>library: document that sys.version_info returns a 3-tuple only</li>
<li>pyboard: emphasize the instructions for making a USB mouse</li>
<li>reference/speed_python: update that read-only buffers are accepted</li>
<li>reference/speed_python: add missing self to var caching example</li>
<li>library/pyb.DAC.rst: correct frequency for triangle mode output</li>
<li>rename machine.ADC docs to machine.ADCWiPy</li>
<li>library: specify new machine.ADC class</li>
<li>library/pyb.rst: update docs for pyb.usb_mode() function</li>
<li>library/pyb.rst: update pyb.usb_mode() to mention VCP+MSC+HID</li>
<li>library/pyb.USB_VCP.rst: add info about id and flow params</li>
<li>develop/qstr.rst: add documentation for string interning</li>
<li>library/bluetooth: add initial BLE documentation</li>
<li>reference/glossary.rst: add new terms and reduce complexity of old</li>
<li>library/bluetooth.rst: clarify gap_advertise adv_data behavior</li>
<li>library/bluetooth.rst: explain how to increase char buffer size</li>
<li>library/bluetooth.rst: fix typo in HR/UART services example</li>
<li>esp8266/tutorial: make http_get sample function self contained</li>
<li>library: clarify relation between machine and port-specific mods</li>
<li>esp8266: add ntptime usage to esp8266 quickref</li>
<li>fix spelling in various parts of the docs</li>
<li>wipy/tutorial: link Blynk examples to the official library</li>
<li>library: rename "array" module to "uarray"</li>
<li>library/bluetooth: rename to "ubluetooth"</li>
<li>move ubluetooth under "MicroPython-specific libraries"</li>
<li>library: add documentation for extended block device protocol</li>
<li>library/ubluetooth: add docs for gatts_set_buffer</li>
<li>conf.py: fix path to favicon.ico</li>
<li>templates/topindex.html: replace usage of deprecated defindex.html</li>
<li>library/machine.SDCard.rst: fix various typos</li>
<li>library/ubluetooth: fix name and link to FLAG_xxx constants</li>
<li>reference: add docs describing use of pyboard.py</li>
<li>library: add docs for pyb.Flash class</li>
<li>add littlefs docs and a filesystem tutorial</li>
<li>reference/filesystem: fix typo in block device code example</li>
<li>reference/filesystem: add note and example about using filesystem</li>
<li>library/ubluetooth: add note about API being under development</li>
<li>library/uos: add notes and links about littlefs failures</li>
<li>library/uos.rst: clarify why the extended interface exists</li>
<li>esp8266/quickref: add note that machine.RTC is not fully supported</li>
<li>reference: add documentation describing use of .mpy files</li>
<li>develop: add documentation on how to build native .mpy modules</li>
<li>esp32: add quickref and full docs for esp32.RMT class</li>
</ul>
<p>travis:</p>
<ul>
<li>build PYBD_SF2 board as part of the stm32 job</li>
<li>selectively fetch git submodules only when needed</li>
<li>build esp8266 firmware as part of Travis CI</li>
<li>build esp32 firmware as part of Travis CI</li>
<li>enable performance benchmark tests on standard unix build</li>
<li>add samd port to Travis build</li>
<li>build stm32 mboot for PYBD_SF6 as part of CI</li>
<li>switch unix stackless build to use clang</li>
<li>build an stm32 board with threading enabled to test it with CI</li>
<li>add new job to test unix port with sys.settrace enabled</li>
<li>add ESP32 build with IDF v4</li>
<li>build more stm32 boards to cover all supported MCUs</li>
<li>build unix nanbox with PYTHON=python2</li>
<li>add BLE submodules to ESP32 IDF4 build</li>
<li>add esp8266 GENERIC_512K build to CI</li>
<li>use "make submodules" to init required modules for each port</li>
<li>add job to build and test unix minimal port</li>
<li>add tests for building and importing dynamic native modules</li>
<li>build urandom native module in coverage job</li>
</ul>
<p>examples:</p>
<ul>
<li>bluetooth: add basic BLE peripheral examples</li>
<li>bluetooth: use UUIDs directly to add services to adv payload</li>
<li>bluetooth/ble_uart_peripheral.py: add usage demo</li>
<li>embedding: replace symlink of mpconfigport.h with real file</li>
<li>bluetooth/ble_uart_peripheral: use append mode for RX char</li>
<li>embedding: remove obsolete fatfs files from build</li>
<li>bluetooth: add helpers for decoding advertising payloads</li>
<li>bluetooth: add example for reading temperature sensor</li>
<li>natmod: add btree example</li>
<li>natmod: add uheapq example</li>
<li>natmod: add uzlib example</li>
<li>natmod: add framebuf example</li>
<li>natmod: add ure example</li>
<li>natmod: add features1 and features2 examples</li>
<li>natmod: add urandom native module example</li>
<li>network: add testing key/cert to SSL HTTP server example</li>
<li>natmod: add very simple features0 example to compute factorial</li>
</ul>
<p>miscellaneous:</p>
<ul>
<li>top: add CODEOFCONDUCT.md document based on the PSF code of conduct</li>
<li>gitignore: put build-*/ pattern in top-level gitignore file</li>
<li>gitattributes: mark *.a files as binary</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.112019-05-29T06:39:45Zv1.11<p>Improved mpy format with support for native code, and new JavaScript …</p>dpgeorgetag:github.com,2008:Repository/290133466/v1.102019-01-25T13:56:52Zv1.10: Vast improvements to native emitter, new nrf port, unified documentation<p>In this release there are a wide range of improvements and additions to<br>
both the core and the ports. In the core the main improvement was to the<br>
native emitter to have much more comprehensive support for general Python<br>
features, such as generators and complex exception handling, and the<br>
generated machine code is smaller and retains its efficiency. Elsewhere,<br>
fuzzy testing was used to find and eliminate some corner-case bugs, user<br>
classes were optimised when they don't use special accessors, underscores<br>
in numeric literals are now supported (PEP515), and the uio.IOBase class<br>
was added to allow user defined streams.</p>
<p>For the extended modules there is now a VfsPosix filesystem component,<br>
a new ucryptolib module with AES support, addition of ure.sub() and of<br>
uhashlib.md5, and the lwIP socket implementation now has working TCP<br>
listen/accept backlog.</p>
<p>Compared to the last release the minimal baseline core code size is reduced<br>
by about 2.2%, down by roughly 1500 bytes for bare-arm port and 3500 bytes<br>
for minimal x86 port. Most other ports have increased in size due to the<br>
addition of new features (eg ucryptolib, ure.sub).</p>
<p>The stm32 port sees the introduction of a new bootloader -- mboot -- which<br>
supports DFU upload via USB FS, USB HS, as well as a custom I2C protocol,<br>
and also support to program external SPI flash. There is significant<br>
refactoring of the USB device driver, improved VCP throughput, and support<br>
for 2x VCP interfaces on the one USB device. lwIP has been integrated, and<br>
support added for SDRAM. Cortex-M0 CPUs are now supported along with<br>
STM32F0 MCUs.</p>
<p>For the esp8266 port the heap is increased by 2kbytes, the radio is<br>
automatically put to sleep if no WLAN interfaces are active, and the UART<br>
can now be disconnected from the REPL and its RX buffer length configured.<br>
Upon soft-reset sockets are now cleaned up.</p>
<p>The esp32 port has added support for external SPI RAM, PPPoS functionality,<br>
improved performance and stability when using threads, and other general<br>
bug fixes.</p>
<p>There is a new nrf port for Nordic MCUs, currently supporting nRF51x and<br>
nRF52x chips.</p>
<p>The docs have now been unified so there is just one set of documentation<br>
covering all ports. And initial documentation for the esp32 port is added.</p>
<p>There are two changes at the Python API level that are not backwards with<br>
previous versions:</p>
<ul>
<li>uos.dupterm now requires that a stream passed to it is derived from<br>
uio.IOBase (or is a native stream object).</li>
<li>The esp32 neopixel driver has had its default timing changed from 400kHz<br>
to 800kHz; existing code that didn't explicitly specify the "timing"<br>
parameter in the NeoPixel constructor may need to be updated to specify<br>
this as "timing=0" to get 400kHz timing.</li>
</ul>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>mpconfig.h: be stricter when autodetecting machine endianness</li>
<li>mpstate.h: adjust start of root pointer section to exclude non-ptrs</li>
<li>nlrx86: use naked attribute on nlr_push for gcc 8.0 and higher</li>
<li>vm: adjust #if logic for gil_divisor so braces are balanced</li>
<li>objfun: fix variable name in DECODE_CODESTATE_SIZE() macro</li>
<li>vm: use enum names instead of magic numbers in multi-opcode dispatch</li>
<li>vm: improve performance of opcode dispatch when using switch stmt</li>
<li>repl: fix handling of unmatched brackets and unfinished quotes</li>
<li>misc.h: add MP_STATIC_ASSERT macro to do static assertions</li>
<li>compile: change comment about ITER_BUF_NSLOTS to a static assertion</li>
<li>emitbc: avoid undefined behavior calling memset() with NULL 1st arg</li>
<li>parsenum: use int instead of mp_int_t for parsing float exponent</li>
<li>parsenum: avoid undefined behavior parsing floats with large exponents</li>
<li>objfloat: fix undefined shifting behavior in high-quality float hash</li>
<li>mpz: avoid undefined behavior at integer overflow in mpz_hash</li>
<li>objfloat: fix undefined integer behavior hashing negative zero</li>
<li>gc: when GC threshold is hit don't unnecessarily collect twice</li>
<li>parsenum: adjust braces so they are balanced</li>
<li>modbuiltins: add support for rounding integers</li>
<li>objgenerator: save state in old_globals instead of local variable</li>
<li>objgenerator: protect against reentering a generator</li>
<li>emit: combine fast and deref into one function for load/store/delete</li>
<li>emit: combine yield value and yield-from emit funcs into one</li>
<li>emit: combine build tuple/list/map emit funcs into one</li>
<li>emit: combine name and global into one func for load/store/delete</li>
<li>emit: combine load/store/delete subscr into one emit function</li>
<li>emit: combine load/store/delete attr into one emit function</li>
<li>emit: combine break_loop and continue_loop into one emit function</li>
<li>emit: combine import from/name/star into one emit function</li>
<li>emit: merge build set/slice into existing build emit function</li>
<li>emit: combine setup with/except/finally into one emit function</li>
<li>objtype: fix assertion failures in mp_obj_new_type by checking types</li>
<li>objtype: fix assertion failures in super_attr by checking type</li>
<li>stream: move definition of mp_stream_p_t from obj.h to stream.h</li>
<li>reader: allow MICROPY_VFS_POSIX to work with MICROPY_READER_POSIX</li>
<li>mpconfig.h: add default MICROPY_VFS_FAT config value</li>
<li>obj.h: introduce a "flags" entry in mp_obj_type_t</li>
<li>objtype: don't expose mp_obj_instance_attr()</li>
<li>objtype: optimise instance get/set/del by skipping special accessors</li>
<li>gc: add gc_sweep_all() function to run all remaining finalisers</li>
<li>lexer: add support for underscores in numeric literals</li>
<li>modio: add uio.IOBase class to allow to define user streams</li>
<li>mkrules.mk: regenerate all qstrs when config files change</li>
<li>stream: introduce and use efficient mp_get_stream to access stream_p</li>
<li>objarray: replace 0x80 with new MP_OBJ_ARRAY_TYPECODE_FLAG_RW macro</li>
<li>add checks for stream objects in print() and sys.print_exception()</li>
<li>compile: combine break and continue compile functions</li>
<li>compile: combine subscript_2 and subscript_3 into one function</li>
<li>compile: combine global and nonlocal statement compile functions</li>
<li>compile: combine or_test and and_test compile functions</li>
<li>compile: combine expr, xor_expr and and_expr into one function</li>
<li>compile: handle return/break/continue correctly in async with</li>
<li>objgenerator: eliminate need for mp_obj_gen_wrap wrapper instances</li>
<li>obj.h: fix broken build for object repr C when float disabled</li>
<li>simplify some cases of accessing the map of module and type dict</li>
<li>objdict: make mp_obj_dict_get_map an inline function</li>
<li>objmodule: make mp_obj_module_get_globals an inline function</li>
<li>obj.h: give compile error if using obj repr D with single-prec float</li>
<li>malloc: give a compile warning if using finaliser without GC</li>
<li>objgenerator: implement <strong>name</strong> with normal fun attr accessor code</li>
<li>emitnative: optimise for iteration asm code for non-debug build</li>
<li>runtime: use mp_obj_new_int_from_ll when return int is not small</li>
<li>stream: introduce MP_STREAM_GET_FILENO ioctl request</li>
<li>objstr: in format error message, use common string with %s for type</li>
<li>asmthumb: optimise native code calling runtime glue functions</li>
<li>mpconfig.h: introduce MICROPY_DEBUG_PRINTER for debugging output</li>
<li>fix compiling with debug enabled and make more use of DEBUG_printf</li>
<li>emitnative: factor common code for native jump helper</li>
<li>emitnative: fix x86 native zero checks by comparing full word</li>
<li>asmx86: use generic emit function to simplify cmp emit function</li>
<li>emitnative: fix native locals stack to start at correct location</li>
<li>emitnative: simplify handling of exception objects from nlr_buf_t</li>
<li>emitnative: allocate space for local stack info as it's needed</li>
<li>compile: for dynamic compiler, widen literal 1 to get correct shift</li>
<li>py.mk: don't hardcode path to libaxtls.a</li>
<li>gc: in gc_alloc, reset n_free var right before search for free mem</li>
<li>objarray: allow to build again when bytearray is disabled</li>
<li>stream: adjust mp_stream_posix_XXX to take void*, not mp_obj_t</li>
<li>emitnative: use small tables to simplify handling of local regs</li>
<li>asmxtensa: handle function entry/exit when stack use larger than 127</li>
<li>asm*: support assembling code to jump to a register, and get PC+off</li>
<li>emitnative: optimise and improve exception handling in native code</li>
<li>asmxtensa: fix bug with order of regs in addi encoding</li>
<li>asmxtensa: optimise loading local addr and support larger offsets</li>
<li>emitnative: fix bug with store of 16 and 32 values in viper ARM mode</li>
<li>asmxtensa: use narrow version of add instr to reduce native code size</li>
<li>emitnx86: fix number of args passed to mp_setup_code_state, 4 not 5</li>
<li>vm: fix handling of finally-return with complex nested finallys</li>
<li>emitnative: cancel caught exception once handled to prevent reraise</li>
<li>emitnative: add support for return/break/continue in try and with</li>
<li>compile: factor code that compiles start/end of exception handler</li>
<li>py.mk: build axtls library directly from its source files</li>
<li>runtime: fix incorrect test for MICROPY_PORT_DEINIT_FUNC</li>
<li>objarray: bytearray: allow 2nd/3rd arg to constructor</li>
<li>emitnative: fix try-finally in outer scope, so finally is cancelled</li>
<li>fix native functions so they run with their correct globals context</li>
<li>optimise call to mp_arg_check_num by compressing fun signature</li>
<li>asmx64: fix bug in assembler when creating disp with r13 and 0 offset</li>
<li>{asmx86,asmx64}: extend test_r8_with_r8 to accept all 8 lower regs</li>
<li>emit: move MP_EMIT_OPT_xxx enums from compile.h to emitglue.h</li>
<li>emit: remove need to call set_native_type to set native/viper mode</li>
<li>emit: remove need to call set_native_type to set viper return type</li>
<li>emit: completely remove set_native_type, arg type is set in compiler</li>
<li>compile: merge viper annotation and normal param compilation stages</li>
<li>compile: factor code that compiles viper type annotations</li>
<li>emitnative: reuse mp_native_type_from_qstr when searching for a cast</li>
<li>make viper functions have the same entry signature as native</li>
<li>emitnative: support arbitrary number of arguments to viper functions</li>
<li>emitnative: use macros instead of raw offsetof for slot locations</li>
<li>emitnative: make viper funcs run with their correct globals context</li>
<li>asmxtensa: make indirect calls using func table, not raw pointers</li>
<li>asmthumb: detect presence of I-cache using CMSIS macro</li>
<li>objtype: clarify comment about configuring inplace op methods</li>
<li>shorten error messages by using contractions and some rewording</li>
<li>objstr: make % (<strong>mod</strong>) formatting operator configurable</li>
<li>modbuiltins: make oct/hex work when !MICROPY_PY_BUILTINS_STR_OP_MODULO</li>
<li>objgenerator: implement PEP479, StopIteration convs to RuntimeError</li>
<li>parsenum: avoid rounding errors with negative powers-of-10</li>
<li>modmath: add math.factorial, optimised and non-opt implementations</li>
<li>objstr: format: return bytes result for bytes format string</li>
<li>fix msvc C++ compiler warnings with MP_OBJ_FUN_MAKE_SIG macro</li>
<li>vm: make small optimisation of BUILD_SLICE opcode</li>
<li>objfloat: fix abs(-0.0) so it returns 0.0</li>
<li>emitnative: place const objs for native code in separate const table</li>
<li>asm*: remove ASM_MOV_REG_ALIGNED_IMM emit macro, it's no longer used</li>
<li>emitnative: change type of const_table from uintptr_t to mp_uint_t</li>
<li>vm: fix case of throwing GeneratorExit type into yield-from</li>
<li>runtime: remove nlr protection when calling <strong>next</strong> in mp_resume</li>
<li>objtype: support full object model for get/set/delitem special meths</li>
<li>vm: when VM raises exception put exc obj at beginning of func state</li>
<li>asmthumb: add wide ldr to handle larger offsets</li>
<li>asmthumb: clean up asm_thumb_bl_ind to use new optimised ldr helper</li>
<li>asmthumb: extend asm entry/exit to handle stack larger than 508 bytes</li>
<li>asmx86: comment out unused asm_x86_nop to prevent compiler warnings</li>
<li>asmx64: extend asm_x64_mov_reg_pcrel to accept high registers</li>
<li>asmxtensa: use proper calculation for const table offset</li>
<li>emitnative: reorder native state on C stack so nlr_buf_t is first</li>
<li>emitnative: implement yield and yield-from in native emitter</li>
<li>runtime: use mp_import_name to implement tail of mp_import_from</li>
<li>runtime: remove comment in mp_import_name about level being 0</li>
<li>obj.h: use uint64_t instead of mp_int_t in repr-D MP_OBJ_IS_x macros</li>
<li>emitnative: clean up unused macro and forward function declarations</li>
<li>asmx64: change stack management to reference locals by rsp not rbp</li>
<li>asmx64: change indirect calls to load fun ptr from the native table</li>
<li>asmx86: change stack management to reference locals by esp not ebp</li>
<li>asmx86: change indirect calls to load fun ptr from the native table</li>
<li>emitnative: load native fun table ptr from const table for all archs</li>
<li>asmarm: simplify asm_arm_bl_ind to only load via index, not literal</li>
<li>asmthumb: remove unused fun_ptr arg from asm_thumb_bl_ind function</li>
<li>emitnative: remove unused ptr argument from ASM_CALL_IND macro</li>
<li>emitnative: consolidate use of stacked immediate values to one func</li>
<li>emitnative: simplify viper mode handling in emit_native_import_name</li>
<li>emitnative: push internal None rather than const obj where possible</li>
<li>emitnative: put None/False/True in global native const table</li>
<li>objtype: remove comment about catching exc from user <strong>getattr</strong></li>
<li>objstr: make str.count() method configurable</li>
<li>objmodule: implement PEP 562's <strong>getattr</strong> for modules</li>
<li>py.mk: when building axtls use -Wno-all to prevent all warnings</li>
<li>compile: fix case of eager implicit conversion of local to nonlocal</li>
<li>compile: remove unneeded variable from global/nonlocal stmt helpers</li>
<li>scope: optimise scope_find_or_add_id to not need "added" arg</li>
<li>runtime: fix qstr assumptions when handling "import *"</li>
<li>unicode: fix check for valid utf8 being stricter about contn chars</li>
<li>py.mk: fix broken Gmane URL</li>
<li>add option to reduce GC stack integer size to save RAM</li>
<li>objboundmeth: support loading generic attrs from the method</li>
<li>obj: add support for <strong>int</strong> special method</li>
<li>objexcept: use macros to make offsets in emergency exc buf clearer</li>
<li>objexcept: make sure mp_obj_new_exception_msg doesn't copy/format msg</li>
<li>objdict: make .fromkeys() method configurable</li>
<li>bc: fix calculation of opcode size for opcodes with map caching</li>
<li>qstr: put a lower bound on new qstr pool allocation</li>
<li>objarray: introduce "memview_offset" alias for "free" field of object</li>
<li>gc: adjust gc_alloc() signature to be able to accept multiple flags</li>
<li>mpconfig: move MICROPY_VERSION macros to static ones in mpconfig.h</li>
<li>runtime: unlock the GIL in mp_deinit function</li>
<li>get optional VM stack overflow check compiling and working again</li>
<li>fix location of VM returned exception in invalid opcode and comments</li>
<li>modio: make iobase_singleton object const so it goes in ROM</li>
<li>obj.h: explicitly cast args to uint32_t in MP_OBJ_FUN_MAKE_SIG</li>
</ul>
<p>extmod:</p>
<ul>
<li>modlwip: update to work with lwIP v2.0</li>
<li>modlwip: set POLLHUP flag for sockets that are new</li>
<li>modlwip: allow to compile with MICROPY_PY_LWIP disabled</li>
<li>modussl_mbedtls: populate sock member right away in wrap_socket</li>
<li>modussl_mbedtls: use mbedtls_entropy_func for CTR-DRBG entropy</li>
<li>vfs: use u_rom_obj properly in argument structures</li>
<li>vfs_fat: rename FileIO/TextIO types to mp_type_vfs_fat_XXX</li>
<li>add VfsPosix filesystem component</li>
<li>vfs: add fast path for stating VfsPosix filesystem</li>
<li>vfs: introduce a C-level VFS protocol, with fast import_stat</li>
<li>moduhashlib: prefix all Python methods and objects with uhashlib</li>
<li>moduhashlib: reorder funcs so that they are grouped by hash type</li>
<li>moduhashlib: allow to disable the sha256 class</li>
<li>moduhashlib: allow using the sha256 implementation of mbedTLS</li>
<li>moduhashlib: make function objects STATIC</li>
<li>uos_dupterm: use native C stream methods on dupterm object</li>
<li>modussl_axtls: fix <strong>del</strong> to point to mp_stream_close_obj</li>
<li>vfs_fat_diskio: factor disk ioctl code to reduce code size</li>
<li>update to use new mp_get_stream helper</li>
<li>moducryptolib: add ucryptolib module with crypto functions</li>
<li>moducryptolib: optionally export MODE_* constants to Python</li>
<li>moducryptolib: refactor functions for clean interface with axTLS</li>
<li>moducryptolib: add an mbedTLS implementation for this module</li>
<li>moducryptolib: prefix all Python methods/objects with ucryptolib</li>
<li>moducryptolib: shorten exception messages to reduce code size</li>
<li>moducryptolib: don't include arpa/inet.h, it's not needed</li>
<li>modure: add match.groups() method, and tests</li>
<li>modure: add match.span(), start() and end() methods, and tests</li>
<li>modure: add ure.sub() function and method, and tests</li>
<li>vfs: support opening a file descriptor (int) with VfsPosix</li>
<li>fix to support compiling with object representation D</li>
<li>vfs_posix: support ilistdir with no (or empty) argument</li>
<li>vfs_posix: use DTTOIF if available to convert type in ilistdir</li>
<li>modlwip: deregister all lwIP callbacks when closing a socket</li>
<li>modussl: support polling in ussl objects by passing through ioctl</li>
<li>modbtree: update to work with new mp_stream_posix_XXX signatures</li>
<li>modussl_axtls: use MP_ROM_PTR for objects in allowed args array</li>
<li>moduhashlib: add md5 implementation, using axTLS</li>
<li>moduhashlib: use newer message digest API for mbedtls >=2.7.0</li>
<li>moduhashlib: add md5 implementation using mbedtls</li>
<li>moductypes: remove BITFIELD from aggregate types enum</li>
<li>moductypes: accept OrderedDict as a structure description</li>
<li>modonewire: fix reset timings to match 1-wire specs</li>
<li>moductypes: make sizeof() accept "layout" parameter</li>
<li>modlwip: implement TCP listen/accept backlog</li>
<li>modlwip: fix read-polling of listening socket with a backlog</li>
<li>moductypes: implement <strong>int</strong> for PTR</li>
<li>moductypes: add aliases for native C types</li>
</ul>
<p>lib:</p>
<ul>
<li>lwip: update lwIP to v2.0.3, tag STABLE-2_0_3_RELEASE</li>
<li>stm32lib: update library to include support for STM32F0 MCUs</li>
<li>utils/printf: make DEBUG_printf implementation more accessible</li>
<li>utils: fix to support compiling with object representation D</li>
<li>utils: expose pyb_set_repl_info function public</li>
<li>libm_dbl/tanh: make tanh more efficient and handle large numbers</li>
<li>libm/math: make tanhf more efficient and handle large numbers</li>
<li>libm/wf_tgamma: fix tgammaf handling of -inf, should return nan</li>
<li>libm_dbl: add implementation of copysign() for DEBUG builds</li>
<li>stm32lib: update library to fix issue with filling USB TX FIFO</li>
<li>libm/math: fix int type in float union, uint64_t should be uint32_t</li>
<li>libm/math: add implementation of __signbitf, if needed by a port</li>
<li>utils/pyexec: forcefully unlock the heap if locked and REPL active</li>
<li>utils: add generic MicroPython IRQ helper functions</li>
<li>stm32lib: update library to get F413 BOR defs and fix gcc 8 warning</li>
</ul>
<p>drivers:</p>
<ul>
<li>wiznet5k: fix bug with MACRAW socket calculating packet size</li>
<li>memory/spiflash: move cache buffer to user-provided config</li>
<li>memory/spiflash: rename functions to indicate they use cache</li>
<li>memory/spiflash: add functions for direct erase/read/write</li>
<li>sdcard: change driver to use new block-device protocol</li>
<li>sdcard: fix bug in computing number of sectors on SD Card</li>
<li>sdcard: do not release CS during the middle of read operations</li>
<li>cc3000: use cc3000_time_t instead of time_t for custom typedef</li>
<li>display/lcd160cr.py: in fast_spi, send command before flushing</li>
<li>sdcard: in test use os.umount and machine module instead of pyb</li>
<li>sdcard: remove debugging print statement in ioctl method</li>
<li>dht: allow open-drain-high call to be DHT specific if needed</li>
</ul>
<p>tools:</p>
<ul>
<li>pydfu.py: increase download packet size to full 2048 bytes</li>
<li>pydfu.py: add support for multiple memory segments</li>
<li>pydfu.py: use getfullargspec instead of getargspec for newer pyusb</li>
<li>pydfu.py: workaround stdio flush error on Windows with Python 3.6</li>
<li>pydfu.py: improve DFU reset, and auto-detect USB transfer size</li>
<li>mpy-tool.py: support freezing of floats in obj representation D</li>
<li>mpy-tool.py: put frozen bignum digit data in ROM, not in RAM</li>
<li>mpy-tool.py: set sane initial dynamic qstr pool size with frozen mods</li>
<li>mpy-tool.py: fix calc of opcode size for opcodes with map caching</li>
<li>mpy-tool.py: fix build error when no qstrs present in frozen mpy</li>
<li>dfu.py: pad image data to 8 byte alignment to support L476</li>
<li>pyboard.py: run exec: command as a string</li>
<li>pyboard.py: change base class of PyboardError to Exception</li>
<li>pyboard.py: in TelnetToSerial.close replace try/except with if</li>
</ul>
<p>tests:</p>
<ul>
<li>basics/special_methods2: enable some additional tests that work</li>
<li>add some tests for bigint hash, float hash and float parsing</li>
<li>extmod: add test for importing a script from a user VFS</li>
<li>extmod: remove conditional import of uos_vfs, it no longer exists</li>
<li>pyb: make i2c and pyb1 pyboard tests run again</li>
<li>io: add simple IOBase test</li>
<li>extmod: add test for VFS and user-defined filesystem and files</li>
<li>unix/extra_coverage: don't test stream objs with NULL write fun</li>
<li>extmod/ujson_dump.py: add test for dump to non-stream object</li>
<li>extmod: add test for ujson.dump writing to a user IOBase object</li>
<li>import: add test for importing invalid .mpy file</li>
<li>add tests using "file" argument in print and sys.print_exception</li>
<li>extmod/ucryptolib*: add tests for ucryptolib module</li>
<li>extmod/ucryptolib*: add into and inplace tests for ucryptolib</li>
<li>basics/namedtuple*: import ucollections first</li>
<li>move non-filesystem io tests to basics dir with io_ prefix</li>
<li>improve feature detection for VFS</li>
<li>run-tests: add nrf target</li>
<li>run-tests: improve crash reporting when running on remote targets</li>
<li>extmod/ujson_dump_iobase.py: return number of bytes written</li>
<li>make tests work on targets without float support</li>
<li>micropython/viper_cond: add test for large int as bool</li>
<li>run-tests: enable bool1.py test with native emitter</li>
<li>micropython: add tests for try and with blocks under native/viper</li>
<li>basics/set_pop.py: sort set before printing for consistent output</li>
<li>basics/int_big_error.py: use bytearray to test for int overflow</li>
<li>modify tests that print repr of an exception with 1 arg</li>
<li>basics: provide .exp files for generator tests that fail PEP479</li>
<li>run-tests: enable native tests for unwinding jumps</li>
<li>basics: add more tests for return within try-finally</li>
<li>basics: add test cases for context manager raising in enter/exit</li>
<li>float/cmath_fun.py: fix truncation of small real part of complex</li>
<li>float: test -inf and some larger values for special math funcs</li>
<li>remove pyboard.py symlink and instead import from ../tools</li>
<li>extmod/uhashlib_md5: add coverage tests for MD5 algorithm</li>
<li>float/float_parse.py: add tests for accuracy of small decimals</li>
<li>cpydiff: add case for difference in behaviour of bytes.format()</li>
<li>micropython: test loading const objs in native and viper funcs</li>
<li>basics: split out gen throw tests from yield-from-throw tests</li>
<li>run-tests: enabled native tests that pass now that yield works</li>
<li>unix/ffi_float: skip if strtof() is not available</li>
<li>uselect_poll_basic: add basic test for uselect.poll invariants</li>
<li>uctypes_sizeof_od: test for using OrderedDict as struct descriptor</li>
<li>basics/class_getattr: remove invalid test for <strong>getattribute</strong></li>
<li>make bytes/str.count() tests skippable</li>
<li>extmod/uctypes_sizeof_layout: test for sizeof of different layout</li>
<li>import: add .exp file for module_getattr.py to not require Py 3.7</li>
<li>cmdline/cmd_showbc.py: fix test to explicitly declare nonlocal</li>
<li>extmod: skip uselect test when CPython doesn't have poll()</li>
<li>import_long_dyn: test for "import *" of a long dynamic name</li>
<li>io: update tests to use uos.remove() instead of uos.unlink()</li>
<li>basics/special_methods: add testcases for <strong>int</strong></li>
<li>extmod/uctypes_ptr_le: test int() operation on a pointer field</li>
<li>extmod/uctypes_error: add test for unsupported unary op</li>
<li>run-tests: make .exp and .out file names unique by prefixing with dir</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>make build independent of extmod directory</li>
<li>Makefile: also undefine MICROPY_FORCE_32BIT and CROSS_COMPILE</li>
</ul>
<p>minimal port:</p>
<ul>
<li>main: allow to compile without GC enabled</li>
</ul>
<p>unix port:</p>
<ul>
<li>support MICROPY_VFS_POSIX and enable it in coverage build</li>
<li>moduos_vfs: add missing uos functions from traditional uos module</li>
<li>mpconfigport.h: enable MICROPY_PY_UCRYPTOLIB</li>
<li>mpconfigport_coverage: enable ure groups, span, start, end and sub</li>
<li>modos: convert dir-type to stat-type for file type in ilistdir</li>
<li>use MP_STREAM_GET_FILENO to allow uselect to poll general objects</li>
<li>Makefile: coverage: Explicitly build "axtls" too</li>
<li>Makefile: enable ussl module with nanbox build</li>
<li>Makefile: remove building of libaxtls.a which is no longer needed</li>
<li>Makefile: build libffi inside $BUILD</li>
<li>mpconfigport_coverage.h: enable uhashlib.md5</li>
<li>modos: include extmod/vfs.h for MP_S_IFDIR, etc</li>
<li>modjni: update .getiter signature to include mp_obj_iter_buf_t*</li>
<li>modjni: get building under coverage and nanbox builds</li>
<li>mpconfigport.h: enable MICROPY_PY_UHASHLIB_MD5 for uhashlib.md5</li>
<li>moduselect: raise OSError(ENOENT) if obj to modify is not in poller</li>
<li>modusocket: initial implementation of socket.settimeout()</li>
<li>modusocket: finish socket.settimeout() implementation</li>
<li>modffi: add support for "q"/"Q" specs (int64_t/uint64_t)</li>
<li>Makefile: allow to override/omit pthread lib name</li>
<li>modos: rename unlink to remove to be consistent with other ports</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable uio.IOBase</li>
<li>call gc_sweep_all() when doing a soft reset</li>
</ul>
<p>windows port:</p>
<ul>
<li>make printing of debugging info work out of the box</li>
<li>msvc: support custom compiler for header generation</li>
<li>msvc: implement file/directory type query</li>
<li>remove remaining traces of old GNU readline support</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>usbd_conf.h: remove unused macros and clean up header file</li>
<li>usbd_conf: changes files to unix line endings and apply styling</li>
<li>usbdev: convert files to unix line endings</li>
<li>usbdev: remove unused RxState variable, and unused struct</li>
<li>usbdev: be honest about data not being written to HID endpoint</li>
<li>usbd_hid_interface: address possible race condition vs. interrupt</li>
<li>i2c: add new hardware I2C driver for F4 MCUs</li>
<li>machine_i2c: use new F4 hardware I2C driver for machine.I2C class</li>
<li>accel: switch pyb.Accel to use new C-level I2C API</li>
<li>modpyb: introduce MICROPY_PY_PYB_LEGACY config option for pyb mod</li>
<li>pyb_i2c: put pyb.I2C under MICROPY_PY_PYB_LEGACY setting</li>
<li>modpyb: remove unused includes and clean up comments</li>
<li>usb: use usbd_cdc_itf_t pointer directly in USB_VCP class</li>
<li>usb: combine CDC lower-layer and interface state into one struct</li>
<li>usb: combine HID lower-layer and interface state into one struct</li>
<li>usb: make CDC endpoint definitions private to core usbdev driver</li>
<li>usb: change CDC tx/rx funcs to take CDC state, not usbdev state</li>
<li>usb: change HID report funcs to take HID state, not usbdev state</li>
<li>usb: add ability to have 2x VCP interfaces on the one USB device</li>
<li>usb: initialise cdc variable to prevent compiler warnings</li>
<li>enable UART7/8 on F4 series that have these peripherals</li>
<li>add support for STM32L496 MCU</li>
<li>boards: add board ld and af.csv files for STM32L496 MCU</li>
<li>boards: add config files for new board, STM32L496GDISC</li>
<li>rtc: don't try to set SubSeconds value on RTC</li>
<li>integrate lwIP as implementation of usocket module</li>
<li>rng: use Yasmarang for rng_get() if MCU doesn't have HW RNG</li>
<li>remove unneeded HTML release notes from usbdev and usbhost dirs</li>
<li>add low-level hardware I2C slave driver</li>
<li>add new component, the mboot bootloader</li>
<li>allow to have no storage support if there are no block devices</li>
<li>add support for Cortex-M0 CPUs</li>
<li>timer: make timer_get_source_freq more efficient by using regs</li>
<li>allow a board to disable MICROPY_VFS_FAT</li>
<li>boards: add startup_stm32f0.s for STM32F0 MCUs</li>
<li>add support for STM32F0 MCUs</li>
<li>boards: add alt-func CSV list and linker script for STM32F091</li>
<li>boards: add NUCLEO_F091RC board configuration files</li>
<li>README: update to include STM32F0 in list of supported MCUs</li>
<li>boards: split combined alt-func labels and fix some other errors</li>
<li>boards: ensure USB OTG power is off for NUCLEO_F767ZI</li>
<li>flash: increase H7 flash size to full 2MiB</li>
<li>modnetwork: don't take netif's down when network is deinited</li>
<li>modnetwork: change base entry of NIC object from type to base</li>
<li>modnetwork: provide generic implementation of ifconfig method</li>
<li>add network driver for Wiznet5k using MACRAW mode and lwIP</li>
<li>modnetwork: fix arg indexing in generic ifconfig method</li>
<li>mpconfigport.h: enable DELATTR_SETATTR and BUILTINS_NOTIMPLEMENTED</li>
<li>mboot: increase USB rx_buf and DFU buf sizes to full 2048 bytes</li>
<li>Makefile: rebuild all qstrs when any board configuration changes</li>
<li>boards/STM32L476DISC: update SPI flash config for cache change</li>
<li>timer: support TIM1 on F0 MCUs</li>
<li>i2c: fix num_acks calculation in i2c_write for F0 and F7 MCU's</li>
<li>i2cslave: fix ordering of event callbacks in slave IRQ handler</li>
<li>mboot: adjust user-reset-mode timeout so it ends with mode=1</li>
<li>boards/stm32f091_af.csv: split labels that are multiple funcs</li>
<li>boards/NUCLEO_F091RC: add Arduino-named pins and rename CPU pins</li>
<li>can: use MP_OBJ_ARRAY_TYPECODE_FLAG_RW where appropriate</li>
<li>spi: fix SPI driver so it can send/recv more than 65535 bytes</li>
<li>mboot: define constants for reset mode cycling and timeout</li>
<li>boards/NUCLEO_F091RC: fix TICK_INT_PRIORITY so it is highest prio</li>
<li>qspi: don't require data reads and writes to be a multiple of 4</li>
<li>mboot: add support for erase/read/write of external SPI flash</li>
<li>boards: add .ld and af.csv files for STM32F722</li>
<li>modnetwork: fix query of DNS IP address in ifconfig()</li>
<li>mboot: fix bug with invalid memory access of USB state</li>
<li>mboot: only compile in code for the USB periph that is being used</li>
<li>mboot: always use a flash latency of 1WS to match 48MHz HCLK</li>
<li>access dict map directly instead of using helper function</li>
<li>support compiling with object representation D</li>
<li>fatfs_port: fix bug when MICROPY_HW_ENABLE_RTC not enabled</li>
<li>timer: use enum for indexing keyword arg in pyb_timer_init_helper</li>
<li>timer: add tick_hz arg to Timer constructor and init method</li>
<li>mphalport: make mp_hal_stdin_rx_chr/stdout_tx_strn weakly linked</li>
<li>flashbdev: fix bug with L4 block cache, dereferencing block size</li>
<li>add method for statically configuring pin alternate function</li>
<li>sdcard: use mp_hal_pin_config_alt_static to configure SD card pins</li>
<li>sdram: add SDRAM driver from OpenMV project</li>
<li>sdram: integrate SDRAM driver into rest of code</li>
<li>sdram: on F7 MCUs enable MPU on external SDRAM</li>
<li>boards/STM32F429DISC: enable onboard SDRAM</li>
<li>sdcard: get SDMMC alt func macro names working with F4,F7,H7 MCUs</li>
<li>Makefile: use -Wno-attributes for ll_usb.c HAL source file</li>
<li>rtc: get rtc.wakeup working on F0 MCUs</li>
<li>modmachine: get machine.sleep working on F0 MCUs</li>
<li>extint.h: use correct EXTI lines for RTC interrupts</li>
<li>modmachine: get machine.sleep working on L4 MCUs</li>
<li>adc: disable VBAT in read channel helper function</li>
<li>adc: fix ADC reading on F0 MCUs to only sample a single channel</li>
<li>spi: round up prescaler calc to never exceed requested baudrate</li>
<li>sdram: allow additional config by a board, and tune MPU settings</li>
<li>boards/STM32F429DISC: add burst len and autorefresh to SDRAM cfg</li>
<li>boards/STM32F7DISC: enable onboard SDRAM</li>
<li>spi: split out pyb.SPI and machine.SPI bindings to their own files</li>
<li>spi: add implementation of low-level SPI protocol</li>
<li>mboot/main: use correct formula for DFU download address</li>
<li>Makefile: allow external BOARD_DIR directory to be specified</li>
<li>boards/STM32L476DISC: enable external RTC xtal to get RTC working</li>
<li>for MCUs that have PLLSAI allow to set SYSCLK at 2MHz increments</li>
<li>dma: pass DMA direction as parameter to dma_init not in cfg struct</li>
<li>dma: reinitialise the DMA if the direction changed on the channel</li>
<li>sdcard: use only a single DMA stream for both SDIO TX/RX</li>
<li>sdcard: move temporary DMA state from BSS to stack</li>
<li>spi: be sure to set all SPI config values in SPI proto init</li>
<li>change flash IRQ priority from 2 to 6 to prevent preemption</li>
<li>flashbdev: protect flash writes from cache flushing and USB MSC</li>
<li>sdcard: fully reset SDMMC periph before calling HAL DMA functions</li>
<li>dma: get DMA working on F0 MCUs</li>
<li>sdram: add support for 32-bit wide data bus and 256MB in MPU cfg</li>
<li>boards/STM32F769DISC: add optional support for external SDRAM</li>
<li>add support for STM32F765xx MCUs</li>
<li>Makefile: include copysign.c in double precision float builds</li>
<li>adc: fix ADC calibration scale for L4 MCUs, they use 3.0V</li>
<li>adc: increase sample time for internal sensors on L4 MCUs</li>
<li>dcmi: add F4/F7/H7 hal files and dma definitions for DCMI periph</li>
<li>uart: add support for USART3-8 on F0 MCUs</li>
<li>boards/NUCLEO_F091RC: enable USART3-8 with default pins</li>
<li>modmachine: re-enable PLLSAI[1] after waking from stop mode</li>
<li>powerctrl: move function to set SYSCLK into new powerctrl file</li>
<li>powerctrl: fix configuring APB1/APB2 frequency when AHB also set</li>
<li>powerctrl: factor code to set RCC PLL and use it in startup</li>
<li>powerctrl: factor code that configures PLLSAI on F7 MCUs</li>
<li>powerctrl: optimise passing of default values to set_sysclk</li>
<li>powerctrl: don't configure clocks if already at desired frequency</li>
<li>usbd_conf: allocate enough space in USB HS TX FIFO for CDC packet</li>
<li>mpconfigport.h: enable math.factorial, optimised version</li>
<li>main: add configuration macros for board to set heap start/end</li>
<li>usbd_cdc_interface: handle disconnect IRQ to set VCP disconnected</li>
<li>usbd_cdc_interface: refactor USB CDC tx code to not use SOF IRQ</li>
<li>spi: fix calculation of SPI clock source on H7 MCUs</li>
<li>boards/stm32h743.ld: fix total flash size, should be 2048k</li>
<li>system_stm32: introduce configuration defines for PLL3 settings</li>
<li>adc: add ADC auto-calibration for L4 MCUs</li>
<li>flashbdev: add missing include for irq.h</li>
<li>servo: only initialise TIM5 if it is needed, to save power</li>
<li>usb: fully deinitialise USB periph when it is deactivated</li>
<li>powerctrl: move (deep)sleep funcs from modmachine.c to powerctrl.c</li>
<li>powerctrl: disable IRQs during stop mode to allow reconfig on wake</li>
<li>boards/STM32F429DISC: enable UART as secondary REPL</li>
<li>uart: always show the flow setting when printing a UART object</li>
<li>mboot: provide led_state_all function to reduce code size</li>
<li>mboot: add support for 4th board LED</li>
<li>boards: add configuration for putting mboot on PYBv1.x</li>
<li>mboot: add documentation for using mboot on PYBv1.x</li>
<li>powerctrl: add support for standby mode on L4 MCUs</li>
<li>uart: add rxbuf keyword arg to UART constructor and init method</li>
<li>boards: add STM32L432KC chip configuration files</li>
<li>add peripheral support for STM32L432</li>
<li>boards: add NUCLEO_L432KC board configuration files</li>
<li>split out UART Python bindings from uart.c to machine_uart.c</li>
<li>uart: factor out code from machine_uart.c that computes baudrate</li>
<li>uart: rework uart_get_baudrate so it doesn't need a UART handle</li>
<li>uart: factor out code to set RX buffer to function uart_set_rxbuf</li>
<li>uart: remove HAL's UART_HandleTypeDef from UART object struct</li>
<li>uart: simplify deinit of UART, no need to call HAL</li>
<li>uart: for UART init, pass in params directly, not via HAL struct</li>
<li>uart: move config of char_width/char_mask to uart.c</li>
<li>uart: add ability to have a static built-in UART object</li>
<li>extint: use correct EXTI channels on H7 MCUs for RTC events</li>
<li>adc: fix calibrated volt/temp readings on H7 by using 16bit scale</li>
<li>adc: increase ADC sampling time for internal sources on H7 MCUs</li>
<li>adc: support 16-bit ADC configuration on H7 MCUs</li>
<li>boards: allow OpenOCD stm_flash procedure to accept single FW img</li>
<li>boards/NUCLEO_L432KC: specify L4 OpenOCD config file for this MCU</li>
<li>main: add board config option to enable/disable mounting SD card</li>
<li>implement UART.irq() method with initial support for RX idle IRQ</li>
<li>uart: fix uart_rx_any in case of no buffer to return 0 or 1</li>
<li>uart: always enable global UART IRQ handler on init</li>
<li>uart: clear overrun error flag after reading RX data register</li>
<li>uart: make sure user IRQs are handled even with a keyboard intr</li>
<li>modmachine: fix reset_cause to correctly give DEEPSLEEP on L4 MCU</li>
<li>sdcard: properly reset SD periph when SDMMC2 is used on H7 MCUs</li>
<li>wdt: make singleton WDT object const so it goes in ROM</li>
<li>main: make thread and FS state static and exclude when not needed</li>
<li>use MICROPY_GC_STACK_ENTRY_TYPE to save some RAM</li>
<li>.gitattributes: remove special text handling of stm32 usbdev files</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable descriptors</li>
<li>enable uio.IOBase</li>
<li>enable ure.sub()</li>
<li>call gc_sweep_all() when doing a soft reset</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>mods: include stream.h to get definition of mp_stream_p_t</li>
<li>mods: access dict map directly instead of using helper func</li>
<li>use MICROPY_GC_STACK_ENTRY_TYPE to save some RAM</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>mpconfigport.h: add some weak links to common Python modules</li>
<li>modnetwork: return empty str for hostname if STA is inactive</li>
<li>modnetwork: raise ValueError when getting invalid WLAN id</li>
<li>modmachine: allow I2C and SPI to be configured out of the build</li>
<li>change UART(0) to attach to REPL via uos.dupterm interface</li>
<li>modules/ntptime.py: remove print of newly-set time</li>
<li>mpconfigport.h: enable ucryptolib module for standard build</li>
<li>esp8266_common.ld: put mp_keyboard_interrupt in iRAM</li>
<li>modesp: run ets_loop_iter before/after doing flash erase/write</li>
<li>let machine.WDT trigger the software WDT if obj is not fed</li>
<li>Makefile: remove build of libaxtls.a and add back tuned config</li>
<li>main: increase heap by 2kb, now that axtls rodata is in ROM</li>
<li>remove scanning of GC pointers in native code block</li>
<li>ets_alt_task: process idle callback if no other events occurred</li>
<li>modnetwork: automatically do radio sleep if no interface active</li>
<li>modnetwork: wait for iface to go down before forcing power mgmt</li>
<li>machine_uart: add rxbuf keyword arg to UART constructor/init</li>
<li>main: activate UART(0) on dupterm for REPL before boot.py runs</li>
<li>esp_mphal: provide mp_hal_pin_od_high_dht so DHT works reliably</li>
<li>implement high-res timers using new tick_hz argument</li>
<li>use MICROPY_GC_STACK_ENTRY_TYPE to save some RAM</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable descriptors</li>
<li>enable uio.IOBase</li>
<li>enable ure.sub()</li>
<li>call gc_sweep_all() when doing a soft reset, cleans up sockets</li>
</ul>
<p>esp32 port:</p>
<ul>
<li>update to latest ESP IDF version</li>
<li>modnetwork: fix STA/AP activate/deactivate for new IDF API</li>
<li>Makefile: update to latest ESP IDF version</li>
<li>esp32.custom_common.ld: put soc code in iram0</li>
<li>silence ESP-IDF log messages when in raw REPL mode</li>
<li>Makefile: extract common C & C++ flags for consistent compilation</li>
<li>add support for building with external SPI RAM</li>
<li>modnetwork: fix isconnected() when using static IP config</li>
<li>remove port-specific uhashlib implementation and use common one</li>
<li>fatfs_port: implement get_fattime so FAT files have a timestamp</li>
<li>update to latest ESP IDF</li>
<li>modules: include umqtt library in frozen modules</li>
<li>mpconfigport.h: enable ucryptolib module</li>
<li>allow to build with uPy floats disabled</li>
<li>reduce latency for handling of scheduled Python callbacks</li>
<li>modnetwork: add support for bssid parameter in WLAN.connect()</li>
<li>implement WLAN.status() return codes</li>
<li>modesp32: add raw temperature reading to esp32 module</li>
<li>modesp32: use MP_ROM_QSTR and MP_ROM_PTR in const locals dict</li>
<li>modnetwork: add network.(W)LAN.ifconfig('dhcp') support</li>
<li>update to latest ESP IDF</li>
<li>fix int overflow in machine.sleep/deepsleep functions</li>
<li>machine_rtc: fix locals dict entry, init qstr points to init meth</li>
<li>modesp32: add hall_sensor() function</li>
<li>network_ppp: add PPPoS functionality</li>
<li>mpthreadport: prevent deadlocks when deleting all threads</li>
<li>allocate task TCB and stack from system heap not uPy heap</li>
<li>machine_uart: add txbuf/rxbuf keyword args to UART construct/init</li>
<li>machine_uart: implement UART.sendbreak() method</li>
<li>machine_pwm: support higher PWM freq by auto-scaling timer res</li>
<li>machine_pwm: on deinit stop routing PWM signal to the pin</li>
<li>modmachine: enable machine.sleep() now that the IDF supports it</li>
<li>mphalport: when tx'ing to REPL only release GIL if many chars sent</li>
<li>modsocket: for socket read only release GIL if socket would block</li>
<li>machine_pin: add Pin.off() and Pin.on() methods</li>
<li>Makefile: use system provided math library rather than uPy one</li>
<li>modules/neopixel.py: change NeoPixel to different default timings</li>
<li>machine_hw_spi: use separate DMA channels for HSPI and VSPI</li>
<li>machine_hw_spi: make HW SPI objects statically allocated</li>
<li>implement high-res timers using new tick_hz argument</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable descriptors</li>
<li>enable uio.IOBase</li>
<li>enable ure.sub()</li>
<li>call gc_sweep_all() when doing a soft reset</li>
</ul>
<p>nrf port:</p>
<ul>
<li>add new port to Nordic nRF5x MCUs</li>
<li>align help.c builtin help text to use correct type</li>
<li>add WT51822-S4AT board</li>
<li>use --gc-sections to reduce code size</li>
<li>add compile switch to disable VFS</li>
<li>enable Link-time optimizations (LTO)</li>
<li>boards/arduino_primo: add missing hal_rng config used by random mod</li>
<li>implement NVMC HAL</li>
<li>disable FAT/VFS by default</li>
<li>hal/nvmc: remove pre-compiler error thrown in nvmc.h, if on nrf52</li>
<li>hal/hal_nvmc: fix non-SD code</li>
<li>boards: update linker scripts</li>
<li>add micro:bit filesystem</li>
<li>drivers/bluetooth/ble_drv: don't handle non-events</li>
<li>modules/uos/microbitfs: make OSError numeric</li>
<li>main: run boot.py and main.py on startup</li>
<li>use micropython libm to save flash</li>
<li>main: add ampy support</li>
<li>drivers/bluetooth: start advertising after disconnect</li>
<li>update usage of mp_obj_new_str by removing last parameter</li>
<li>remove default FROZEN_MPY_DIR</li>
<li>option to enable Ctrl-C in NUS console</li>
<li>boards/microbit: add copy of microbit display and image files</li>
<li>boards/microbit: add copy of microbit font type from microbit-dal</li>
<li>boards/microbit: rename display/image files from .cpp to .c ext</li>
<li>boards/microbit: update board modules from C++ to C-code</li>
<li>boards/microbit: add framework updates to build micro:bit modules</li>
<li>boards/microbit: attempt to get working display/images without FP</li>
<li>boards/microbit: add modmicrobit.h to expose module init function</li>
<li>boards/microbit: include modmicrobit.h in board_modules.h</li>
<li>drivers/softpwm: rename init function to softpwm_init0</li>
<li>drivers/ticker: rework ticker functions for microbit display/music</li>
<li>boards/microbit: update to work with new ticker code</li>
<li>modules/music: remove init of softpwm/ticker upon music module load</li>
<li>update main.c to init relevant board drivers, if enabled</li>
<li>boards/microbit: move microbit target to custom linker script</li>
<li>boards/microbit/modules: fix tabbing in modmicrobit.c</li>
<li>boards/microbit: add temperature back to microbit module</li>
<li>boards/microbit: update docs on top level tick low pri callback</li>
<li>change board module header from board_modules.h to boardmodules.h</li>
<li>add if-def around inclusion of nrf_sdm.h in main</li>
<li>boards/microbit: enable music, display, image, microbit module</li>
<li>drivers/bluetooth: reset evt_len to size of static buffer each iter</li>
<li>add support for s132 v5.0.0 bluetooth stack (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="25435189" data-permission-text="Title is private" data-url="https://github.com/micropython/micropython/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/micropython/micropython/pull/139/hovercard" href="https://github.com/micropython/micropython/pull/139">micropython#139</a>)</li>
<li>change PYB prefix to MPY</li>
<li>only search for frozen files if FROZEN_MPY_DIR is set</li>
<li>mpconfigport: reduce GC stack size for nrf51</li>
<li>modules/machine/pin: disable pin debug by default</li>
<li>boards/common.ld: avoid overflowing the .text region</li>
<li>drivers/ble_drv: fixing sd_ble_enable bug for SD s132 v.2.0.1</li>
<li>make machine.UART optional</li>
<li>fix stack size in ld script and enable MICROPY_STACK_CHECK</li>
<li>improve include of boardmodules.mk</li>
<li>make LTO configurable via Makefile flag</li>
<li>boards/microbit/modules: initialize variable in microbit_sleep</li>
<li>replace custom-HAL with nrfx-HAL</li>
<li>fix NUS console when using boot.py or main.py</li>
<li>Makefile: fix .PHONY target</li>
<li>enable -g flag by default</li>
<li>make linker scripts more modular</li>
<li>remove port member from Pin object</li>
<li>modules/machine/pin: add support for IRQ on Pin's</li>
<li>modules/machine/spi: sPIM (EasyDMA) backend for nrf52x</li>
<li>drivers/bluetooth/ble_drv: increase max transfers in progress</li>
<li>gccollect: use the SP register instead of MSP</li>
<li>boards: remove unused defines from board config headers</li>
<li>boards/wt51822_s4at: fixes after nrfx and Pin IRQ introduction</li>
<li>modules/random: rename port config for RNG</li>
<li>modules: align method to resolve pin object</li>
<li>adc: allow for external use of new and value read function</li>
<li>spi: allow for external use of new and transfer function</li>
<li>return immediatly from mp_hal_delay_us if 0us is given</li>
<li>modules/machine/adc: fix to make adc.c compile for nrf51 targets</li>
<li>bluetooth: fixes for s132 v5 BLE stack</li>
<li>Makefile: use "standard" GCC -fshort-enums instead of --short-enums</li>
<li>Makefile: remove -fstack-usage</li>
<li>Makefile: use C11 instead of Gnu99</li>
<li>Makefile: refine dead-code elimination parameters</li>
<li>modules/machine/adc: don't compare -1 to an unsigned number</li>
<li>modules/uos/microbitfs: fix errno defines</li>
<li>modules/uos/microbitfs: remove unused uos_mbfs_mount</li>
<li>enable micro:bit FS by default</li>
<li>boards/feather52: move phony targets to main Makefile</li>
<li>modules/machine/spi: move enable-guard to prevent wrong includes</li>
<li>nrfx_config: move back nrf52832 to use non-EasyDMA SPI</li>
<li>move pyb module to boards module</li>
<li>add support for reading output pin state</li>
<li>generalize feather52 target</li>
<li>bluetooth: add support for s132/s140 v6, remove s132 v2/3/5</li>
<li>boards: check for stack/heap size using an assert</li>
<li>quick-fix on const objects with open array dimension in objtuples</li>
<li>bluetooth: replace BLE REPL (WebBluetooth) URL</li>
<li>add explicit make flag for oofatfs</li>
<li>compile nlr objects with -fno-lto flag</li>
<li>upgrade to nrfx 1.1.0</li>
<li>drivers: add license text to ticker.h and softpwm.h</li>
<li>use mp_raise_ValueError instead of nlr_raise(...)</li>
<li>include $(SRC_MOD) in the build</li>
<li>Makefile: make sure dependencies for pins_gen.c are correct</li>
<li>properly use (void) instead of () for function definitions</li>
<li>boards/microbit: use MICROPY_PY_BUILTINS_FLOAT to detect FP support</li>
<li>update nrfjprog links to allow to download any version</li>
<li>drivers/flash: fix incorrect page alignment check</li>
<li>uos: add mbfs <strong>enter</strong> and <strong>exit</strong> handlers</li>
<li>enable all PWM, RTC and Timer instances for nrf52840</li>
<li>correct index checking of ADC/PWM/RTCounter instances</li>
<li>use separate config for each PWM instance</li>
<li>uart: remove unused UART.char_width field</li>
<li>uart: fix UART.writechar() to write just 1 byte</li>
<li>bluetooth: set GAP_ADV_MAX_SIZE to 31 (s132/s140)</li>
<li>bluetooth: update BLE stack download script</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>update to compile with latest xc16 v1.35 compiler</li>
</ul>
<p>teensy port:</p>
<ul>
<li>add own uart.h to not rely on stm32's version of the file</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>README: hint about existence of qemu_x86_nommu</li>
<li>main: after builtin testsuite, drop to REPL</li>
<li>mpconfigport.h: enable uhashlib and ubinascii modules</li>
<li>modzsensor: zephyr sensor subsystem bindings</li>
<li>prj_base.conf: enable DHCP and group static IPs together</li>
<li>add prj_disco_l475_iot1.conf with sensor drivers</li>
<li>Makefile: add kobj_types_h_target to Z_EXPORTS</li>
<li>prj_base.conf: remove outdated CONFIG_NET_NBUF_RX_COUNT option</li>
<li>prj_qemu_x86.conf: remove outdated CONFIG_RAM_SIZE</li>
<li>rename CONFIG_CONSOLE_PULL to CONFIG_CONSOLE_SUBSYS</li>
<li>prj_base.conf: update for net_config subsys refactor</li>
<li>CMakeLists: update for latest Zephyr CMake usage refactorings</li>
</ul>
<p>docs:</p>
<ul>
<li>library: add documentation for ucollections.deque</li>
<li>ucryptolib: add docs for new ucryptolib module</li>
<li>usocket: getaddrinfo: describe af/type/proto optional params</li>
<li>usocket: minor fixes to grammar of getaddrinfo</li>
<li>uos: make it clear that block device block_num param is an index</li>
<li>ure: document sub(), groups(), span(), start() and end()</li>
<li>ure: document some more supported regex operators</li>
<li>pyboard: for latex build, use smaller quickref jpg, and no gifs</li>
<li>library: remove "only" directive from all pyb module docs</li>
<li>library/machine.UART: remove conditional docs for wipy port</li>
<li>library/machine: remove conditional docs for wake_reason function</li>
<li>library/machine: remove conditional docs for rng function</li>
<li>library/index: remove all conditionals from library index</li>
<li>library/index: add hint about using help('modules') for discovery</li>
<li>reference/index: remove conditional for inline asm docs</li>
<li>library/machine: remove conditionals in machine class index</li>
<li>move WiPy specific Timer class to separate doc file</li>
<li>library/machine.I2C.rst: clarify availability of primitive I2C ops</li>
<li>library/machine.UART.rst: specify optional txbuf and rxbuf args</li>
<li>library/pyb: add deprecation warning for mount and old block proto</li>
<li>pyboard: fix to use Sphinx style for internal/external links</li>
<li>library/machine.SPI: add note about baudrate imprecision</li>
<li>library/network: move specific network classes to their own file</li>
<li>library/network: make AbstractNIC methods layout correctly</li>
<li>unify all the ports into one set of documentation</li>
<li>remove sphinx_selective_exclude, it's no longer used</li>
<li>wipy: fix links to network.Server, and markup for boot.py</li>
<li>uselect: describe more aspects of poll.register/modify behavior</li>
<li>machine.Pin: add note regarding irq handler argument</li>
<li>machine.Pin: document "hard" argument of Pin.irq method</li>
<li>uio: document StringIO/BytesIO(alloc_size) constructors</li>
<li>library/uctypes: add examples and make general updates</li>
<li>conf.py: use https for intersphinx link to docs.python.org</li>
<li>ure: fully describe supported syntax subset, add example</li>
<li>differences: clarify the differences are against Python 3.4</li>
<li>add initial docs for esp32 port, including quick-ref and general</li>
<li>library: add documentation for esp32 module</li>
</ul>
<p>travis:</p>
<ul>
<li>install explicit version of urllib3 for coveralls</li>
<li>use build stages and parallel jobs under Travis CI</li>
<li>add nrf port to Travis CI build</li>
</ul>
<p>examples:</p>
<ul>
<li>embedding: add code markup and fix typo in README.md</li>
<li>embedding: fix reference to freed memory, lexer src name</li>
<li>embedding: fix hard-coded MP_QSTR_ value</li>
<li>unix/ffi_example: clean up and update the ffi example</li>
</ul>
<p>README:</p>
<ul>
<li>update list of ports to include esp32 and nrf</li>
<li>remove references to "make axtls", it's no longer needed</li>
<li>remove text about selecting different ports in the docs</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.9.42018-05-11T06:40:09Zv1.9.4<p>Parser size reduced, new Python stack, stm32 improvements, new esp32 …</p>dpgeorgetag:github.com,2008:Repository/290133466/v1.9.32017-11-01T00:20:08Zv1.9.3: Introduction of ports subdirectory where all ports are moved to<p>The main change in this release is the introduction of a "ports/"<br>
subdirectory at the top-level of the repository, and all of the ports are<br>
moved here. In the process the "stmhal" port is renamed to "stm32" to<br>
better reflect the MCU that it targets. In addition, the STM32 CMSIS and<br>
HAL sources are moved to a new submodule called "stm32lib".</p>
<p>The bytecode has changed in this release, compared to the previous release,<br>
and as a consequence the .mpy version number has increased to version 3.<br>
This means that scripts compiled with the previous mpy-cross must be<br>
recompiled to work with this new version.</p>
<p>There have also been various enhancements and optimisations, such as:<br>
check for valid UTF-8 when creating str objects, support for reverse<br>
special binary operations like <strong>radd</strong>, full domain checking in the math<br>
module, support for floor-division and modulo in the viper emitter,<br>
and addition of stack overflow checking when executing a regex.</p>
<p>The stm32 port sees improved support for F7 MCUs, addition of a new board<br>
B_L475E_IOT01A based on the STM32L475, and support for the Wiznet W5500<br>
chipset along with improved socket behaviour.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>objstr: startswith, endswith: check arg to be a string</li>
<li>nlrx86,x64: replace #define of defined() with portable macro usage</li>
<li>objtype: handle NotImplemented return from binary special methods</li>
<li>objtype: mp_obj_class_lookup: improve debug logging</li>
<li>map: remove unused new/free functions</li>
<li>make m_malloc_fail() have void return type, since it doesn't return</li>
<li>modstruct: in struct.pack, stop converting if there are no args left</li>
<li>modstruct: check and prevent buffer-read overflow in struct unpacking</li>
<li>modstruct: check and prevent buffer-write overflow in struct packing</li>
<li>nlrthumb: get working again on standard Thumb arch (ie not Thumb2)</li>
<li>objfloat: fix binary ops with incompatible objects</li>
<li>obj: fix comparison of float/complex NaN with itself</li>
<li>objtype: implement fallback for instance inplace special methods</li>
<li>objtuple: properly implement comparison with incompatible types</li>
<li>objstr: add check for valid UTF-8 when making a str from bytes</li>
<li>objlist: properly implement comparison with incompatible types</li>
<li>runtime0.h: move relational ops to the beginning of mp_binary_op_t</li>
<li>runtime0.h: move MP_BINARY_OP_DIVMOD to the end of mp_binary_op_t</li>
<li>objtype: make sure mp_binary_op_method_name has full size again</li>
<li>runtime0.h: put inplace arith ops in front of normal operations</li>
<li>builtinhelp: simplify code slightly by extracting object type</li>
<li>runtime: implement dispatch for "reverse op" special methods</li>
<li>nlrx86: fix building for Android/x86</li>
<li>builtinhelp: change signature of help text var from pointer to array</li>
<li>runtime.h: change empty mp_warning macro so var-args are non empty</li>
<li>modbuiltins: implement abs() by dispatching to MP_UNARY_OP_ABS</li>
<li>{objfloat,objcomplex}: optimise MP_UNARY_OP_ABS by reusing variables</li>
<li>mpconfig.h: add note that using computed gotos in VM is not C99</li>
<li>objstr: strip: don't strip "\0" by default</li>
<li>objexcept: prevent infinite recursion when allocating exceptions</li>
<li>stream: remove unnecessary checks for NULL return from vstr_add_len</li>
<li>vstr: raise a RuntimeError if fixed vstr buffer overflows</li>
<li>vm: use lowercase letter at start of exception message</li>
<li>persistentcode: define mp_raw_code_save_file() for any unix target</li>
<li>add config option to print warnings/errors to stderr</li>
<li>objfloat: support raising a negative number to a fractional power</li>
<li>objset: simplify set and frozenset by separating their locals dicts</li>
<li>objset: check that RHS of a binary op is a set/frozenset</li>
<li>objset: include the failed key in a KeyError raised from set.remove</li>
<li>objtype: change type of enum-to-qstr table to uint16_t to save space</li>
<li>objstr: make empty bytes object have a null-terminating byte</li>
<li>mpprint: only check for null string printing when NDEBUG not defined</li>
<li>objtype: clean up unary- and binary-op enum-to-qstr mapping tables</li>
<li>persistentcode: bump .mpy version number to version 3</li>
<li>bc: update opcode_format_table to match the bytecode</li>
<li>modmath: add full checks for math domain errors</li>
<li>modmath: convert log2 macro into a function</li>
<li>formatfloat: don't print the negative sign of a NaN value</li>
<li>formatfloat: use standard isinf, isnan funcs instead of custom ones</li>
<li>modbuiltins: use existing utf8_get_char helper in builtin ord func</li>
<li>emitnative: implement floor-division and modulo for viper emitter</li>
<li>objtype: use CPython compatible method name for sizeof</li>
<li>objtype: fit qstrs for special methods in byte type</li>
<li>objtype: define all special methods if requested</li>
<li>objtype: introduce MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS</li>
</ul>
<p>extmod:</p>
<ul>
<li>modubinascii: only include uzlib/tinf.h when it's really needed</li>
<li>modussl_mbedtls: allow to compile with MBEDTLS_DEBUG_C disabled</li>
<li>machine_pinbase: put PinBase singleton in ROM</li>
<li>re1.5: upgrade to v0.8.2, adds hook for stack overflow checking</li>
<li>modure: add stack overflow checking when executing a regex</li>
<li>uos_dupterm: update uos.dupterm() and helper funcs to have index</li>
<li>uos_dupterm: swallow any errors from dupterm closing the stream</li>
<li>vfs: replace VLA in proxy func with small, static sized array</li>
<li>modussl: add finaliser support for ussl objects</li>
<li>modussl_mbedtls: allow to compile with unix coverage build</li>
</ul>
<p>lib:</p>
<ul>
<li>add new submodule, stm32lib containing STM32 CMSIS and HAL source</li>
<li>embed/abort_: use mp_raise_msg helper function</li>
<li>libm: fix tanhf so that it correctly handles +/- infinity args</li>
<li>libm: remove implementation of log2f, use MP_NEED_LOG2 instead</li>
<li>axtls: update, support for SSL_EAGAIN return code</li>
<li>berkeley-db-1.xx: update, allow to override MINCACHE, DEFPSIZE</li>
</ul>
<p>drivers:</p>
<ul>
<li>memory/spiflash: change from hard-coded soft SPI to generic SPI</li>
<li>display/ssd1306.py: improve performance of graphics methods</li>
<li>nrf24l01: make nRF24L01 test script more portable</li>
<li>display/ssd1306: implement SSD1306_I2C poweron method</li>
<li>display/ssd1306: make poweron() work the same with SSD1306_SPI</li>
<li>wiznet5k: improve the performance of socket ops with threading</li>
<li>wiznet5k: get low-level W5500 driver working</li>
</ul>
<p>tools:</p>
<ul>
<li>upip: upgrade to 1.2.2</li>
<li>pyboard: use repr() when quoting data in error messages</li>
<li>pyboard: update docstring for additional device support</li>
</ul>
<p>tests:</p>
<ul>
<li>object_new: better messages, check user <strong>new</strong>() method</li>
<li>class_new: add checks for <strong>init</strong> being called and other improvements</li>
<li>class_new: add another testcase for <strong>new</strong>/<strong>init</strong> interaction</li>
<li>class_inplace_op: test for inplace op fallback to normal one</li>
<li>run-bench-tests: update locations of executables, now in ports/</li>
<li>class_reverse_op: test for reverse arith ops special methods</li>
<li>run-tests: skip class_inplace_op for minimal profile</li>
<li>run-tests: fix copy-paste mistake in var name</li>
<li>cpydiff: add cases for locals() discrepancies</li>
<li>extmod: add test for ure regexes leading to infinite recursion</li>
<li>extmod: add test for '-' in character class in regex</li>
<li>run-tests: close device under test using "finally"</li>
<li>net_inet: update tls test to work with CPython and incl new site</li>
</ul>
<p>unix port:</p>
<ul>
<li>rename modsocket.c to modusocket.c</li>
<li>modusocket: remove #if MICROPY_SOCKET_EXTRA code blocks</li>
<li>enable MICROPY_PY_REVERSE_SPECIAL_METHODS</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>modmachine: make machine.bootloader() work when MPU is enabled</li>
<li>modmachine: improve support for sleep/deepsleep on F7 MCUs</li>
<li>compute PLL freq table during build instead of at run time</li>
<li>modmachine: for F7 MCU, save power by reducing internal volt reg</li>
<li>boards/pllvalues.py: make script work with both Python 2 and 3</li>
<li>Makefile: use lib/stm32lib instead of local cmsis and hal files</li>
<li>remove cmsis and hal files, they are now a submodule</li>
<li>Makefile: automatically fetch stm32lib submodule if needed</li>
<li>update to new STM Cube HAL library</li>
<li>fix clock initialisation of L4 MCUs</li>
<li>rename stmhal port directory to stm32</li>
<li>remove unused usbd_msc.c file</li>
<li>boards: change remaining stm32f4xx_hal_conf.h to unix line ending</li>
<li>boards: change linker scripts to use "K" instead of hex byte size</li>
<li>boards: fix I2C1 pin mapping on NUCLEO_F401RE/F411RE boards</li>
<li>i2c: when scanning for I2C devices only do 1 probe per address</li>
<li>modnwwiznet5k: release the GIL on blocking network operations</li>
<li>boards: add new board B_L475E_IOT01A based on STM32L475</li>
<li>make-stmconst.py: make sure mpz const data lives in ROM</li>
<li>timer: make pyb.Timer() instances persistent</li>
<li>mpconfigport.h: add configuration for max periphs on L4 series</li>
<li>usbdev: make the USBD callback struct const so it can go in ROM</li>
<li>usbdev: change static function variable to non-static</li>
<li>usbdev: put all CDC state in a struct</li>
<li>usbdev: put all HID state in a struct</li>
<li>usbdev: simplify CDC tx/rx buffer passing</li>
<li>usbdev: simplify HID tx/rx buffer passing</li>
<li>usbdev/core: add state parameter to all callback functions</li>
<li>usbdev: put all state for the USB device driver in a struct</li>
<li>usbdev: simplify pointers to MSC state and block dev operations</li>
<li>usbdev: merge all global USB device state into a single struct</li>
<li>usbdev: make device descriptor callbacks take a state pointer</li>
<li>usbdev: move all the USB device descriptor state into its struct</li>
<li>timer: enable ARPE so that timer freq can be changed smoothly</li>
<li>modnwwiznet5k: get the IP address of an established socket</li>
<li>boards: fix typos in stm32f767_af.csv table</li>
<li>usbd_cdc_interface: don't reset CDC output buf on initialisation</li>
<li>modnwwiznet5k: implement WIZNET5K.isconnected() method</li>
<li>modusocket: make getaddrinfo() work when passed an IP address</li>
<li>modusocket: return OSError(-2) if getaddrinfo fails</li>
<li>mpconfigport.h: add MICROPY_THREAD_YIELD() macro</li>
<li>modnwwiznet5k: add support for W5500 Ethernet chip</li>
<li>modnwwiznet5k: increase SPI bus speed to 42MHz</li>
<li>modnwwiznet5k: implement stream ioctl for the Wiznet driver</li>
<li>mphalport: improve efficiency of mp_hal_stdout_tx_strn_cooked</li>
<li>make uos.dupterm() conform to specs by using extmod version</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>enable micropython.kbd_intr() method</li>
<li>use standard implementation of keyboard interrupt</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>rename axtls_helpers.c to posix_helpers.c</li>
<li>posix_helpers: set ENOMEM on memory alloc failure</li>
<li>set DEFPSIZE=1024, MINCACHE=3 for "btree" module</li>
<li>esp_mphal: send data in chunks to mp_uos_dupterm_tx_strn</li>
<li>modnetwork: add "bssid" keyword arg to WLAN.connect() method</li>
<li>modules/webrepl_setup: add info about allowed password length</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>Makefile: revamp "test" target after ports were moved to ports/</li>
<li>use CONFIG_NET_APP_SETTINGS to setup initial network addresses</li>
<li>switch to interrupt-driven pull-style console</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>add definition of SEEK_SET to unistd.h</li>
</ul>
<p>docs:</p>
<ul>
<li>pyboard/tutorial: add "timeout=0" to UART in pass-through example</li>
<li>more xrefs to "MicroPython port" in glossary</li>
<li>library/network: fix ref to "socket" module (should be "usocket")</li>
<li>machine.Signal: improve style/grammar and add usage example</li>
<li>library: add description of "index" parameter to uos.dupterm()</li>
<li>library/micropython: fix typo in RST formatting</li>
<li>library/framebuf.rst: generalise constructor to all colour formats</li>
<li>btree: describe page caching policy of the underlying implementation</li>
<li>esp8266/tutorial: update neopixel with example of using 4 bbp</li>
<li>library/network: clarify usage of "bssid" arg in connect() method</li>
<li>pyboard/quickref: add info for Switch, RTC, CAN, Accel classes</li>
<li>pyboard/tutorial: update now that yellow LED also supports PWM</li>
<li>esp8266/quickref: add quickref info for RTC class</li>
<li>library: add missing cross-ref links for classes in pyb module</li>
<li>library/network: update docs to state that W5500 is supported</li>
<li>uselect: document one-shot polling mode</li>
<li>usocket: elaborate descriptions</li>
<li>usocket: document inet_ntop(), inet_pton()</li>
<li>library/network: add dhcp_hostname parameter</li>
<li>reference/isr_rules: minor typo correction</li>
<li>ussl: fix module name refs and use "MicroPython port" term</li>
<li>esp8266/general: add section on TLS limitations</li>
<li>usocket: document that settimeout() isn't supported by all ports</li>
<li>ure: add "|" (alternative) to the list of supported operators</li>
<li>reference/isr_rules.rst: add tutorial on use of micropython.schedule()</li>
</ul>
<p>travis:</p>
<ul>
<li>use --upgrade when pip is installing cpp-coveralls</li>
<li>update build command now that stm32 Wiznet config has changed</li>
</ul>
<p>examples:</p>
<ul>
<li>hwconfig_console: add .on()/.off() methods</li>
</ul>
<p>all:</p>
<ul>
<li>convert mp_uint_t to mp_unary_op_t/mp_binary_op_t where appropriate</li>
<li>convert remaining "mp_uint_t n_args" to "size_t n_args"</li>
<li>make new ports/ sub-directory and move all ports there</li>
<li>update Makefiles and others to build with new ports/ dir layout</li>
<li>remove inclusion of internal py header files</li>
<li>use NULL instead of "" when calling mp_raise exception helpers</li>
</ul>
<p>README:</p>
<ul>
<li>update "Dependencies" section</li>
<li>add explicit section on contributing</li>
<li>add gcc and arm-none-eabi-newlib to list of required components</li>
</ul>
<p>.gitattributes:</p>
<ul>
<li>remove obsolete entries for stmhal/hal, stmhal/cmsis</li>
<li>add entries for files that will move to ports/ dir</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.9.22017-08-23T01:46:41Zv1.9.2: Double precision math library and support on pyboard, and improved ussl<p>This release brings general improvements and bug fixes to the core and<br>
various ports, as well as documentation additions, clean-ups and better<br>
consistency. And effort has been made to clean up the source code to<br>
make it more consistent across the core and all ports.</p>
<p>There is a new tool "mpy_bin2res.py" to convert arbitrary (binary) files<br>
to Python resources for inclusion in source code (frozen or otherwise).</p>
<p>The ussl module has seen improvements, including implementation of<br>
server_hostname (for axtls) and server_side mode (for mbedtls).</p>
<p>There is now a double-precision float math library and stmhal has support<br>
to build firmware with software or hardware double-precision.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>formatfloat: fix number of digits and exponent sign when rounding</li>
<li>modthread: raise RuntimeError in release() if lock is not acquired</li>
<li>compile: raise SyntaxError if positional args are given after <em>/</em>*</li>
<li>objint: support "big" byte-order in int.to_bytes()</li>
<li>objint: in to_bytes(), allow length arg to be any int and check sign</li>
<li>compile: fix bug with break/continue in else of optimised for-range</li>
<li>compile: optimise emitter label indices to save a word of heap</li>
<li>builtinimport: remove unreachable code for relative imports</li>
<li>objnamedtuple: simplify and remove use of alloca building namedtuple</li>
<li>mpprint: remove unreachable check for neg return of mp_format_float</li>
<li>binary: add missing "break" statements</li>
<li>runtime: mark m_malloc_fail() as NORETURN</li>
<li>objstr: remove unnecessary "sign" variable in formatting code</li>
<li>vm: make "if" control flow more obvious in YIELD_FROM opcode</li>
<li>modmath: check for zero division in log with 2 args</li>
<li>makeversionhdr.py: update to parse new release line in docs/conf.py</li>
<li>objdict: factorise dict accessor helper to reduce code size</li>
<li>change mp_uint_t to size_t in builtins code</li>
<li>repl: change mp_uint_t to size_t in repl helpers</li>
<li>compile: combine arith and bit-shift ops into 1 compile routine</li>
<li>compile: use switch-case to match token and operator</li>
<li>objgenerator: allow to hash generators and generator instances</li>
<li>gc: refactor assertions in gc_free function</li>
<li>vm: make n_state variable local to just set-up part of VM</li>
<li>asmx64: support moving a 64-bit immediate to one of top 8 registers</li>
<li>modmicropython: cast stack_limit value so it prints correctly</li>
<li>builtinevex: add typechecking of globals/locals args to eval/exec</li>
<li>py.mk: make berkeley-db C-defs apply only to relevant source files</li>
<li>mperrno: allow mperrno.h to be correctly included before other hdrs</li>
<li>mpz: make mpz_is_zero() an inline function</li>
<li>implement raising a big-int to a negative power</li>
<li>mkrules.mk: show frozen modules sizes together with executable size</li>
<li>objtuple: allow to use inplace-multiplication operator on tuples</li>
<li>objstr: raise an exception for wrong type on RHS of str binary op</li>
<li>modsys: initial implementation of sys.getsizeof()</li>
<li>binary.c: fix bug when packing big-endian 'Q' values</li>
<li>add verbose debug compile-time flag MICROPY_DEBUG_VERBOSE</li>
<li>binary: change internal bytearray typecode from 0 to 1</li>
<li>objstringio: prevent offset wraparound for io.BytesIO objects</li>
<li>objstringio: fix regression with handling SEEK_SET</li>
<li>stream: seek: Consistently handle negative offset for SEEK_SET</li>
<li>mkrules.mk: use "find -path" when searching for frozen obj files</li>
<li>compile: remove unused pn_colon code when compiling func params</li>
<li>objcomplex: remove unnecessary assignment of variable</li>
<li>formatfloat: don't post-increment variable that won't be used again</li>
<li>use "static inline" for funcs that should be inline</li>
<li>asmthumb: use existing macro to properly clear the D-cache</li>
</ul>
<p>extmod:</p>
<ul>
<li>modussl_axtls: update for axTLS 2.1.3</li>
<li>modussl_axtls: implement server_hostname arg to wrap_socket()</li>
<li>move modonewire.c from esp8266 to extmod directory</li>
<li>modure: if input string is bytes, return bytes results too</li>
<li>modubinascii: add check for empty buffer passed to hexlify</li>
<li>modussl_axtls: allow to close ssl stream multiple times</li>
<li>modussl_mbedtls: support server_side mode</li>
<li>modussl_mbedtls: when reading and peer wants to close, return 0</li>
<li>modframebuf: fix invalid stride for odd widths in GS4_HMSB fmt</li>
<li>modussl_mbedtls: make socket.close() free all TLS resources</li>
<li>modframebuf: consistently use "col" as name for colour variables</li>
<li>modussl_mbedtls: implement non-blocking SSL sockets</li>
<li>machine_signal: fix parsing of invert arg when Pin is first arg</li>
<li>modframebuf: use correct initialization for .locals_dict</li>
<li>modlwip: implement setsockopt(IP_ADD_MEMBERSHIP)</li>
<li>modussl_mbedtls.c: add ussl.getpeercert() method</li>
<li>modubinascii: rewrite mod_binascii_a2b_base64</li>
<li>modubinascii: don't post-increment variable that won't be used</li>
<li>modonewire: rename public module to mp_module_onewire</li>
<li>for uos.stat interpret st_size member as an unsigned int</li>
<li>use "static inline" for funcs that should be inline</li>
</ul>
<p>lib:</p>
<ul>
<li>axtls: upgrade to axTLS 2.1.3 + MicroPython patchset</li>
<li>libm/math: remove implementations of float conversion functions</li>
<li>add libm_dbl, a double-precision math library, from musl-1.1.16</li>
</ul>
<p>drivers:</p>
<ul>
<li>onewire: move onewire.py, ds18x20.py from esp8266 to drivers</li>
<li>onewire: enable pull-up when init'ing the 1-wire pin</li>
</ul>
<p>tools:</p>
<ul>
<li>gen-cpydiff: use case description as 3rd-level heading</li>
<li>pyboard: add license header</li>
<li>mpy_bin2res: tools to convert binary resources to Python module</li>
<li>mpy-tool.py: don't generate const_table if it's empty</li>
<li>mpy-tool.py: fix missing argument in dump() function</li>
</ul>
<p>tests:</p>
<ul>
<li>net_inet/test_tls_sites.py: integration test for SSL connections</li>
<li>net_inet: add tests for accept and connect in nonblocking mode</li>
<li>basics: add tests for for-else statement</li>
<li>net_inet: move tests which don't require full Internet to net_hosted</li>
<li>connect_nonblock: refactor towards real net_hosted test</li>
<li>auto detect floating point capabilites of the target</li>
<li>import: add a test for the builtin <strong>import</strong> function</li>
<li>import: update comment now that uPy raises correct exception</li>
<li>basics/namedtuple1: add test for creating with pos and kw args</li>
<li>unix/extra_coverage: add test for mp_vprintf with bad fmt spec</li>
<li>basics: add tests for arithmetic operators precedence</li>
<li>cpydiff/modules_deque: elaborate workaround</li>
<li>cpydiff/core_class_mro: move under Classes, add workaround</li>
<li>cpydiff/core_arguments: move under Functions subsection</li>
<li>cpydiff/core_class_supermultiple: same cause as core_class_mro</li>
<li>cpydiff: improve wording, add more workarounds</li>
<li>cpydiff: add case for str.ljust/rjust</li>
<li>rename exec1.py to builtin_exec.py</li>
<li>basics/builtin_exec: test various globals/locals args to exec()</li>
</ul>
<p>minimal port:</p>
<ul>
<li>Makefile: enable gc-sections to remove unused code</li>
<li>remove unused stmhal include from Makefile</li>
<li>use size_t for mp_builtin_open argument</li>
</ul>
<p>unix port:</p>
<ul>
<li>modtime: replace strftime() with localtime()</li>
<li>mpconfigport.mk: update descriptions of readline and TLS options</li>
<li>Makefile: disable assertions in the standard unix executable</li>
<li>modjni: convert to mp_rom_map_elem_t</li>
<li>for uos.stat interpret st_size member as an unsigned int</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>mpconfigport.h: remove config of PY_THREAD_GIL to use default</li>
<li>make error messages more consistent across peripherals</li>
<li>add initial implementation of Pin.irq() method</li>
<li>add .value() method to Switch object, to mirror Pin and Signal</li>
<li>move pybstdio.c to lib/utils/sys_stdio_mphal.c for common use</li>
<li>add "quiet timing" enter/exit functions</li>
<li>make available the _onewire module, for low-level bus control</li>
<li>modules: provide sym-link to onewire.py driver</li>
<li>boards/stm32f405.ld: increase FLASH_TEXT to end of 1MiB flash</li>
<li>sdcard: allow a board to customise the SDIO pins</li>
<li>add possibility to build with double-precision floating point</li>
<li>boards: enable double-prec FP on F76x boards</li>
<li>Makefile: use hardware double-prec FP for MCUs that support it</li>
<li>Makefile: rename FLOAT_IMPL to MICROPY_FLOAT_IMPL to match C name</li>
<li>Makefile: add CFLAGS_EXTRA to CFLAGS so cmdline can add options</li>
<li>mpconfigport.h: allow MICROPY_PY_THREAD to be overridden</li>
<li>boards: add configuration files for NUCLEO_F429ZI</li>
<li>boards/NUCLEO_F429ZI: change USB config from HS to FS peripheral</li>
<li>reduce size of ESPRUINO_PICO build so it fits in flash</li>
<li>servo: make pyb.Servo(n) map to Pin('Xn') on all MCUs</li>
<li>servo: don't compile servo code when it's not enabled</li>
<li>use "static inline" for funcs that should be inline</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>modusocket: simplify socket.makefile() function</li>
<li>make non-zero socket timeout work with connect/accept/send</li>
<li>modusocket: fix connect() when in non-blocking or timeout mode</li>
<li>use the name MicroPython consistently in code</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: bump axTLS TLS record buffer size to 5K</li>
<li>Makefile: allow FROZEN_DIR,FROZEN_MPY_DIR to be overridden</li>
<li>Makefile: add LIB_SRC_C variable to qstr auto-extraction list</li>
<li>make onewire module and support code usable by other ports</li>
<li>modonewire: move low-level 1-wire bus code to modonewire.c</li>
<li>modonewire: make timings static and remove onewire.timings func</li>
<li>reinstate 1-wire scripts by sym-linking to drivers/onewire/</li>
<li>move mp_hal_pin_open_drain from esp_mphal.c to machine_pin.c</li>
<li>enable MICROPY_ENABLE_FINALISER</li>
<li>README: make "Documentation" a top-level section</li>
<li>machine_rtc: use correct arithmetic for aligning RTC mem len</li>
<li>mpconfigport_512k: use terse error messages to get 512k to fit</li>
<li>mpconfigport.h: make socket a weak link</li>
<li>modesp: remove unused constants: STA_MODE, etc</li>
<li>general: add known issue of WiFi RX buffers overflow</li>
<li>use size_t for mp_builtin_open argument</li>
<li>fix UART stop bit constants</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>Makefile: rework dependencies and "clean" target</li>
<li>Makefile: revert prj.conf construction rule to the previous state</li>
<li>remove long-obsolete machine_ptr_t typedef's</li>
<li>Makefile: explicitly define default target as "all"</li>
<li>modusocket: allow to use socketized net_context in upstream</li>
<li>modusocket: socket, close: switch to native Zephyr socket calls</li>
<li>modusocket: bind, connect, listen, accept: Swtich to native sockets</li>
<li>modusocket: send: switch to native sockets</li>
<li>modusocket: recv: switch to native sockets</li>
<li>modusocket: fully switch to native Zephyr sockets</li>
<li>modzephyr: add current_tid() and stacks_analyze() functions</li>
<li>prj_base.conf: enable CONFIG_INIT_STACKS</li>
<li>modusocket: update struct sockaddr family field name</li>
<li>prj_96b_carbon.conf: re-enable networking on Carbon</li>
<li>modzephyr: add shell_net_iface() function</li>
</ul>
<p>docs:</p>
<ul>
<li>btree: add hints about opening db file and need to flush db</li>
<li>select: rename to uselect, to match the actual module name</li>
<li>license: update copyright year</li>
<li>esp8266/tutorial/intro: discourage use of 512kb firmwares</li>
<li>esp8266/tutorial/intro: Sphinx requires blank lines around literal blocks</li>
<li>conf.py: include 3 levels of ToC in latexpdf output</li>
<li>gc: mark mem_alloc()/mem_free() as uPy-specific</li>
<li>gc: document gc.threshold() function</li>
<li>builtins: list builtin exceptions</li>
<li>conf.py: set default_role = 'any'</li>
<li>lcd160cr: group related constants together and use full sentences</li>
<li>ref/speed_python: update and make more hardware-neutral</li>
<li>library/gc: fix grammar and improve readability of gc.threshold()</li>
<li>move all ports docs to the single ToC</li>
<li>topindex.html: remove link to wipy.io, it's no longer available</li>
<li>conf.py: add .venv dir to exclude_patterns</li>
<li>move topindex.html to templates/ subdir</li>
<li>differences/index_template: use consistent heading casing</li>
<li>builtins: add AssertionError, SyntaxError, ZeroDivisionError</li>
<li>add glossary</li>
<li>conf.py: switch to "new" format of intersphinx_mapping</li>
<li>conf.py: add file for global replacements definition</li>
<li>library: add CPython docs xref to each pertinent module</li>
<li>replace.inc: add |see_cpython|, to xref individual symbols from CPython</li>
<li>conf.py: set "version" and "release" to the same value</li>
<li>*_index: drop "Indices and tables" pseudo-section</li>
<li>pyboard: move hardware info into General Info chapter</li>
<li>uerrno: document "uerrno" module</li>
<li>esp8266/general.rst: fix name of NTP module</li>
<li>pyboard: move info about using Windows from topindex to general</li>
<li>uzlib: update description of decompress() and mention DecompIO</li>
<li>pyboard/tutorial/amp_skin: add example for playing large WAV files</li>
<li>library/ubinascii: update base64 docs</li>
<li>library/usocket: move socket.error to its own section</li>
<li>library/usocket: describe complete information on address formats</li>
<li>glossary: elaborate on possible MicroPython port differences</li>
<li>glossary: fix typos in micropython-lib paragraph</li>
<li>index: rewrite introduction paragraph to avoid confusion</li>
<li>use the name MicroPython consistently in documentation</li>
<li>consistently link to micropython-lib in glossary</li>
</ul>
<p>all:</p>
<ul>
<li>make more use of mp_raise_{msg,TypeError,ValueError} helpers</li>
<li>unify header guard usage</li>
<li>remove trailing spaces, per coding conventions</li>
<li>don't include system errno.h when it's not needed</li>
<li>use the name MicroPython consistently in comments</li>
<li>make use of $(TOP) variable in Makefiles, instead of ".."</li>
<li>raise exceptions via mp_raise_XXX</li>
<li>make static dicts use mp_rom_map_elem_t type and MP_ROM_xxx macros</li>
</ul>
<p>README:</p>
<ul>
<li>mention support for bytecode and frozen bytecode</li>
<li>improve description of precompiled bytecode; mention mpy-cross</li>
</ul>
<p>CODECONVENTIONS:</p>
<ul>
<li>clarify MicroPython changes sign-off process</li>
<li>start to describe docs conventions</li>
<li>describe docs use of markup for None/True/False</li>
</ul>
<p>travis:</p>
<ul>
<li>build STM32F769DISC board instead of F7DISC to test dbl-prec FP</li>
<li>pin cpp-coveralls at 0.3.12</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.9.12017-06-11T13:04:05Zv1.9.1: Fixes for stmhal USB mass storage, lwIP bindings and VFS regressions<p>This release provides an important fix for the USB mass storage device in<br>
the stmhal port by implementing the SCSI SYNCHRONIZE_CACHE command, which<br>
is now require by some Operating Systems. There are also fixes for the<br>
lwIP bindings to improve non-blocking sockets and error codes. The VFS has<br>
some regressions fixed including the ability to statvfs the root.</p>
<p>All changes are listed below.</p>
<p>py core:</p>
<ul>
<li>modbuiltins: add core-provided version of input() function</li>
<li>objstr: catch case of negative "maxsplit" arg to str.rsplit()</li>
<li>persistentcode: allow to compile with complex numbers disabled</li>
<li>objstr: allow to compile with obj-repr D, and unicode disabled</li>
<li>modsys: allow to compile with obj-repr D and PY_ATTRTUPLE disabled</li>
<li>provide mp_decode_uint_skip() to help reduce stack usage</li>
<li>makeqstrdefs.py: make script run correctly with Python 2.6</li>
<li>objstringio: if created from immutable object, follow copy on write policy</li>
</ul>
<p>extmod:</p>
<ul>
<li>modlwip: connect: for non-blocking mode, return EINPROGRESS</li>
<li>modlwip: fix error codes for duplicate calls to connect()</li>
<li>modlwip: accept: fix error code for non-blocking mode</li>
<li>vfs: allow to statvfs the root directory</li>
<li>vfs: allow "buffering" and "encoding" args to VFS's open()</li>
<li>modframebuf: fix signed/unsigned comparison pendantic warning</li>
</ul>
<p>lib:</p>
<ul>
<li>libm: use isfinite instead of finitef, for C99 compatibility</li>
<li>utils/interrupt_char: remove support for KBD_EXCEPTION disabled</li>
</ul>
<p>tests:</p>
<ul>
<li>basics/string_rsplit: add tests for negative "maxsplit" argument</li>
<li>float: convert "sys.exit()" to "raise SystemExit"</li>
<li>float/builtin_float_minmax: PEP8 fixes</li>
<li>basics: convert "sys.exit()" to "raise SystemExit"</li>
<li>convert remaining "sys.exit()" to "raise SystemExit"</li>
</ul>
<p>unix port:</p>
<ul>
<li>convert to use core-provided version of built-in import()</li>
<li>Makefile: replace references to make with $(MAKE)</li>
</ul>
<p>windows port:</p>
<ul>
<li>convert to use core-provided version of built-in import()</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>Makefile: adjust object-file lists to get correct dependencies</li>
<li>enable micropython.mem_*() functions to allow more tests</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>boards: enable DAC for NUCLEO_F767ZI board</li>
<li>add support for NUCLEO_F446RE board</li>
<li>pass USB handler as parameter to allow more than one USB handler</li>
<li>usb: use local USB handler variable in Start-of-Frame handler</li>
<li>usb: make state for USB device private to top-level USB driver</li>
<li>usbdev: for MSC implement SCSI SYNCHRONIZE_CACHE command</li>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>teensy port:</p>
<ul>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: replace references to make with $(MAKE)</li>
<li>Makefile: add clean-modules target</li>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>modusocket: getaddrinfo: Fix mp_obj_len() usage</li>
<li>define MICROPY_PY_SYS_PLATFORM (to "zephyr")</li>
<li>machine_pin: use native Zephyr types for Zephyr API calls</li>
</ul>
<p>docs:</p>
<ul>
<li>machine.Pin: remove out_value() method</li>
<li>machine.Pin: add on() and off() methods</li>
<li>esp8266: consistently replace Pin.high/low methods with .on/off</li>
<li>esp8266/quickref: polish Pin.on()/off() examples</li>
<li>network: move confusingly-named cc3200 Server class to its reference</li>
<li>uos: deconditionalize, remove minor port-specific details</li>
<li>uos: move cc3200 port legacy VFS mounting functions to its ref doc</li>
<li>machine: sort machine classes in logical order, not alphabetically</li>
<li>network: first step to describe standard network class interface</li>
</ul>
<p>examples:</p>
<ul>
<li>embedding: use core-provided KeyboardInterrupt object</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.92017-05-26T09:07:45Zv1.9: New VFS subsystem and scheduling framework, and less need for the heap<p>This release adds some fundamental new components, allows for more Python<br>
operations without using the heap and has reduced code size and stack<br>
usage.</p>
<p>Changes in the way iterators are handled allows to iterate without<br>
allocating on the heap for the types: tuple, list, str, bytes, bytearray,<br>
array, dict, set, frozenset. It also allows to call the builtins all, any,<br>
min max and sum without allocating heap memory for the iterator argument.<br>
And improvements to the handling of super() means that super().foo() method<br>
calls are now heap-less.</p>
<p>A new generic VFS subsystem has been added which allows to mount arbitrary<br>
filesystems (even written in Python) at the root or at a mount-point within<br>
the root. The FatFS driver has been replaced with an object-oriented<br>
version (oofatfs) which allows a fully customisable filesystem layout.</p>
<p>A scheduling framework has been implemented in the core which gives the<br>
ability to schedule callbacks to be called "as soon as possible". This<br>
allows ports to implement "soft IRQs" which allow the programmer to<br>
allocate memory during an interrupt handler, at the cost of some<br>
performance related to response time of the handler. The new<br>
micropython.schedule() function gives access to the scheduler.</p>
<p>Other improvements to the core include: consts can now be big-nums, for<br>
example "X = const(1 << 100)"; addition of "help('modules')" to list<br>
available modules; stack usage reduced for a Python call by 8 bytes on ARM<br>
Cortex-M architectures; micropython.kbd_intr() function added to disable<br>
Ctrl-C capture; addition of uio.resource_stream(); mpy-cross is built<br>
automatically if needed; a helper tool mpy_cross_all.py is added to run<br>
mpy-cross on an entire project.</p>
<p>The bytecode has changed in this version so existing .mpy files will need<br>
recompiling. There have also been some changes to the C API, most notably<br>
with mp_uint_t changed to size_t in many places.</p>
<p>In the extended modules the following main changes have been made: addition<br>
of machine.Signal class to allow inversion on a Pin; framebuf has new<br>
formats of the form MONO_xxx; addition of uselect.ipoll() for allocation-<br>
free polling; addition of uos.ilistdir() for efficient iteration of a<br>
directory listing; machine.Pin high/low methods are renamed to on/off in<br>
esp8266 and zephyr (this is a backwards-incompatible change);<br>
machine.time_pulse_us() function no longer throws exceptions, but returns<br>
negative values instead.</p>
<p>For stmhal the pyb.fault_debug() function is added, and default behaviour<br>
for a hard-fault is now an immediate reset. There is better support for F7<br>
MCUs, in particular DMA and SD card support. A bug has been fixed with the<br>
USB VCP (USB serial) where it would in rare cases (usually when the host PC<br>
was under load) would lose characters. Pyboard now automatically mounts<br>
all available partitions on the SD card. Multithreading has been<br>
implemented and is available via the _thread module, but this feature is<br>
disabled by default and must be enabled at compile time using the<br>
MICROPY_THREAD and MICROPY_THREAD_GIL options. The ability to skip booting<br>
from SD card is now available by creating an empty file on the flash called<br>
"SKIPSD".</p>
<p>The cc3200 port has had some backwards incompatible changes, in particular<br>
with I2C, Pin, UART and uos. Please see the documentation for the new<br>
behaviour.</p>
<p>The esp8266 port has had a change in the size of the firmware in order to<br>
accommodate additional features. As such the filesystem for this version<br>
is incompatible with v1.8.7 and a device requires backup and erasure before<br>
flashing this version. Soft IRQs are now implemented for Pin and Timer<br>
callbacks, along with the general improvements described above.</p>
<p>In the documentation there is now a section describing the differences<br>
between MicroPython and CPython. And code coverage is up to 98% across py/<br>
and extmod/.</p>
<p>Changes in code size (in bytes) between v1.8.7 and this version are:</p>
<p>bare-arm: -1104<br>
minimal: -1324<br>
unix x64: -1115<br>
unix nanbox: -11106<br>
stmhal: +18116<br>
cc3200: +1032<br>
esp8266: +3060</p>
<p>Note that stmhal has increased significantly due to the addition of frozen<br>
bytecode and the LCD160CR driver.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>builtinimport: raise ValueError for bad relative import, per CPython</li>
<li>builtinimport: remove unreachable code and change obj-import comment</li>
<li>runtime: refactor assert(0) to improve coverage</li>
<li>runtime: fix handling of throw() when resuming generator</li>
<li>objgenerator: when throwing an object, don't make an exc instance</li>
<li>objgenerator: don't raise RuntimeError if GeneratorExit ignored</li>
<li>parse: refactor code to remove assert(0)'s</li>
<li>emitnative: remove assert(0)'s or replace with mp_not_implemented</li>
<li>objexcept: replace if-cond and assert(0) with simple assert</li>
<li>runtime: refactor default case of switch to remove assert(0)</li>
<li>binary: mp_binary_get_size: Raise error on unsupported typecodes</li>
<li>formatfloat: remove unreachable code</li>
<li>objint_mpz: refactor switch-statement to remove unreachable default</li>
<li>mpz: implement mpz_set_from_bytes() as a foundation for int.from_bytes()</li>
<li>objint: from_bytes(): implement "byteorder" param and arbitrary precision</li>
<li>objint_longlong: add stub for mp_obj_int_from_bytes_impl()</li>
<li>add builtin help function to core, with default help msg</li>
<li>move weak-link map to objmodule.c, and expose module maps as public</li>
<li>builtinhelp: implement help('modules') to list available modules</li>
<li>objint: fix left-shift overflow in checking for large int</li>
<li>objmodule: move module init/deinit code into runtime functions</li>
<li>objstr: optimize string concatenation with empty string</li>
<li>showbc: make sure to set the const_table before printing bytecode</li>
<li>py.mk: add CFLAGS_MOD flag to set config file for FatFs</li>
<li>objstringio: allow to specify initial capacity by passing numeric argument</li>
<li>objset: make inplace binary operators actually modify the set</li>
<li>objfloat: raise ZeroDivisionError for 0 to negative power</li>
<li>objcomplex: correctly handle case of 0j to power of something</li>
<li>objset: fix inplace binary ops so frozensets are not modified</li>
<li>added optimised support for 3-argument calls to builtin.pow()</li>
<li>objstr: give correct behaviour when passing a dict to %-formatting</li>
<li>mpconfig.h: move PY_BUILTINS_POW3 config option to diff part of file</li>
<li>objstr: convert some instances of mp_uint_t to size_t</li>
<li>objcomplex: fix typo in ternary expression</li>
<li>asmxtensa.h: explicitly cast args to 32-bits so left-shift is legal</li>
<li>map: change mp_uint_t to size_t where appropriate</li>
<li>nlr: fix execstack builds for ARM</li>
<li>objtype: add <strong>delattr</strong>/<strong>setattr</strong> configured by MICROPY_PY_DELATTR_SETATTR</li>
<li>emitbc: produce correct line number info for large bytecode chunks</li>
<li>objtype: replace non-ASCII single-quote char with ASCII version</li>
<li>modthread: use system-provided mutexs for _thread locks</li>
<li>vm: add MICROPY_PY_THREAD_GIL_VM_DIVISOR option</li>
<li>runtime: convert mp_uint_t to size_t where appropriate</li>
<li>mpz: convert mp_uint_t to size_t where appropriate</li>
<li>mpz: remove obsolete declaration of mpz_as_str_size</li>
<li>mpz: change type of "base" args from mp_uint_t to unsigned int</li>
<li>persistentcode: replace mp_uint_t with size_t where appropriate</li>
<li>objtuple: convert mp_uint_t to size_t where appropriate</li>
<li>objlist: convert mp_uint_t to size_t where appropriate</li>
<li>objdict: convert mp_uint_t to size_t where appropriate</li>
<li>objset: convert mp_uint_t to size_t where appropriate</li>
<li>objstr: convert mp_uint_t to size_t (and use int) where appropriate</li>
<li>objarray: convert mp_uint_t to size_t where appropriate</li>
<li>objfun: convert mp_uint_t to size_t where appropriate</li>
<li>objclosure: convert mp_uint_t to size_t where appropriate</li>
<li>objexcept: convert mp_uint_t to size_t where appropriate</li>
<li>objint: convert mp_uint_t to size_t where appropriate</li>
<li>vm: convert mp_uint_t to size_t where appropriate</li>
<li>add iter_buf to getiter type method</li>
<li>allow bytecode/native to put iter_buf on stack for simple for loops</li>
<li>make FOR_ITER opcode pop 1+4 slots from the stack when finished</li>
<li>optimise storage of iterator so it takes only 4 slots on Py stack</li>
<li>remove unused "use_stack" argument from for_iter_end emit function</li>
<li>runtime: optimise case of identity iterator so it doesn't alloc RAM</li>
<li>compile: optimise list/dict/set comprehensions to use stack iter</li>
<li>de-optimise some uses of mp_getiter, so they don't use the C stack</li>
<li>grammar: group no-compile grammar rules together to shrink tables</li>
<li>lexer: don't generate string representation for period or ellipsis</li>
<li>persistentcode: bump .mpy version due to change in bytecode</li>
<li>lexer: simplify handling of indenting of very first token</li>
<li>lexer: move check for keyword to name-tokenising block</li>
<li>lexer: use strcmp to make keyword searching more efficient</li>
<li>lexer: simplify handling of line-continuation error</li>
<li>do adjacent str/bytes literal concatenation in lexer, not compiler</li>
<li>lexer: convert mp_uint_t to size_t where appropriate</li>
<li>grammar: remove unused rule</li>
<li>objlist: for list slice assignment, allow RHS to be a tuple or list</li>
<li>moduerrno: make uerrno.errorcode dict configurable</li>
<li>moduerrno: make list of errno codes configurable</li>
<li>parse: allow parser/compiler consts to be bignums</li>
<li>create str/bytes objects in the parser, not the compiler</li>
<li>parse: simplify handling of errors by raising them directly</li>
<li>runtime: mp_raise_msg(): Accept NULL argument for message</li>
<li>objarray: disallow slice-assignment to read-only memoryview</li>
<li>map: fix bugs with deletion of elements from OrderedDict</li>
<li>move locals/globals dicts to the thread-specific state</li>
<li>nlr.h: mark nlr_jump_fail as NORETURN</li>
<li>nlrxtensa: convert from assembler to C file with inline asm</li>
<li>nlrx64: convert from assembler to C file with inline asm</li>
<li>nlrx86: convert from assembler to C file with inline asm</li>
<li>py.mk: force nlr files to be compiled with -Os</li>
<li>modsys: use MP_SMALL_INT_MAX for sys.maxsize in case of LONGINT_IMPL_NONE</li>
<li>runtime.c: remove optimization of '*a,=b', it caused a bug</li>
<li>use mp_obj_get_array where sequence may be a tuple or a list</li>
<li>nlrx86: add workaround for Zephyr</li>
<li>nlrx64: fixes to support Mac OS</li>
<li>objint_longlong: implement mp_obj_int_from_bytes_impl()</li>
<li>allow lexer to raise exceptions during construction</li>
<li>objint: allow to print long-long ints without using the heap</li>
<li>emitnative: use assertions and mp_not_implemented correctly</li>
<li>emitnative: remove obsolete commented out code</li>
<li>mpprint: fix int formatting so "+" is printed for 0-valued integer</li>
<li>mkrules.mk: remove special check for "-B" in qstr auto generation</li>
<li>objstr: fix eager optimisation of str/bytes addition</li>
<li>reduce size of mp_code_state_t structure</li>
<li>provide mp_decode_uint_value to help optimise stack usage</li>
<li>objstr: use better msg in bad implicit str/bytes conversion exception</li>
<li>add micropython.schedule() function and associated runtime code</li>
<li>vm: don't release the GIL if the scheduler is locked</li>
<li>bc: provide better error message for an unexpected keyword argument</li>
<li>use size_t as len argument and return type of mp_get_index</li>
<li>sequence: convert mp_uint_t to size_t where appropriate</li>
<li>define and use MP_OBJ_ITER_BUF_NSLOTS to get size of stack iter buf</li>
<li>lexer: remove obsolete comment, since lexer can now raise exceptions</li>
<li>modmath: allow trunc/ceil/floor to return a big int if necessary</li>
<li>objint: handle special case of -0 when classifying fp as int</li>
<li>modbuiltins: for round() builtin use nearbyint instead of round</li>
<li>modbuiltins: allow round() to return a big int if necessary</li>
<li>objtype: use size_t where appropriate, instead of mp_uint_t or uint</li>
<li>objnamedtuple: use size_t where appropriate, instead of mp_uint_t</li>
<li>use mp_locals/mp_globals accessor funcs instead of MP_STATE_CTX</li>
<li>remove MP_STATE_CTX, use MP_STATE_THREAD instead (it's an alias)</li>
<li>objarray: use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>nlrx86: better check for Zephyr (requires 1.7)</li>
<li>obj: change mp_uint_t to size_t for mp_obj_get_array_fixed_n len arg</li>
<li>vm: fix VM opcode tracing to print correct stack pointer</li>
<li>compile: when compiling super(), handle closed-over self variable</li>
<li>objmap: convert mp_uint_t to size_t</li>
<li>use mp_raise_TypeError/mp_raise_ValueError helpers where possible</li>
<li>lexer: simplify and reduce code size for operator tokenising</li>
<li>compile: simplify syntax-error messages for illegal assignments</li>
<li>shorten a couple of error messages</li>
<li>compile: provide terse error message for invalid dict/set literals</li>
<li>convert mp_uint_t to size_t for tuple/list accessors</li>
<li>change mp_uint_t to size_t for mp_obj_str_get_data len arg</li>
<li>objzip: convert mp_uint_t to size_t</li>
<li>obj.h: make sequence grow more efficient and support overlapping</li>
<li>objstr: use MICROPY_FULL_CHECKS for range checking when constructing bytes</li>
<li>add very simple but correct hashing for float and complex numbers</li>
<li>objint: consolidate mp_obj_new_int_from_float to one implementation</li>
<li>raise a ValueError if range() step is zero</li>
<li>objtuple: add support for inplace add (same as normal add)</li>
<li>make sure that static emg-exc-buffer is aligned to size of mp_obj_t</li>
<li>runtime: when init'ing kbd intr exc, use tuple ptr instead of object</li>
<li>objint: extract small int value directly because type is known</li>
<li>objint: use unsigned arithmetic when formatting an integer</li>
<li>obj: clean up and add comments describing mp_obj_type_t struct</li>
<li>optimise types for common case where type has a single parent type</li>
<li>objfloat: add implementation of high-quality float hashing</li>
<li>nlrsetjmp: add check for failed NLR jump</li>
<li>gc: execute finaliser code in a protected environment</li>
<li>modmicropython: add micropython.kbd_intr() function</li>
<li>reduce str/repr precision of float numbers when floats are 30-bit</li>
<li>objtype: mp_obj_new_super doesn't need to be public, so inline it</li>
<li>compile: don't do unnecessary check if parse node is a struct</li>
<li>compile: extract parse-node kind at start of func for efficiency</li>
<li>compile: add COMP_RETURN_IF_EXPR option to enable return-if-else opt</li>
<li>compile: don't do unnecessary check if iter parse node is a struct</li>
<li>compile: refactor handling of special super() call</li>
<li>add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls</li>
<li>mpz: strip trailing zeros from mpz value when set from bytes</li>
<li>mpz: in mpn_sub, use existing function to remove trailing zeros</li>
<li>cleanup use of global DEBUG preprocessor definition</li>
<li>modio: implement uio.resource_stream(package, resource_path)</li>
<li>objint: in int.from_bytes, only create big-int if really needed</li>
<li>modio: resource_stream: Implement "package" param handling</li>
<li>binary: handle storing big-ints to all arrays types</li>
<li>lexer: simplify lexer startup by using dummy bytes and next_char()</li>
<li>mkrules.mk: add dependency of .mpy files upon mpy-cross</li>
<li>lexer: process CR earlier to allow newlines checks on chr1</li>
<li>modsys: update conditionals for code referencing sys.stdout</li>
<li>objstringio: fix StringIO reads at or beyond EOF</li>
<li>sequence: fix boundary errors when slicing with a negative step</li>
<li>objrange: fix slicing of range when step of slice is negative</li>
<li>mkenv.mk: use $(TOP) instead of ".." to reference tools, mpy-cross</li>
<li>vm: fix bug with stackless mode and unwinding of exceptions</li>
<li>vm: fix bug with unwind jump popping the iterator from a for loop</li>
<li>emitbc: fix bug with BC emitter computing Python stack size</li>
<li>mkrules.mk: fix auto-qstr generation when "make -B" is used</li>
<li>objstringio: catch mp_uint_t overflow of stream position in write()</li>
<li>move BYTES_PER_WORD definition from ports to py/mpconfig.h</li>
</ul>
<p>extmod:</p>
<ul>
<li>modframebuf: optimize fill_rect subroutine call</li>
<li>modframebuf: clip pixels drawn by line method</li>
<li>modframebuf: add GS4_HMSB format</li>
<li>vfs_fat: rework so it can optionally use OO version of FatFS</li>
<li>rename vfs_fat_file.h to vfs_fat.h</li>
<li>add generic VFS sub-system</li>
<li>vfs_fat: rework to support new generic VFS sub-system</li>
<li>vfs: add ability for VFS sub-system to import using VfsFat</li>
<li>modlwip: add socket.readinto() method</li>
<li>vfs: expose mp_vfs_mount_t type</li>
<li>vfs_fat: use SECSIZE macro to determine FatFs sector size</li>
<li>machine_signal: implement "Signal" abstraction for machine module</li>
<li>vfs_fat: update to use FF_DIR instead of DIR</li>
<li>vfs: expose lookup_path_raw as mp_vfs_lookup_path</li>
<li>vfs_fat: remove MICROPY_READER_FATFS component</li>
<li>vfs_fat: remove MICROPY_FSUSERMOUNT_ADHOC config option</li>
<li>remove MICROPY_FSUSERMOUNT and related files</li>
<li>vfs_fat: remove MICROPY_FATFS_OO config option</li>
<li>merge old fsusermount.h header into vfs.h and vfs_fat.h</li>
<li>vfs_fat: remove unused fatfs_builtin_open function</li>
<li>vfs_fat: remove unused function fat_vfs_listdir</li>
<li>vfs_reader: fix use of NLR by popping context</li>
<li>vfs_fat.c: use explicit include path for timeutils.h</li>
<li>machine_pulse: make time_pulse_us() not throw exceptions</li>
<li>machine_spi: remove EVENT_POLL_HOOK from soft-SPI transfer func</li>
<li>machine_signal: implement Signal .on() and .off() methods</li>
<li>vfs: allow to mount a block device, not just a VFS object</li>
<li>vfs: raise OSError(EEXIST) on attempt to mkdir a mount point</li>
<li>vfs: allow to stat the root directory</li>
<li>modlwip: add my copyright</li>
<li>modurandom: use mp_raise_ValueError()</li>
<li>modutimeq: make scheduling fair (round-robin)</li>
<li>modutimeq: add peektime() function (provisional)</li>
<li>vfs_fat: remove obsolete and unused str/len members</li>
<li>vfs_fat: allow to compile with MICROPY_VFS_FAT disabled</li>
<li>vfs: rewrite path lookup algo to support relative paths from root</li>
<li>modframebuf: add support for monochrome horizontal format</li>
<li>utime_mphal: don't exit/enter the GIL in generic sleep functions</li>
<li>modlwip: use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>vfs_fat: fix calculation of total blocks in statvfs</li>
<li>moduselect: update to use size_t for array accessor</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>modframebuf: make monochrome bitmap formats start with MONO_</li>
<li>machine_signal: support all Pin's arguments to the constructor</li>
<li>machine_signal: rename "inverted" arg to "invert", it's shorter</li>
<li>moductypes: fix bigint handling for 32-bit ports</li>
<li>crypto-algorithms/sha256: remove non-standard memory.h header</li>
<li>moduselect: convert to MP_ROM_QSTR and friends</li>
<li>moduselect: refactor towards introduction of poll.ipoll()</li>
<li>moduselect: implement ipoll() method for alloc-free polling</li>
<li>modlwip: getaddrinfo: Allow to accept all 6 standard params</li>
<li>modlwip: ioctl POLL: Fix handling of peer closed socket</li>
<li>vfs: allow a VFS to be mounted at the root dir</li>
<li>vfs: implement mp_vfs_ilistdir()</li>
<li>vfs_fat: replace listdir() with implementation of ilistdir()</li>
<li>vfs: use MP_S_IFDIR, MP_S_IFREG consts instead of magic numbers</li>
<li>vfs_fat_misc: remove dot-dirs filter since FatFS already does it</li>
</ul>
<p>lib:</p>
<ul>
<li>utils: remove old pyhelp helper, replaced with py/builtinhelp.c</li>
<li>utils/pyexec: only print help prompt if HELP feature is enabled</li>
<li>oofatfs: add OO version of FatFS library</li>
<li>fatfs: remove old fatfs library component, it's replaced by oofatfs</li>
<li>oofatfs/ffconf.h: allow to configure FS_EXFAT option</li>
<li>oofatfs/ffconf.h: add MICROPY_FATFS_NORTC option</li>
<li>utils/pyexec: allow to compile when the uPy compiler is disabled</li>
<li>utils/pyexec: refactor to put lexer constructors all in one place</li>
<li>memzip: make lexer constructor raise exception when file not found</li>
<li>utils/pyexec: fix bug with pyexec_file not setting flag for source</li>
<li>libm: add implementation of nearbyintf, from musl-1.1.16</li>
<li>netutils: update for changes to mp_obj_str_get_data</li>
<li>utils/pyexec: update event-driven REPL to match non-event REPL</li>
</ul>
<p>drivers:</p>
<ul>
<li>fix some minor spelling mistakes</li>
<li>display: add driver and test for uPy LCD160CR display</li>
<li>memory: add SPI flash driver, written in C</li>
<li>display/lcd160cr: use correct variable in set_power()</li>
<li>display/lcd160cr: fix bugs with lcd.get_pixel()</li>
<li>display/lcd160cr: fix bug with save_to_flash method</li>
<li>display/lcd160cr: add check that JPEG size is less than 65536</li>
<li>nrf24l01: update to work on newer ports, using machine, utime</li>
<li>display/lcd160cr: fix get_line method and enhance screen_dump</li>
<li>display/lcd160cr_test: allow test to take orientation parameter</li>
<li>replace deprecated Pin.high()/low() methods with .<strong>call</strong>(1/0)</li>
</ul>
<p>tools:</p>
<ul>
<li>tinytest-codegen.py: blacklist heapalloc_str.py test for qemu-arm</li>
<li>upip: update to 1.1.5. Better and more user-friendly error handling</li>
<li>add gen-cpydiff.py to generate docs differences</li>
<li>gen-cpydiff.py: set the Python import path to find test modules</li>
<li>gen-cpydiff.py: configurable CPython and micropython executables</li>
<li>tinytest-codegen: update for recent test renaming ("intbig" suffix)</li>
<li>pyboard: tighten up Pyboard object closure on errors</li>
<li>pyboard: add "exec" and "execpty" pseudo-devices support</li>
<li>pyboard: execpty: Use shell=False to workaround some curdir issues</li>
<li>pyboard: processPtyToTerminal: Add workaround for PySerial bug</li>
<li>pyboard: provide more details when expected reply not received</li>
<li>mpy-tool: make work if run from another directory</li>
<li>upip: upgrade to 1.1.6, supports commented lines in requirements.txt</li>
<li>upip: upgrade to 1.2</li>
<li>mpy-tool.py: use MP_ROM_xxx macros to support nanbox builds</li>
<li>mpy_cross_all.py: helper tool to run mpy-cross on the entire project</li>
<li>mpy-tool.py: fix regression with freezing floats in obj repr C</li>
</ul>
<p>tests:</p>
<ul>
<li>add feature check for "const" keyword and skip related tests</li>
<li>update test suite to be compatible with CPython 3.6</li>
<li>improve stream.c test coverage</li>
<li>import: improve builtinimport.c test coverage</li>
<li>improve frozen import test coverage</li>
<li>update tests, and add new ones, for recent generator tweaks</li>
<li>io: improve test coverage of io.BufferedWriter</li>
<li>basics: improve runtime.c test coverage</li>
<li>extmod: improve test coverage of ure module</li>
<li>float: add test for assigning to attribute of complex number</li>
<li>extmod/framebuf1: add test for no-op fill_rect</li>
<li>micropython/opt_level: add test for opt_level 3</li>
<li>misc/non_compliant: add test for inability to assign func attrs</li>
<li>basics: add test for assignment of attribute to bound method</li>
<li>add test for int.from_bytes() for arbitrary-precision integer</li>
<li>heapalloc_int_from_bytes: test that int.from_bytes() can work w/o alloc</li>
<li>add test for builtin help function</li>
<li>basics/builtin_help: add test for help('modules')</li>
<li>make sure special tests can be skipped as well</li>
<li>extmod/framebuf4: add tests for GS4_HMSB framebuf format</li>
<li>extmod/framebuf1: fix test for framebuf invalid constructor</li>
<li>extmod: add test for ure debug printing when compiling a regex</li>
<li>heapalloc_str: test for alloc-free string operations</li>
<li>extmod: update vfs_fat tests for new OO FatFs library</li>
<li>extmod/vfs_fat: update tests to work with new VFS sub-system</li>
<li>extmod/vfs_fat_ramdisk: make it work on pyboard</li>
<li>run-tests: skip frozenset tests if set literal syntax is not available</li>
<li>basics/zip: make skippable</li>
<li>thread: make thread_exc2 runable on baremetal</li>
<li>thread: fix stack size test so tests run reliably on baremetal</li>
<li>heapalloc_bytesio: test for BytesIO with preallocates space</li>
<li>basics/set_binop: add tests for inplace set operations</li>
<li>float: add tests for zero to a negative power</li>
<li>split tests for 2- and 3-arg pow()</li>
<li>basics/string_format_modulo: add more tests for dict formatting</li>
<li>pyb: adjust tests so they can run on PYB and PYBLITE</li>
<li>misc: add test for line number printing with large bytecode chunk</li>
<li>add option to not clear MICROPYPATH when running tests</li>
<li>run-tests: allow to skip tests using async/await keywords</li>
<li>comprehension1, containment: split set tests to separate files</li>
<li>builtin_dir: the most expected thing in sys is exit, test for it</li>
<li>basic/[a-f]*: make skippable</li>
<li>dict_fromkeys: revert to use reversed() to run in native codegen mode</li>
<li>extmod: make tests skippable</li>
<li>thread: replace busy waiting loops with a loop that sleeps</li>
<li>thread: add stress-test for creating many threads</li>
<li>gen_yield_from_close: use range() instead of reversed()</li>
<li>basic/: make various tests skippable</li>
<li>cmdline: update tests to pass with latest changes to bytecode</li>
<li>cmdline/cmd_showbc: update to work with recent changes</li>
<li>micropython: add test for iterating with the heap locked</li>
<li>micropython/heapalloc_iter: add tests for contains and unpack</li>
<li>cmdline: update cmd_parsetree test for changes to grammar order</li>
<li>cmdline/cmd_parsetree: update to work with changes to grammar</li>
<li>basics/string_join: add more tests for string concatenation</li>
<li>heapalloc_exc_raise.py: heap alloc test for raising/catching exc</li>
<li>cpydiff: add initial set of tests for uPy-CPython differences</li>
<li>cpydiff: add a test for storing iterable to a list slice</li>
<li>micropython: add test for consts that are bignums</li>
<li>extmod: add test for machine.Signal class</li>
<li>basics: add further tests for OrderedDict</li>
<li>run-tests: check for big int availability and skip related tests</li>
<li>basic: split tests into working with small ints and not working</li>
<li>float/complex1: split out intbig test</li>
<li>float2int*: suffix with _intbig, don't run on any other int type</li>
<li>string_format_modulo2: split off intbig test</li>
<li>basics/string_join.py: add test case where argument is not iterable</li>
<li>basics/unpack1.py: test if *a, = b copies b when b is a list</li>
<li>micropython/: split off intbig tests</li>
<li>uctypes_array_assign_native_le: split off intbig part</li>
<li>basic: make various tests skippable</li>
<li>float: make various tests skippable</li>
<li>extmod: add very basic feature test for ussl module</li>
<li>extmod: add websocket tests</li>
<li>dict_fromkeys: split out skippable part</li>
<li>micropython: make uio-using tests skippable</li>
<li>micropython/heapalloc_traceback: fix backtrace line # after refactor</li>
<li>micropython/opt_level: clarify the expected output for opt_level == 3</li>
<li>feature_check/int_big: rework "big int" detection</li>
<li>basics/fun_error: split out skippable test</li>
<li>extmod: rename websocket test to websocket_basic</li>
<li>misc/: make few tests skippable</li>
<li>extmod: add a test for core VFS functionality, sans any filesystem</li>
<li>extmod/vfs_basic: add more tests for basic VFS functionality</li>
<li>extmod: improve re1.5/recursiveloop.c test coverage</li>
<li>improve binary.c test coverage</li>
<li>basics/struct_micropython: add test for 'S' typecode in ustruct</li>
<li>run-tests: re-instate skipping of doubleprec test on pyboard</li>
<li>extmod/vfs_basic: unmount all existing devices before doing test</li>
<li>extmod: improve tinfgzip.c test coverage</li>
<li>micropython/viper_error: add more tests to improve coverage</li>
<li>basics/string_format2: adjust comment now that tests succeed</li>
<li>basics: add test for string module formatting with int argument</li>
<li>basics: move string-modulo-format int tests to dedicated file</li>
<li>basics/bytes_add: add tests for optimised bytes addition</li>
<li>micropython: add tests for micropython.schedule()</li>
<li>heapalloc_str: test no-replacement case for str.replace()</li>
<li>float: add tests for math funcs that return ints</li>
<li>float: add tests for round() of inf, nan and large number</li>
<li>basics: add test for super() when self is closed over</li>
<li>basics: add tests for list and bytearray growing using themselves</li>
<li>run-tests: be sure to close Pyboard object on completion</li>
<li>vfs_fat_fileio.py is too big to be parsed in 16K heap, split in 2</li>
<li>extmod/vfs_fat_fileio*: improve skippability</li>
<li>float/byte*_construct: skip on missing array module</li>
<li>micropython/heapalloc_iter: improve skippability</li>
<li>run-tests: introduce generic "minimal" target</li>
<li>float: add tests for hashing float and complex numbers</li>
<li>run-tests: update names of tests that may need skipping</li>
<li>basics: add tests for raising ValueError when range() gets 0 step</li>
<li>basics: add test for tuple inplace add</li>
<li>extmod/utimeq1: improve coverage of utimeq module</li>
<li>run-tests: search feature checks wrt to main script location</li>
<li>run-tests: don't post-process CRASH result in any way</li>
<li>micropython: add test for micropython.kbd_intr()</li>
<li>add tests for calling super and loading a method directly</li>
<li>basics: add tests for int.from_bytes when src has trailing zeros</li>
<li>cpydiff/core_arguments: fill in cause/workaround</li>
<li>cpydiff/core_function_userattr: clarify, fill in cause and workaround</li>
<li>cpydiff/core_import_prereg: fill in cause and workaround</li>
<li>io/resource_stream: add test for uio.resource_stream()</li>
<li>cpydiff/core_import_path: test showing difference in package.<strong>path</strong></li>
<li>cpydiff/core_import_split_ns_pkgs: test for split namespace packages</li>
<li>cpydiff/core_function_unpacking: fill in workaround</li>
<li>extmod: add more tests for VFS FAT</li>
<li>extmod: add some more VFS tests</li>
<li>micropython: add test for int.from_bytes with many zero bytes</li>
<li>move super-as-local test from cpydiff to basic tests</li>
<li>basics: update array test for big-int with lL typecodes</li>
<li>basics: add memoryview test for big ints</li>
<li>basics/lexer: add lexer tests for input starting with newlines</li>
<li>extmod: make some vfs tests fully unmount FSs before running</li>
<li>extmod/vfs: update tests to reflect new ilistdir() method</li>
<li>basics/lexer: add line continuation tests for lexer</li>
<li>extmod/vfs_fat: add test for ilistdir of a non-existent directory</li>
<li>extmod/vfs_fat_more: make skippable is uos is not available</li>
<li>io/bytesio_ext: test read() after seek() past end of BytesIO object</li>
<li>basics/list_slice_3arg: add more tests for negative slicing</li>
<li>basics/builtin_range: add tests for negative slicing of range</li>
<li>basics: add more tests for unwind jumps from within a try-finally</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>main: move lexer constructor to within NLR handler block</li>
<li>fix compiler detection for including windows/fmode.c</li>
<li>Makefile: override undefine any inherited variables</li>
<li>Makefile: guard "override undefine" by test for make feature</li>
</ul>
<p>bare-arm port:</p>
<ul>
<li>main: move lexer constructor to within NLR handler block</li>
<li>Makefile: change C standard from gnu99 to c99</li>
</ul>
<p>minimal port:</p>
<ul>
<li>update frozentest.mpy file for new .mpy version</li>
<li>add ability and description to build without the compiler</li>
<li>main: move lexer constructor to within NLR handler block</li>
<li>Makefile: change C standard from gnu99 to c99</li>
<li>main: make Cortex-M vector table constant</li>
</ul>
<p>unix port:</p>
<ul>
<li>coverage: move coverage #if guard back to top of file</li>
<li>enable builtin help function in coverage build</li>
<li>enable MICROPY_PY_BUILTINS_HELP_MODULES in coverage build</li>
<li>switch to OO version of FatFS library</li>
<li>get minimal version compiling again</li>
<li>change to use new generic VFS sub-system in coverage build</li>
<li>fatfs_port: include new oofatfs header</li>
<li>mpconfigport.h: remove obsolete MICROPY_FATFS_VOLUMES config</li>
<li>modos: remove VfsFat from uos module, it's now in uos_vfs module</li>
<li>make stack be non-executable</li>
<li>fix freedos port build problems</li>
<li>main: properly handle MICROPYPATH starting with ':'</li>
<li>moduselect: implement ipoll() method with no-allocation policy</li>
<li>modmachine: add Signal class to machine module</li>
<li>remove remaining, obsolete traces of GNU readline support</li>
<li>moduselect: properly implement ipoll object iteration</li>
<li>main: refactor to put lexer constructors all in one place</li>
<li>use mp_handle_pending() in time.sleep()</li>
<li>coverage: enable scheduler and add tests for it</li>
<li>use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>convert mp_uint_t to size_t for use of mp_obj_list_get</li>
<li>convert mp_uint_t to size_t in alloc.c</li>
<li>enabled high-quality float hashing in coverage build</li>
<li>remove obsolete MICROPY_FATFS macro</li>
<li>main: ignore SIGPIPE signal, instead make EPIPE arrive</li>
<li>main: don't allow to specify too small heap size</li>
<li>main: implement -m option for packages</li>
<li>Makefile: enable frozen bytecode modules dir</li>
<li>move upip to frozen bytecode dir</li>
<li>Makefile: don't add frozen bytecode to minimal build</li>
<li>add ilistdir in uos module</li>
<li>use core-provided KeyboardInterrupt exception object</li>
</ul>
<p>windows port:</p>
<ul>
<li>.gitignore: ignore VC.db and VC.opendb files from VS2015</li>
<li>make msvc project file support any version from VS2013 to VS2017</li>
<li>bring mpconfigport.h up-to-date with unix port</li>
<li>README: convert to Markdown</li>
<li>README: fix some typos and grammar</li>
<li>README: add a note about stack usage for msvc</li>
<li>use core-provided KeyboardInterrupt exception object</li>
<li>msvc: add machine/pin-related sources to build</li>
<li>msvc: remove directory with generated files when cleaning</li>
<li>msvc: do not define DEBUG for debug builds</li>
<li>msvc: rebuild all qstrs when mpconfig headers are modified</li>
<li>msvc: workaround parser bug in older MSBuild versions</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>don't compile tests in "REPL" mode</li>
<li>mpconfigport.h: enable MICROPY_PY_BUILTINS_POW3 option</li>
<li>enable machine module and associated tests</li>
<li>add basic uos module with generic VFS capabilities</li>
<li>move lexer constructors to within NLR handler block</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>support PortG on STM32L476 and STM32L486</li>
<li>fix wrong usage of gcc -print-libgcc-file-name</li>
<li>fix USB HID receive not receiving the first packet</li>
<li>implement ioctl for USB HID read</li>
<li>implement SNAK/CNAK mechanism for USB HID receive</li>
<li>convert to use builtin help function</li>
<li>enable help('modules') feature</li>
<li>add default frozen-bytecode directory and link lcd160cr driver</li>
<li>fix examples in openocd configs to include addresses</li>
<li>add ability to have filesystem stored on external SPI flash</li>
<li>boards/STM32L476DISC: use external SPI flash for filesystem</li>
<li>mpconfigport.h: reorganise the config options into groups</li>
<li>usbd_msc_storage: use storage functions instead of disk ones</li>
<li>convert to use VFS sub-system and new ooFatFs component</li>
<li>fix name of automatically created boot.py</li>
<li>moduos: remove duplicated chdir</li>
<li>use LED constants from PYBv4 onwards</li>
<li>set the FatFs partition number when initialising VFS object</li>
<li>fix stack pointer initialisation for F411 and F429 boards</li>
<li>README: add paragraph about building mpy-cross</li>
<li>on boot, mount all available partitions of the SD card</li>
<li>main: put /sd directory before /flash in sys.path</li>
<li>pin: add C-level pin ioctl method</li>
<li>modmachine: add machine.Signal type</li>
<li>main: guard init_sdcard_fs with MICROPY_HW_HAS_SDCARD</li>
<li>pendsv: fill in comments about what the stack contains</li>
<li>initial implementation of multithreading, currently disabled</li>
<li>main: use _estack value to initialise stack extents</li>
<li>fix build issue when MICROPY_PY_THREAD is disabled</li>
<li>mpconfigport.h: enable MICROPY_PY_BUILTINS_POW3 option</li>
<li>on HardFault, print stack pointer and do a stack dump</li>
<li>add pyb.fault_debug() function, to control hard-fault behaviour</li>
<li>use MICROPY_EVENT_POLL_HOOK instead of __WFI where appropriate</li>
<li>add ability to skip booting from SD card via /flash/SKIPSD file</li>
<li>Makefile: drop use of -mabi=aapcs-linux; link libgcc by default</li>
<li>boards: for STM32F411DISC, change I2C pin according to datasheet</li>
<li>implement a proper thread scheduler</li>
<li>use generic interrupt char code</li>
<li>main: remove unnecessary header includes</li>
<li>use mp_hal_delay_ms instead of HAL_Delay</li>
<li>rename sys_tick ticks/delay functions to corresp. mp_hal ones</li>
<li>modpyb: use utime ticks ms/us functions instead of custom ones</li>
<li>modnwcc3k: add include for mp_hal_delay_ms</li>
<li>mphalport: get ticks_cpu() working on F7 MCUs</li>
<li>main: allocate flash's VFS struct on the heap to trace root ptrs</li>
<li>enable micropython.schedule()</li>
<li>pendsv: disable interrupts during a thread switch</li>
<li>irq: shift IRQ priorities of TIM and EXTINT to be above PENDSV</li>
<li>pybthread: allow interrupts to work during lock/unlock of mutex</li>
<li>systick: make mp_hal_delay_ms release the GIL when sleeping</li>
<li>boards: fix alt-func config for PA5 of STM32F767</li>
<li>board: fix existing and add more pin defs for NUCLEO_F767ZI</li>
<li>spi: clean and/or invalidate D-cache before SPI DMA transfers</li>
<li>hal: for F7 MCUs, expose DMA_CalcBaseAndBitshift function</li>
<li>dma: fix reinitialisation of DMA on F7 MCUs, following F4</li>
<li>update to use size_t for tuple/list accessors</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>spi: increase SPI transfer timeout, proportional to num bytes</li>
<li>support SDMMC alternate functions in pin generation</li>
<li>sdcard: add support for SDMMC2 on F7 MCUs</li>
<li>boards: update F76x alternate function table to add SDMMC2</li>
<li>boards/STM32F769DISC: get SD card working by using SDMMC2</li>
<li>boards/STM32F769DISC: fix user switch pin, and document stlink</li>
<li>boards: remove F769 alt function table, it's same as for F767</li>
<li>dma: don't include SDMMC2 struct if SDMMC2 is not available</li>
<li>move L4/F7 I2C timing constants from mpconfigboard.h to i2c.c</li>
<li>i2c: clean the cache so that I2C DMA works on F7 MCUs</li>
<li>usbd_cdc_interface: increase in-endpoint timeout to 500ms</li>
<li>usbd_cdc_interface: change CDC RX to use a circular buffer</li>
<li>enable parsing of all Pin constructor args by machine.Signal</li>
<li>timer: clear interrupt flag before setting callback</li>
<li>convert all module and method tables to use MP_ROM macros</li>
<li>modmachine: add machine.UART class, linking to pyb.UART</li>
<li>modmachine: remove TODO comment that is now implemented</li>
<li>add machine.Pin on/off methods</li>
<li>add ilistdir in uos module</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>convert to use builtin help function</li>
<li>add implementations of mp_import_stat and builtin_open</li>
<li>modusocket: remove deprecated socket.error</li>
<li>convert to use new VFS sub-system and new ooFatFs library</li>
<li>refactor "ticks" functions to use common extmod implementation</li>
<li>move stoupper to ftp.c and define in terms of unichar_toupper</li>
<li>use simplelink API instead of emulated BSD API</li>
<li>remove util/std.h, can just use stdio.h instead</li>
<li>mods/modwlan: remove unused header includes; simplify others</li>
<li>mods/modwlan: make multi-threaded a proper compile-time option</li>
<li>mods/modwlan: allow antenna diversity to be fully compiled out</li>
<li>mods/modwlan: add int casts to silence compiler warnings</li>
<li>remove remaining references to std.h</li>
<li>move wlan socket glue functions from modwlan to modusocket</li>
<li>convert to using uPy internal errno numbers</li>
<li>when raising OSError's use MP_Exxx as arg instead of a string</li>
<li>enable uerrno module with short, custom list of error codes</li>
<li>mods/modusocket: init vars to 0 to silence compiler warnings</li>
<li>remove socket.timeout class, use OSError(ETIMEDOUT) instead</li>
<li>moduos: remove uos.sep, as it's strictly optional</li>
<li>mptask: allocate flash VFS struct on the heap to trace root ptrs</li>
<li>mods/modutime: use generic sleep_ms and sleep_us implementations</li>
<li>update to use size_t for tuple/list accessors</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>mods/pybi2c: raise OSError if readfrom_mem fails to write addr</li>
<li>modmachine: return frequency value directly, like other ports</li>
<li>pybuart: make parity specifications consistent with HW API</li>
<li>mods/pybi2c: make machine.I2C constructor/init conform to HW API</li>
<li>mods/pybi2c: make readfnom_mem_into/writeto_mem return None</li>
<li>mods/pybpin: remove toggle() method</li>
</ul>
<p>teensy port:</p>
<ul>
<li>convert to use builtin help function</li>
<li>main: remove unnecessary header includes</li>
<li>lexerfrozen: make mp_lexer_new_from_file raise an exception</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>convert to use builtin help function</li>
<li>factor out common linker code to esp8266_common.ld</li>
<li>switch to use OO version of FatFs library</li>
<li>change to use new generic VFS sub-system</li>
<li>fatfs_port: include new oofatfs header</li>
<li>machine_pin: implement pin ioctl protocol</li>
<li>modmachine: add Signal class</li>
<li>mpconfigport.h: remove obsolete MICROPY_FATFS_VOLUMES config</li>
<li>uart: add support for polling uart device</li>
<li>moduos: populate release field of uname in case it was GC'd</li>
<li>mpconfigport.h: enable help('modules') feature</li>
<li>update lexer constructors so they can raise exceptions</li>
<li>only execute main.py if in friendly REPL mode</li>
<li>enable micropython.schedule() with locking in pin callback</li>
<li>change machine.Timer callback to soft callback</li>
<li>machine_pin: add "hard" parameter to pin.irq, soft by default</li>
<li>machine_pin: make pin.irq arguments positional</li>
<li>machine_pin: fix memset size for zeroing of pin_irq_is_hard</li>
<li>machine_pin: fix pin.irq() to work when all args are keywords</li>
<li>modesp: use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>modesp: remove long-obsolete and unused espconn bindings</li>
<li>update to use size_t for tuple/list accessors</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>remove unused entry in port root pointers</li>
<li>README: replace reference of alpha status to beta status</li>
<li>README: add notice about 512K version</li>
<li>change default settings to mount flash at root dir</li>
<li>esp8266.ld, esp8266_ota.ld: grow main firmware size by 32KB</li>
<li>modesp: flash_user_start: Use value from linker script</li>
<li>modules/flashbdev: reserve one sector for native code storage</li>
<li>scripts: move drivers/modules to modules/ (frozen bytecode)</li>
<li>scripts: move initsetup & port_diag tools to modules/</li>
<li>ets_alt_task.c: prevent spurious large increment of ticks_ms()</li>
<li>modnetwork: in connect, fix potential buffer overflows</li>
<li>machine_uart: add uart.any() method</li>
<li>modules: mount filesystem at root when creating for first time</li>
<li>mpconfigport.h: remove duplicate link to lwip module</li>
<li>rename machine.Pin high/low methods to on/off</li>
<li>add ilistdir in uos module</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>help: update n_args param type to size_t</li>
<li>remove deprecated .mdef file</li>
<li>add separate Zephyr config for "minimal" build</li>
<li>enable SLIP networking for the default build</li>
<li>convert to use builtin help function</li>
<li>make sure that correct Zephyr config is used for "minimal" build</li>
<li>allow to have per-board Zephyr config fragments</li>
<li>prj_frdm_k64f.conf: add, enable Ethernet support</li>
<li>Makefile.zephyr: support and default to networked (SLIP) QEMU</li>
<li>README: describe many gotchas of networked builds</li>
<li>enable IPv6 networking in addition to IPv4</li>
<li>add qemu_cortex_m3 config fragment</li>
<li>main: don't unconditionally dump stats on each GC</li>
<li>README: network startup issues with frdm_k64f resolved</li>
<li>modzephyr: add a module for Zephyr-specific things</li>
<li>modzephyr: fix typo in identifier</li>
<li>make sure that generated prj.conf is updated only on content changes</li>
<li>move "minimal" configuration building to a separate wrapper script</li>
<li>main: nlr_jump_fail: Fix noreturn warning</li>
<li>main: remove unused __fatal_error()</li>
<li>main: move lexer constructor to within NLR handler block</li>
<li>zephyr_getchar: use native k_sem instead of legacy nano_sem</li>
<li>prj_base.conf: disable legacy kernel compatibility</li>
<li>prj_base.conf: enable TCP (and UDP explicitly)</li>
<li>Makefile: rework to use modern, official build integration</li>
<li>Makefile: add workaround (fix?) for broken builds for DTS targets</li>
<li>fix NLR segfault in minimal build</li>
<li>modusocket: initial version of usocket module for Zephyr</li>
<li>integrate modusocket into build</li>
<li>modusocket: implement bind() and connect()</li>
<li>modusocket: implement send()</li>
<li>modusocket: implement recv() for UDP sockets</li>
<li>modusocket: implement recv() for TCP sockets</li>
<li>prj_base.conf: add config for net_buf logging</li>
<li>modusocket: be sure to use MP_OBJ_FROM_PTR</li>
<li>modusocket: factor out socket_new() function</li>
<li>zephyr_getchar: explicitly yield to other threads on char availability</li>
<li>Makefile: add "test" target, runs testsuite in QEMU</li>
<li>modusocket: factor out "extended k_fifo API"</li>
<li>modusocket: implement listen()</li>
<li>modusocket: socket_bind: Don't set recv callback on STREAM sockets</li>
<li>modusocket: implement accept()</li>
<li>mpconfigport.h: fix build if usocket module is disabled</li>
<li>modmachine: add Signal class</li>
<li>machine_pin: implement pin protocol for machine.Signal support</li>
<li>modusocket: call net_nbuf_print_frags() in recv callback if DEBUG > 1</li>
<li>modusocket: strip packet header right in the receive callback</li>
<li>modmachine: implement machine.reset()</li>
<li>main: configure IPv4 netmask and gateway to allow Internet access</li>
<li>add 96b_carbon configuration</li>
<li>modusocket: refactor send() into stream write() method</li>
<li>modusocket: enable stream write() method</li>
<li>modusocket: refactor recv() into stream read() method</li>
<li>modusocket: add read/readline/readinto stream methods</li>
<li>modusocket: sock_read: Check socket status only at the start of packet</li>
<li>modusocket: add dummy makefile() implementation</li>
<li>Makefile: add debugserver Zephyr target</li>
<li>mpconfigport.h: enable line number information for scripts</li>
<li>main: remove superfluous include</li>
<li>modusocket: add dummy setsockopt() implementation</li>
<li>modusocket: add SOL_SOCKET and SO_REUSEADDR constants</li>
<li>prj_qemu_x86.conf: bump RAM size to 320K</li>
<li>README: update to require Zephyr 1.8</li>
<li>modusocket: wrap pkt_get_info() call</li>
<li>modusocket: update for net_pkt refactor</li>
<li>modusocket: switch to net_pkt_append() returning length</li>
<li>modusocket: if there're no packets in recv_q, cancel waiter</li>
<li>modusocket: implement getaddrinfo()</li>
<li>modusocket: first step to switch to alternative FIFO processing</li>
<li>modusocket: get rid of cur_pkt object member</li>
<li>main: check default netif before applying operations to it</li>
<li>modusocket: getaddrinfo: Use RAISE_ERRNO for proper error decoding</li>
<li>modusocket: getaddrinfo: Raise OSError on resolution timeout, etc</li>
<li>modusocket: use DEBUG_PRINT macro name as other modules do</li>
<li>rename machine.Pin high/low methods to on/off</li>
<li>don't send more than MTU allows</li>
<li>modusocket: handle a case when recv_q is empty when EOF is signaled</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>main: make nlr_jump_fail never return</li>
<li>main: make mp_lexer_new_from_file raise an exception</li>
</ul>
<p>README:</p>
<ul>
<li>explicitly mention "await" support, and formatting for keywords</li>
<li>add link to docs.micropython.org</li>
<li>describe extmod/ dir</li>
<li>change Travis & Coveralls badges to not use link references</li>
</ul>
<p>travis:</p>
<ul>
<li>unconditionally run coveralls analysis, even if others failed</li>
<li>change an stmhal rule to build PYBV11 instead of default PYBV10</li>
</ul>
<p>gitattributes:</p>
<ul>
<li>add .mpy files to list of binary files</li>
<li>remove obsolete lines</li>
</ul>
<p>docs:</p>
<ul>
<li>fix some minor spelling mistakes</li>
<li>add documentation for lcd160cr module</li>
<li>pyboard/tutorial: add tutorial for LCD160CR</li>
<li>library/lcd160cr: fix set_brightness range, should be 0..31</li>
<li>machine.Timer: move WiPy adhoc parts to its documentation</li>
<li>machine: add explicit note on machine module level and scope</li>
<li>usocket: clarify exceptions used</li>
<li>usocket: elaborate "Constants" section</li>
<li>usocket: clarify description of various methods</li>
<li>usocket: dedent Methods section</li>
<li>uio: describe differences between uPy an CPy stream hierarchy</li>
<li>conf.py: add myself as a copyright holder on the docs</li>
<li>uio: typo fixes/lexical improvements</li>
<li>pyboard/tutorial/lcd160cr_skin: fix typo, get_touched->get_touch</li>
<li>for LCD160CR driver and tutorial, add link to positioning image</li>
<li>esp8266/tutorial: specify the baudrate in picocom example command</li>
<li>add M-logo as favicon</li>
<li>library/pyb.Pin: minor typo fix, B6 should be A0</li>
<li>library/machine: make separate TOC for WiPy vs non-WiPy</li>
<li>uos: remove mention of uos.sep</li>
<li>library/lcd160cr: mention the valid values for set_power() method</li>
<li>modify Makefile and indexes to generate cPy-differences pages</li>
<li>uhashlib: provide port-neutral description</li>
<li>Makefile: define and use PYTHON as the interpreter for CPYDIFF</li>
<li>machine: fix formatting of Constants section</li>
<li>library/lcd160cr: add note about supported JPEG format/encodings</li>
<li>library: add framebuf documentation</li>
<li>library/lcd160cr: add link to framebuf page</li>
<li>esp8266/tutorial: update since esptool 1.3 added Python 3 support</li>
<li>library/framebuf: fix typo in bit-width for MVLSB description</li>
<li>library/machine.I2C: fix scan() doc to match implementation</li>
<li>library/btree: add btree module docs</li>
<li>utime: de-conditionalize description of sleep_ms() and friends</li>
<li>uos: de-conditionalize statvfs() description</li>
<li>machine.SPI: remove outdated wipy chunk</li>
<li>machine.Pin: move wipy-specific details to its own docs</li>
<li>machine.Pin: move wipy-specific methods to its docs</li>
<li>esp8266/general: start explicit "Known Issues", mentioned RTC inaccuracy</li>
<li>library/builtins: int: Add notice on byteorder param for to/from_bytes</li>
<li>library/machine.UART: remove some conditionals</li>
<li>utime: deconditionalize description of sleep()</li>
<li>usocket: deconditionalize</li>
<li>uhashlib: deconditionalize</li>
<li>esp8266/tutorial/intro: reword section on flash size requirement</li>
<li>library/micropython: deconditionalize</li>
<li>library/uos: urandom: Generalize description</li>
<li>library/ussl: deconditionalize, wipy notes moved to its documentation</li>
<li>machine.UART: deconditionalize normal methods</li>
<li>machine: move machine.main() misnomer to wipy's known issues</li>
<li>library/machine: typo fix in machine_callbacks section</li>
<li>library/machine.UART: remove pyboard-specific section</li>
<li>wipy/quickref: update reference for change to I2C API</li>
<li>wipy/general: add section about specifics of I2C implementation</li>
<li>library/machine.I2C: deconditionalise all methods</li>
<li>library/machine.*: add cross-reference label to individual classes</li>
<li>esp8266/quickref: add links from quickref page to machine classes</li>
<li>library/machine.I2C: remove WiPy-specific return values</li>
<li>library/machine.SPI: fix formatting of bullet list to stop warning</li>
<li>library/uos: add description of uos.ilistdir() function</li>
<li>machine.Pin: there's no toggle() method in MicroPython hardware API</li>
<li>machine.Signal: add initial draft description of Signal class</li>
<li>library/index: add important summary of the intro section as warning</li>
<li>change single occurrence of "Micropython" to "MicroPython"</li>
<li>library/micropython: document the newer micropython functions</li>
<li>library/machine.UART: update and improve uart.any() docs</li>
<li>library/machine.Pin: remove .id() method and .board class attr</li>
</ul>
<p>examples:</p>
<ul>
<li>hwapi: use Signal for inverted LED on ESP-12</li>
<li>hwapi: consistently use Signal class to define LEDs</li>
<li>button_reaction: update for time_pulse_us() no longer raising exc</li>
<li>hwapi: add hwconfig_pyboard.py for pyboard</li>
<li>hwapi: be sure to import Signal when it's used</li>
<li>hwapi/soft_pwm: use Signal on()/off() methods</li>
<li>embedding/README: convert to markdown, grammar and clarity fixes</li>
<li>embedding: place lexer constructor within NLR handler block</li>
<li>hwapi: add config for Zephyr port of 96Boards Carbon</li>
<li>hwapi/hwconfig*: use inline Signal() args where possible</li>
<li>hwapi/soft_pwm2_uasyncio: update for call_later_ms()</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.8.72017-01-08T12:53:14Zv1.8.7: Support for Xtensa emitter and assembler, and upgraded F4 and F7 STM HAL<p>This release adds support for the Xtensa architecture as a target for the<br>
native emitter, as well as Xtensa inline assembler. The int.from_bytes<br>
and int.to_bytes methods now require a second argument (the byte order)<br>
per CPython (only "little" is supported at this time). The "readall"<br>
method has been removed from all stream classes that used it; "read" with<br>
no arguments should be used instead. There is now support for importing<br>
packages from compiled .mpy files. Test coverage is increased to 96%.</p>
<p>The generic I2C driver has improvements: configurable clock stretching<br>
timeout, "stop" argument added to readfrom/writeto methods, "nack"<br>
argument added to readinto, and write[to] now returns num of ACKs<br>
received. The framebuf module now handles 16-bit depth (generic colour<br>
format) and has hline, vline, rect, line methods. A new utimeq module is<br>
added for efficient queue ordering defined by modulo time (to be<br>
compatible with time.ticks_xxx functions). The pyboard.py script has been<br>
modified so that the target board is not reset between scripts or commands<br>
that are given on a single command line.</p>
<p>For the stmhal port the STM Cube HAL has been upgraded: Cube F4 HAL to<br>
v1.13.1 (CMSIS 2.5.1, HAL v1.5.2) and Cube F7 HAL to v1.1.2. There is a<br>
more robust pyb.I2C implementation (DMA is now disabled by default, can be<br>
enabled via an option), and there is an implementation of machine.I2C with<br>
robust error handling and hardware acceleration on F4 MCUs. It is now<br>
recommended to use machine.I2C instead of pyb.I2C. The UART class is now<br>
more robust with better handling of errors/timeouts. There is also more<br>
accurate VBAT and VREFINT measurements for the ADC. New boards that are<br>
supported include: NUCLEO_F767ZI, STM32F769DISC and NUCLEO_L476RG.</p>
<p>For the esp8266 port select/poll is now supported for sockets using the<br>
uselect module. There is support for native and viper emitters, as well<br>
as an inline assembler (with limited iRAM for storage of native functions,<br>
or the option to store code to flash). There is improved software I2C<br>
with a slight API change: scl/sda pins can be specified as positional only<br>
when "-1" is passed as the first argument to indicate the use of software<br>
I2C. It is recommended to use keyword arguments for scl/sda. There is<br>
very early support for over-the-air (OTA) updates using the yaota8266<br>
project.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>emitnative: fix native import emitter when in viper mode</li>
<li>remove readall() method, which is equivalent to read() w/o args</li>
<li>objexcept: allow clearing traceback with 'exc.<strong>traceback</strong> = None'</li>
<li>runtime: mp_resume: handle exceptions in Python <strong>next</strong>()</li>
<li>mkrules.mk: rework find command so it works on OSX</li>
<li>*.mk: replace uses of 'sed' with $(SED)</li>
<li>parse: move function to check for const parse node to parse.[ch]</li>
<li>parse: make mp_parse_node_new_leaf an inline function</li>
<li>parse: add code to fold logical constants in or/and/not operations</li>
<li>factor persistent code load/save funcs into persistentcode.[ch]</li>
<li>factor out persistent-code reader into separate files</li>
<li>lexer: rewrite mp_lexer_new_from_str_len in terms of mp_reader_mem</li>
<li>lexer: provide generic mp_lexer_new_from_file based on mp_reader</li>
<li>lexer: rewrite mp_lexer_new_from_fd in terms of mp_reader</li>
<li>lexer: make lexer use an mp_reader as its source</li>
<li>objtype: implement <strong>call</strong> handling for an instance w/o heap alloc</li>
<li>factor out common code from assemblers into asmbase.[ch]</li>
<li>stream: move ad-hoc ioctl constants to stream.h and rename them</li>
<li>compile: simplify configuration of native emitter</li>
<li>emit.h: remove long-obsolete declarations for cpython emitter</li>
<li>move arch-specific assembler macros from emitnative to asmXXX.h</li>
<li>asmbase: add MP_PLAT_COMMIT_EXEC option for handling exec code</li>
<li>asmxtensa: add low-level Xtensa assembler</li>
<li>integrate Xtensa assembler into native emitter</li>
<li>allow inline-assembler emitter to be generic</li>
<li>add inline Xtensa assembler</li>
<li>emitinline: embed entire asm struct instead of a pointer to it</li>
<li>emitinline: move inline-asm align and data methods to compiler</li>
<li>emitinline: move common code for end of final pass to compiler</li>
<li>asm: remove need for dummy_data when doing initial assembler passes</li>
<li>objint: from_bytes, to_bytes: require byteorder arg, require "little"</li>
<li>binary: do zero extension when storing a value larger than word size</li>
<li>builtinimport: support importing packages from compiled .mpy files</li>
<li>mpz: remove unreachable code in mpn_or_neg functions</li>
<li>runtime: zero out fs_user_mount array in mp_init</li>
<li>mpconfig.h: enable MICROPY_PY_SYS_EXIT by default</li>
<li>add MICROPY_KBD_EXCEPTION config option to provide mp_kbd_exception</li>
<li>compile: add an extra pass for Xtensa inline assembler</li>
<li>modbuiltins: remove unreachable code</li>
<li>objint: rename mp_obj_int_as_float to mp_obj_int_as_float_impl</li>
<li>emitglue: refactor to remove assert(0), to improve coverage</li>
<li>lexer: remove unreachable code in string tokeniser</li>
<li>lexer: remove unnecessary check for EOF in lexer's next_char func</li>
<li>lexer: permanently disable the mp_lexer_show_token function</li>
<li>parsenum: simplify and generalise decoding of digit values</li>
<li>mpz: fix assertion in mpz_set_from_str which checks value of base</li>
<li>mpprint: add assertion for, and comment about, valid base values</li>
<li>objint: simplify mp_int_format_size and remove unreachable code</li>
<li>unicode: comment-out unused function unichar_isprint</li>
<li>consistently update signatures of .make_new and .call methods</li>
<li>mkrules.mk: add MPY_CROSS_FLAGS option to pass flags to mpy-cross</li>
<li>builtinimport: fix bug when importing names from frozen packages</li>
</ul>
<p>extmod:</p>
<ul>
<li>machine_i2c: make the clock stretching timeout configurable</li>
<li>machine_i2c: raise an error when clock stretching times out</li>
<li>machine_i2c: release SDA on bus error</li>
<li>machine_i2c: add a C-level I2C-protocol, refactoring soft I2C</li>
<li>machine_i2c: add argument to C funcs to control stop generation</li>
<li>machine_i2c: rewrite i2c.scan in terms of C-level protocol</li>
<li>machine_i2c: rewrite mem xfer funcs in terms of C-level protocol</li>
<li>machine_i2c: remove unneeded i2c_write_mem/i2c_read_mem funcs</li>
<li>machine_i2c: make C-level functions return -errno on I2C error</li>
<li>machine_i2c: add 'nack' argument to i2c.readinto</li>
<li>machine_i2c: make i2c.write[to] methods return num of ACKs recvd</li>
<li>machine_i2c: add 'stop' argument to i2c readfrom/writeto meths</li>
<li>machine_i2c: remove trivial function wrappers</li>
<li>machine_i2c: expose soft I2C obj and readfrom/writeto funcs</li>
<li>machine_i2c: add hook to constructor to call port-specific code</li>
<li>modurandom: allow to build with float disabled</li>
<li>modframebuf: make FrameBuffer handle 16bit depth</li>
<li>modframebuf: add back legacy FrameBuffer1 "class"</li>
<li>modframebuf: optimise fill and fill_rect methods</li>
<li>vfs_fat: implement POSIX behaviour of rename, allow to overwrite</li>
<li>moduselect: use stream helper function instead of ad-hoc code</li>
<li>moduselect: use configurable EVENT_POLL_HOOK instead of WFI</li>
<li>modlwip: add ioctl method to socket, with poll implementation</li>
<li>vfs_fat_file: allow file obj to respond to ioctl flush request</li>
<li>modbtree: add method to sync the database</li>
<li>modbtree: rename "sync" method to "flush" for consistency</li>
<li>modframebuf: add hline, vline, rect and line methods</li>
<li>machine_spi: provide reusable software SPI class</li>
<li>modframebuf: make framebuf implement the buffer protocol</li>
<li>modframebuf: store underlying buffer object to prevent GC free</li>
<li>modutimeq: copy of current moduheapq with timeq support for refactoring</li>
<li>modutimeq: refactor into optimized class</li>
<li>modutimeq: make time_less_than be actually "less than", not less/eq</li>
</ul>
<p>lib:</p>
<ul>
<li>utils/interrupt_char: use core-provided mp_kbd_exception if enabled</li>
</ul>
<p>drivers:</p>
<ul>
<li>display/ssd1306.py: update to use FrameBuffer not FrameBuffer1</li>
<li>onewire: enable pull up on data pin</li>
<li>onewire/ds18x20: fix negative temperature calc for DS18B20</li>
</ul>
<p>tools:</p>
<ul>
<li>tinytest-codegen: blacklist recently added uheapq_timeq test (qemu-arm)</li>
<li>pyboard.py: refactor so target is not reset between scripts/cmd</li>
<li>mpy-tool.py: add support for OPT_CACHE_MAP_LOOKUP_IN_BYTECODE</li>
</ul>
<p>tests:</p>
<ul>
<li>micropython: add test for import from within viper function</li>
<li>use read() instead of readall()</li>
<li>basics: add test for logical constant folding</li>
<li>micropython: add test for creating traceback without allocation</li>
<li>micropython: move alloc-less traceback test to separate test file</li>
<li>extmod: improve ujson coverage</li>
<li>basics: improve user class coverage</li>
<li>basics: add test for dict.fromkeys where arg is a generator</li>
<li>basics: add tests for if-expressions</li>
<li>basics: change dict_fromkeys test so it doesn't use generators</li>
<li>basics: enable tests for list slice getting with 3rd arg</li>
<li>extmod/vfs_fat_fileio: add test for constructor of FileIO type</li>
<li>extmod/btree1: exercise btree.flush()</li>
<li>extmod/framebuf1: add basics tests for hline, vline, rect, line</li>
<li>update for required byteorder arg for int.from_bytes()/to_bytes()</li>
<li>extmod: improve moductypes test coverage</li>
<li>extmod: improve modframebuf test coverage</li>
<li>micropython: get heapalloc_traceback test running on baremetal</li>
<li>struct*: make skippable</li>
<li>basics: improve mpz test coverage</li>
<li>float/builtin_float_round: test round() with second arg</li>
<li>basics/builtin_dir: add test for dir() of a type</li>
<li>basics: add test for builtin locals()</li>
<li>basics/set_pop: improve coverage of set functions</li>
<li>run-tests: for REPL tests make sure the REPL is exited at the end</li>
<li>basics: improve test coverage for generators</li>
<li>import: add a test which uses ... in from-import statement</li>
<li>add tests to improve coverage of runtime.c</li>
<li>add tests to improve coverage of objarray.c</li>
<li>extmod: add test for utimeq module</li>
<li>basics/lexer: add a test for newline-escaping within a string</li>
<li>add a coverage test for printing the parse-tree</li>
<li>utimeq_stable: test for partial stability of utimeq queuing</li>
<li>heapalloc_inst_call: test for no alloc for simple object calls</li>
<li>basics: add tests for parsing of ints with base 36</li>
<li>basics: add tests to improve coverage of binary.c</li>
<li>micropython: add test for micropython.stack_use() function</li>
<li>extmod: improve ubinascii.c test coverage</li>
<li>thread: improve modthread.c test coverage</li>
<li>cmdline: improve repl.c autocomplete test coverage</li>
<li>unix: improve runtime_utils.c test coverage</li>
<li>pyb/uart: update test to match recent change to UART timeout_char</li>
<li>run-tests: allow to skip set tests</li>
<li>improve warning.c test coverage</li>
<li>float: improve formatfloat.c test coverage using Python</li>
<li>unix: improve formatfloat.c test coverage using C</li>
<li>unix/extra_coverage: add basic tests to import frozen str and mpy</li>
<li>types1: split out set type test to set_types</li>
<li>array: allow to skip test if "array" is unavailable</li>
<li>unix/extra_coverage: add tests for importing frozen packages</li>
</ul>
<p>unix port:</p>
<ul>
<li>rename define for unix moduselect to MICROPY_PY_USELECT_POSIX</li>
<li>Makefile: update freedos target for change of USELECT config name</li>
<li>enable utimeq module</li>
<li>main: allow to print the parse tree in coverage build</li>
<li>Makefile: make "coverage_test" target mirror Travis test actions</li>
<li>moduselect: if file object passed to .register(), return it in .poll()</li>
<li>Makefile: split long line for coverage target, easier to modify</li>
<li>enable and add basic frozen str and frozen mpy in coverage build</li>
<li>Makefile: allow cache-map-lookup optimisation with frozen bytecode</li>
</ul>
<p>windows port:</p>
<ul>
<li>enable READER_POSIX to get access to lexer_new_from_file</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>dma: de-init the DMA peripheral properly before initialising</li>
<li>i2c: add option to I2C to enable/disable use of DMA transfers</li>
<li>i2c: reset the I2C peripheral if there was an error on the bus</li>
<li>rename mp_hal_pin_set_af to _config_alt, to simplify alt config</li>
<li>upgrade to STM32CubeF4 v1.13.0 - CMSIS/Device 2.5.1</li>
<li>upgrade to STM32CubeF4 v1.13.0 - HAL v1.5.1</li>
<li>apply STM32CubeF4 v1.13.1 patch - upgrade HAL driver to v1.5.2</li>
<li>hal/i2c: reapply HAL commit ea040a4 for f4</li>
<li>hal/sd: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/1d7fb82f0aec11331635532583617d773888b991/hovercard" href="https://github.com/Python3-Training/micropython/commit/1d7fb82f0aec11331635532583617d773888b991"><tt>1d7fb82</tt></a> for f4</li>
<li>hal: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/9db719bb57626d72ab84ab0ccd2294bf89158762/hovercard" href="https://github.com/Python3-Training/micropython/commit/9db719bb57626d72ab84ab0ccd2294bf89158762"><tt>9db719b</tt></a> for f4</li>
<li>hal/rcc: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345/hovercard" href="https://github.com/Python3-Training/micropython/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345"><tt>c568a2b</tt></a> for f4</li>
<li>hal/sd: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/09de030651b95956eb9f899e850f24d0ce804460/hovercard" href="https://github.com/Python3-Training/micropython/commit/09de030651b95956eb9f899e850f24d0ce804460"><tt>09de030</tt></a> for f4</li>
<li>boards: configure all F4 boards to work with new HAL</li>
<li>make-stmconst.py: fix regex's to work with current CMSIS</li>
<li>i2c: handle I2C IRQs</li>
<li>dma: precalculate register base and bitshift on handle init</li>
<li>dma: mark DMA sate as READY even if HAL_DMA_Init is skipped</li>
<li>can: clear FIFO flags in IRQ handler</li>
<li>i2c: provide custom IRQ handlers</li>
<li>hal: do not include <stdio.h> in HAL headers</li>
<li>mphalport.h: use single GPIOx->BSRR register</li>
<li>make-stmconst.py: add support for files with invalid utf8 bytes</li>
<li>update HALCOMMITS due to change to hal</li>
<li>make-stmconst.py: restore Python 2 compatibility</li>
<li>update HALCOMMITS due to change to hal</li>
<li>moduselect: move to extmod/ for reuse by other ports</li>
<li>i2c: use the HAL's I2C IRQ handler for F7 and L4 MCUs</li>
<li>updates to get F411 MCUs compiling with latest ST HAL</li>
<li>i2c: remove use of legacy I2C_NOSTRETCH_DISABLED option</li>
<li>add beginnings of port-specific machine.I2C implementation</li>
<li>i2c: add support for I2C4 hardware block on F7 MCUs</li>
<li>i2c: expose the pyb_i2c_obj_t struct and some relevant functions</li>
<li>machine_i2c: provide HW implementation of I2C peripherals for F4</li>
<li>add support for flash storage on STM32F415</li>
<li>add back GPIO_BSRRL and GPIO_BSRRH constants to stm module</li>
<li>add OpenOCD configuration for STM32L4</li>
<li>add address parameters to openocd config files</li>
<li>adc: add "mask" selection parameter to pyb.ADCAll constructor</li>
<li>adc: provide more accurate measure of VBAT and VREFINT</li>
<li>adc: make ADCAll.read_core_temp return accurate float value</li>
<li>adc: add ADCAll.read_vref method, returning "3.3v" value</li>
<li>adc: add support for F767 MCU</li>
<li>adc: make channel "16" always map to the temperature sensor</li>
<li>sdcard: clean/invalidate cache before DMA transfers with SD card</li>
<li>moduos: implement POSIX behaviour of rename, allow to overwrite</li>
<li>adc: use constants from new HAL version</li>
<li>refactor UART configuration to use pin objects</li>
<li>uart: add support for UART7 and UART8 on F7 MCUs</li>
<li>uart: add check that UART id is valid for the given board</li>
<li>cmsis: update STM32F7 CMSIS device include files to V1.1.2</li>
<li>hal: update ST32CubeF7 HAL files to V1.1.2</li>
<li>port of f4 hal commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345/hovercard" href="https://github.com/Python3-Training/micropython/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345"><tt>c568a2b</tt></a> to updated f7 hal</li>
<li>port of f4 hal commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/09de030651b95956eb9f899e850f24d0ce804460/hovercard" href="https://github.com/Python3-Training/micropython/commit/09de030651b95956eb9f899e850f24d0ce804460"><tt>09de030</tt></a> to updated f7 hal</li>
<li>port of f4 hal commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/Python3-Training/micropython/commit/1d7fb82f0aec11331635532583617d773888b991/hovercard" href="https://github.com/Python3-Training/micropython/commit/1d7fb82f0aec11331635532583617d773888b991"><tt>1d7fb82</tt></a> to updated f7 hal</li>
<li>declare and initialise PrescTables for F7 MCUs</li>
<li>boards/STM32F7DISC: define LSE_STARTUP_TIMEOUT</li>
<li>hal: update HALCOMMITS due to change in f7 hal files</li>
<li>refactor to use extmod implementation of software SPI class</li>
<li>cmsis: add CMSIS file stm32f767xx.h, V1.1.2</li>
<li>add NUCLEO_F767ZI board, with openocd config for stm32f7</li>
<li>cmsis: add CMSIS file stm32f769xx.h, V1.1.2</li>
<li>add STM32F769DISC board files</li>
<li>move PY_SYS_PLATFORM config from board to general config file</li>
<li>mpconfigport: add weak-module links for io, collections, random</li>
<li>rename mp_const_vcp_interrupt to mp_kbd_exception</li>
<li>usb: always use the mp_kbd_exception object for VCP interrupt</li>
<li>use core-provided keyboard exception object</li>
<li>led: properly initialise timer handle to zero before using it</li>
<li>mphalport.h: explicitly use HAL's GPIO constants for pull modes</li>
<li>usrsw: use mp_hal_pin_config function instead of HAL_GPIO_Init</li>
<li>led: use mp_hal_pin_config function instead of HAL_GPIO_Init</li>
<li>sdcard: use mp_hal_pin_config function instead of HAL_GPIO_Init</li>
<li>add support for STM32 Nucleo64 L476RG</li>
<li>uart: provide a custom function to transmit over UART</li>
<li>uart: increase inter-character timeout by 1ms</li>
<li>enable utimeq module</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>tools/smoke.py: change readall() to read()</li>
<li>pybspi: remove static mode=SPI.MASTER parameter for latest HW API</li>
<li>mods/pybspi: remove SPI.MASTER constant, it's no longer needed</li>
<li>update for moduselect moved to extmod/</li>
<li>re-add support for UART REPL (MICROPY_STDIO_UART setting)</li>
<li>enable UART REPL by default</li>
<li>README: (re)add information about accessing REPL on serial</li>
<li>make: rename "deploy" target to "deploy-ota"</li>
<li>add targets to erase flash, deploy firmware using cc3200tool</li>
<li>README: reorganize and update to the current state of affairs</li>
<li>modwlan: add network.WLAN.print_ver() diagnostic function</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>enable uselect module</li>
<li>move websocket_helper.py from scripts to modules for frozen BC</li>
<li>refactor to use extmod implementation of software SPI class</li>
<li>mpconfigport_512k: disable framebuf module for 512k build</li>
<li>enable native emitter for Xtensa arch</li>
<li>enable inline Xtensa assembler</li>
<li>add "ota" target to produce firmware binary for use with yaota8266</li>
<li>use core-provided keyboard exception object</li>
<li>add "erase" target to Makefile, to erase entire flash</li>
<li>when doing GC be sure to trace the memory holding native code</li>
<li>modesp: flash_user_start(): support configuration with yaota8266</li>
<li>force relinking OTA firmware image if built after normal one</li>
<li>scripts/inisetup: dump FS starting sector/size on error</li>
<li>Makefile: produce OTA firmware as firmware-ota.bin</li>
<li>modesp: make check_fw() work with OTA firmware</li>
<li>enable utimeq module</li>
<li>Makefile: put firmware-ota.bin in build/, for consistency</li>
<li>modules/flashbdev: add RESERVED_SECS before the filesystem</li>
<li>modules/flashbdev: remove code to patch bootloader flash size</li>
<li>modules/flashbdev: remove now-unused function set_bl_flash_size</li>
<li>modules/flashbdev: change RESERVED_SECS to 0</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>add .gitignore to ignore Zephyr's "outdir" directory</li>
<li>zephyr_getchar: update to Zephyr 1.6 unified kernel API</li>
<li>switch to Zephyr 1.6 unified kernel API</li>
<li>support raw REPL</li>
<li>implement soft reset feature</li>
<li>main: initialize sys.path and sys.argv</li>
<li>use core-provided keyboard exception object</li>
<li>uart_core: access console UART directly instead of printk() hack</li>
<li>enable slice subscription</li>
</ul>
<p>docs:</p>
<ul>
<li>remove references to readall() and update stream read() docs</li>
<li>library/index: elaborate on u-modules</li>
<li>library/machine.I2C: refine definitions of I2C methods</li>
<li>library/pyb.Accel: add hardware note about pins used by accel</li>
<li>library/pyb.UART: added clarification about timeouts</li>
<li>library/pyb.UART: moved writechar doc to sit with other writes</li>
<li>esp8266/tutorial: update intro to add Getting the firmware section</li>
<li>library/machine.I2C: fix I2C constructor docs to match impl</li>
<li>esp8266/tutorial: close socket after reading page content</li>
<li>esp8266/general: add "Scarcity of runtime resources" section</li>
<li>library/esp: document esp.set_native_code_location() function</li>
<li>library/esp: remove para and add further warning about flash</li>
<li>usocket: clarify that socket timeout raises OSError exception</li>
</ul>
<p>travis:</p>
<ul>
<li>build STM32 F7 and L4 boards under Travis CI</li>
<li>include persistent bytecode with floats in coverage tests</li>
</ul>
<p>examples:</p>
<ul>
<li>hwapi: button_led: Add GPIO pin read example</li>
<li>hwapi: add soft_pwm example converted to uasyncio</li>
<li>http_client: use read() instead of readall()</li>
<li>hwapi: add uasyncio example of fading 2 LEDs in parallel</li>
<li>hwapi: add example for machine.time_pulse_us()</li>
<li>hwapi: add hwconfig for console tracing of LED operations</li>
<li>accellog.py: change 1: to /sd/, and update comment about FS</li>
<li>hwapi/hwconfig_console: don't alloc memory in value()</li>
</ul>dpgeorgetag:github.com,2008:Repository/290133466/v1.8.62016-11-10T10:25:01Zv1.8.6: ESP8266 port uses SDK 2.0, has more heap, has support for 512k devices<p>This release brings some code size reductions to the core as well as<br>
more tests and improved coverage which is now at 94.3%.</p>
<p>The time.ticks_diff(a, b) function has changed: the order of the arguments<br>
has been swapped so that it behaves like "a - b", and it can now return a<br>
negative number if "a" came before "b" (modulo the period of the ticks<br>
functions).</p>
<p>For the ESP8266 port the Espressif SDK has been updated to 2.0.0, the<br>
heap has been increased from 28k to 36k, and there is support for 512k<br>
devices via "make 512k". upip is included by default as frozen bytecode.<br>
The network module now allows access-point reconnection without WiFi<br>
credentials, and exposes configuration for the station DHCP hostname. The<br>
DS18B20 driver now handles negative temperatures, and NeoPixel and APA102<br>
drivers handle 4 bytes-per-pixel LEDs.</p>
<p>For the CC3200 port there is now support for loading of precompiled .mpy<br>
files and threading now works properly with interrupts.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>py.mk: automatically add frozen.c to source list if FROZEN_DIR is defined</li>
<li>be more specific with MP_DECLARE_CONST_FUN_OBJ macros</li>
<li>specialise builtin funcs to use separate type for fixed arg count</li>
<li>{modbuiltins,obj}: use MP_PYTHON_PRINTER where possible</li>
<li>modbuiltins: add builtin "slice", pointing to existing slice type</li>
<li>add "delattr" builtin, conditional on MICROPY_CPYTHON_COMPAT</li>
<li>sequence: fix reverse slicing of lists</li>
<li>fix null pointer dereference in mpz.c, fix missing va_end in warning.c</li>
<li>remove asserts that are always true in emitbc.c</li>
<li>fix wrong assumption that m_renew will not move if shrinking</li>
<li>change config default so m_malloc0 uses memset if GC not enabled</li>
<li>add MICROPY_FLOAT_CONST macro for defining float constants</li>
<li>move frozen bytecode Makefile rules from ports to common mk files</li>
<li>strip leading dirs from frozen mpy files, so any path can be used</li>
</ul>
<p>extmod:</p>
<ul>
<li>vfs_fat_file: check fatfs f_sync() and f_close() returns for errors</li>
<li>vfs_fat_file: make file.close() a no-op if file already closed</li>
<li>utime_mphal: ticks_diff(): switch arg order, return signed value</li>
<li>utime_mphal: add MP_THREAD_GIL_EXIT/ENTER warppers for sleep functions</li>
<li>utime_mphal: implement ticks_add(), add to all maintained ports</li>
<li>utime_mphal: allow ticks functions period be configurable by a port</li>
</ul>
<p>lib:</p>
<ul>
<li>utils/pyhelp.c: use mp_printf() instead of printf()</li>
<li>utils/pyexec: add mp_hal_set_interrupt_char() prototype</li>
<li>libm: move Thumb-specific sqrtf function to separate file</li>
</ul>
<p>drivers:</p>
<ul>
<li>add "from micropython import const" when const is used</li>
</ul>
<p>tools:</p>
<ul>
<li>upgrade upip to 1.1.4: fix error on unix when installing to non-existing<br>
absolute path</li>
<li>pip-micropython: remove deprecated wrapper tool</li>
<li>check_code_size.sh: code size validation script for CI</li>
<li>replace upip tarball with just source file, to make its inclusion as<br>
frozen modules in multiple ports less magic</li>
</ul>
<p>tests:</p>
<ul>
<li>extmod/vfs_fat: improve VFS test coverage</li>
<li>basics/builtin_slice: add test for "slice" builtin name</li>
<li>basics: add test for builtin "delattr"</li>
<li>extmod/vfs_fat_fsusermount: improve fsusermount test coverage</li>
<li>extmod/vfs_fat_oldproto: test old block device protocol</li>
<li>basics/gc1: garbage collector threshold() coverage</li>
<li>extmod/uhashlib_sha1: coverage for SHA1 algorithm</li>
<li>extmod/uhashlib_sha256: rename sha256.py test</li>
<li>btree1: fix out of memory error running on esp8266</li>
<li>extmod/ticks_diff: test for new semantics of ticks_diff()</li>
<li>extmod/framebuf1: test framebuffer pixel clear, and text function</li>
</ul>
<p>minimal port:</p>
<ul>
<li>Makefile: split rule for firmware.bin generation</li>
</ul>
<p>unix port:</p>
<ul>
<li>Makefile: remove references to deprecated pip-micropython</li>
<li>modtime: use ticks_diff() implementation from extmod/utime_mphal.c</li>
<li>mphalport.h: add warning of mp_hal_delay_ms() implementation</li>
<li>modtime: switch ticks/sleep_ms/us() to utime_mphal</li>
<li>fix symbol references for x86 Mac</li>
<li>replace upip tarball with just source file</li>
</ul>
<p>windows port:</p>
<ul>
<li>enable utime_mphal following unix, define mp_hal_ticks_*</li>
<li>fix utime_mphal compilation for msvc</li>
<li>implement mp_hal_ticks_cpu in terms of QueryPerformanceCounter</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>exclude ticks_diff test for qemu-arm port</li>
<li>exclude extmod/vfs_fat_fileio.py test</li>
<li>exclude new vfs_fat tests</li>
<li>enable software floating point support, and float tests</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>modutime: refactor to use extmod's version of ticks_cpu</li>
<li>refactor pin usage to use mp_hal_pin API</li>
<li>led: refactor LED to use mp_hal_pin_output() init function</li>
<li>Makefile: use standard rules for frozen module generation</li>
<li>modutime: consistently convert to MP_ROM_QSTR/MP_ROM_PTR</li>
<li>enable SD power save (disable CLK on idle)</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>use mp_raise_XXX helper functions to reduce code size</li>
<li>mods/pybspi: allow "write" arg of read/readinto to be positional</li>
<li>enable loading of precompiled .mpy files</li>
<li>fix thread mutex's so threading works with interrupts</li>
</ul>
<p>teensy port:</p>
<ul>
<li>update to provide new mp_hal_pin_XXX functions following stmhal</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: use latest esptool.py flash size auto-detection</li>
<li>esp_init_data: auto-initialize system params with vendor SDK 2.0.0</li>
<li>esp8266.ld: move help.o to iROM</li>
<li>esp8266.ld: move modmachine.o to iROM</li>
<li>esp8266.ld: move main.o to iROM</li>
<li>add MP_FASTCODE modifier to put a function to iRAM</li>
<li>main: mark nlr_jump_fail() as MP_FASTCODE</li>
<li>modules/webrepl: enforce only one concurrent WebREPL connection</li>
<li>etshal.h: add few more ESP8266 vendor lib prototypes</li>
<li>modesp: add flash_user_start() function</li>
<li>add support for building firmware version for 512K modules</li>
<li>scripts: make neopixel/apa102 handle 4bpp LEDs with common code</li>
<li>modutime: consistently convert to MP_ROM_QSTR/MP_ROM_PTR</li>
<li>modnetwork: config(): fix copy-paste error in setting "mac"</li>
<li>scripts/port_diag: add descriptions for esf_buf types</li>
<li>modnetwork.c: allows AP reconnection without WiFi credentials</li>
<li>main: bump heap size to 36K</li>
<li>etshal.h: add prototypes for SPIRead/SPIWrite/SPIEraseSector</li>
<li>etshal.h: adjust size of MD5_CTX structure</li>
<li>modules: fix negative temperature in ds18x20 driver</li>
<li>rename "machine" module implementation to use contemporary naming</li>
<li>rework webrepl_setup to run over wired REPL</li>
<li>espneopixel.c: solve glitching LED issues with cpu at 80MHz</li>
<li>include upip as a standard frozen bytecode module</li>
<li>update docs for esptool 1.2.1/SDK 2.0 (--flash_size=detect)</li>
<li>modnetwork.c: expose configuration for station DHCP hostname</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>implement utime module</li>
<li>use board/SoC values for startup banner based on Zephyr config</li>
<li>initial implementation of machine.Pin</li>
<li>zephyr_getchar: update for recent Zephyr refactor of console hooks</li>
<li>support time -> utime module "weaklink"</li>
<li>README: update for the current featureset, add more info</li>
<li>mpconfigport.h: move less important params to the bottom</li>
<li>Makefile: allow to adjust heap size from make command line</li>
<li>Makefile: update comments to the current state of affairs</li>
<li>Makefile: allow to override Zephyr config from make command line</li>
<li>Makefile: add minimal port</li>
<li>Makefile: add -fomit-frame-pointer to reduce code size</li>
<li>mphalport.h: update for new "unified" kernal API (sleep functions)</li>
</ul>
<p>docs:</p>
<ul>
<li>machine.SPI: bring up to date with Hardware API, make vendor-neutral</li>
<li>machine.SPI: improve descriptions of xfer methods</li>
<li>library/builtins: add docs for delattr and slice</li>
<li>library/network: reword intro paragraph</li>
<li>library/network: typo fixes, consistent acronym capitalization</li>
<li>library/index: update TOCs so builtins sorted before modules</li>
<li>utime: document ticks_cpu() in more detail</li>
<li>utime: describe new semantics of ticks_diff() (signed ring arithmetics)</li>
<li>utime: add docs for ticks_add(), improvements for other ticks_*()</li>
<li>esp8266: update for new WebREPL setup procedure</li>
<li>*/quickref.rst: use new semantics of ticks_diff()</li>
<li>library/machine.Pin: update Pin docs to align with new HW API</li>
</ul>
<p>travis:</p>
<ul>
<li>integrate tools/check_code_size.sh</li>
<li>minimal: Use CROSS=1, for binary size check</li>
</ul>
<p>examples:</p>
<ul>
<li>http_server_simplistic: add "not suitable for real use" note</li>
<li>hwapi: example showing best practices for HW API usage in apps</li>
<li>hwapi: add hwconfig for DragonBoard 410c</li>
</ul>dpgeorge