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