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