summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-03-07tools/mpremote: Bump version to 0.2.0.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-03-07tests/basics: Add test for creating small-ints in nan-box builds.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-03-07docs/library/esp32.rst: Mark esp32.Partition as not taking kw args.Damien George
Fixes issue #8380. Signed-off-by: Damien George <damien@micropython.org>
2022-03-07docs/differences/python_35: Mark PEP 486 as not applicable.David Lechner
This adds the "Not relevant" designation to PEP 486 since it has to do with the Python Launcher for Windows and not the Python language itself. Also fix a typo while we are touching this line. Signed-off-by: David Lechner <david@pybricks.com>
2022-03-07docs/library/machine.UART.rst: Add details for `invert` parameter.Jan
2022-03-07esp32/machine_uart: Make UART.init preserve unspecified parameters.robert-hh
Most of the settings behaved that way, except for baudate, timeout, timout_char, invert and flow.
2022-03-07esp32/machine_pwm: Always set the duty cycle when setting the frequency.robert-hh
If setting the frequency to a value used already by an existing timer, this timer will be used. But still, the duty cycle for that channel may have to be changed. Fixes issues #8306 and #8345.
2022-03-02esp32: Sleep one tick in MICROPY_EVENT_POLL_HOOK.Daniël van de Giessen
If MicroPython threads are enabled, loops waiting for an incoming event should release the GIL and suspend, allowing other tasks to run while they wait. Prior to this commit, the problem can easily be observed by running a thread that is both busy and regularly releases the GIL (for example a loop doing something then sleeping a few ms after each iteration). When the main task is at the REPL, the thread is significantly stalled. If the main task is manually made to release the GIL (for example, by calling utime.sleep_ms(500)) the other thread can be seen immediately working at the expected speed again. Additionally, there are various instances in where blocking functions run MICROPY_EVENT_POLL_HOOK in a loop while they wait for a certain event/ condition. For example the uselect methods poll objects to determine whether data is available, but uses 100% of CPU while it does, constantly calling MICROPY_EVENT_POLL_HOOK in the process. The MICROPY_EVENT_POLL_HOOK macro is only ever used in waiting loops, where (if threads are enabled) it makes sense to yield for a single tick so that these loops do not consume all CPU cycles but instead other threads may execute. (In fact, the thing these loops wait for may even indirectly or directly depend on another task being able to run.) This change moves the sleep that was inside the REPL input function to inside the MICROPY_EVENT_POLL_HOOK macro, where the GIL is already being released, solving both the blocking REPL issue and the 100% CPU use issue at the same time. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2022-03-01esp32/machine_uart: Allow limited configuration of REPL UART.Andrew Leech
Some applications may want to adjust the hard coded 115200 REPL buadrate, and this commit allows it to be changed dynamically via machine.UART(0).
2022-03-01esp32/uart: Correctly init low-level UART driver for REPL.Andrew Leech
uart_driver_install() needs to be called to set up the UART correctly.
2022-03-01rp2/mpthreadport: Fix memory corruption when thread is created in core1.YoungJoon Chun
The stack (and arg) of core1 is itself a root pointer, not just the entries in it. Without this fix the GC could reclaim the entire stack (and argument object). Fixes issues #7124 and #7981.
2022-03-01py/bc.h: Fix C++ compilation of public API.stijn
Casts between unrelated types must be explicit. Regression in f2040bfc7ee033e48acef9f289790f3b4e6b74e5
2022-02-28unix/.gitignore: Remove *.py from ignore list.Damien George
.py files are valid source files and shouldn't be ignored. This line was from the early days when .py files in the unix directory were used for testing. Signed-off-by: Damien George <damien@micropython.org>
2022-02-28tools/ci.sh: Run performance benchmark as part of all unix test runs.Damien George
This tests that the performance benchmarks run without error. Signed-off-by: Damien George <damien@micropython.org>
2022-02-28tests/unix: Add coverage test for freezing various objects.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-28tools/mpy-tool.py: Fix frozen comment generation to escape chars.robert-hh
That caused the compile of frozen_content.c to fail if characters like backslash were in a short string. Thanks to @hippy for identifying the spot to change.
2022-02-25tools/upip.py: Remove unused op_basename() function.Damien George
It seems this was never used, at least not since its inclusion in this repository. Signed-off-by: Damien George <damien@micropython.org>
2022-02-25esp32/boards: Add specific deploy instructions for S3 variant.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-25windows: Unify project file headers.stijn
The xmlns attribute is required for older msbuild version (e.g. for VS2015). Add it where needed, and reorder the attributes so all files look the same.
2022-02-25tools/mpremote: Add "umount" command.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-25tools/mpremote: Add "resume" and "soft-reset" commands.Damien George
This makes the auto soft-reset behaviour of mpremote more logical, and now configurable via these new commands. Signed-off-by: Damien George <damien@micropython.org>
2022-02-24qemu-arm: Add tests for freezing viper and asm_thumb code.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-24tests/perf_bench: Skip bm_chaos test if random.randrange is unavailable.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-24tools/ci.sh: Run urandom test scripts as part of native module tests.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-24github/workflows: Add new workflow to test .mpy file format and tools.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-24ports: Recompile bytecode tests now that .mpy format changed.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-24py: Rework bytecode and .mpy file format to be mostly static data.Damien George
Background: .mpy files are precompiled .py files, built using mpy-cross, that contain compiled bytecode functions (and can also contain machine code). The benefit of using an .mpy file over a .py file is that they are faster to import and take less memory when importing. They are also smaller on disk. But the real benefit of .mpy files comes when they are frozen into the firmware. This is done by loading the .mpy file during compilation of the firmware and turning it into a set of big C data structures (the job of mpy-tool.py), which are then compiled and downloaded into the ROM of a device. These C data structures can be executed in-place, ie directly from ROM. This makes importing even faster because there is very little to do, and also means such frozen modules take up much less RAM (because their bytecode stays in ROM). The downside of frozen code is that it requires recompiling and reflashing the entire firmware. This can be a big barrier to entry, slows down development time, and makes it harder to do OTA updates of frozen code (because the whole firmware must be updated). This commit attempts to solve this problem by providing a solution that sits between loading .mpy files into RAM and freezing them into the firmware. The .mpy file format has been reworked so that it consists of data and bytecode which is mostly static and ready to run in-place. If these new .mpy files are located in flash/ROM which is memory addressable, the .mpy file can be executed (mostly) in-place. With this approach there is still a small amount of unpacking and linking of the .mpy file that needs to be done when it's imported, but it's still much better than loading an .mpy from disk into RAM (although not as good as freezing .mpy files into the firmware). The main trick to make static .mpy files is to adjust the bytecode so any qstrs that it references now go through a lookup table to convert from local qstr number in the module to global qstr number in the firmware. That means the bytecode does not need linking/rewriting of qstrs when it's loaded. Instead only a small qstr table needs to be built (and put in RAM) at import time. This means the bytecode itself is static/constant and can be used directly if it's in addressable memory. Also the qstr string data in the .mpy file, and some constant object data, can be used directly. Note that the qstr table is global to the module (ie not per function). In more detail, in the VM what used to be (schematically): qst = DECODE_QSTR_VALUE; is now (schematically): idx = DECODE_QSTR_INDEX; qst = qstr_table[idx]; That allows the bytecode to be fixed at compile time and not need relinking/rewriting of the qstr values. Only qstr_table needs to be linked when the .mpy is loaded. Incidentally, this helps to reduce the size of bytecode because what used to be 2-byte qstr values in the bytecode are now (mostly) 1-byte indices. If the module uses the same qstr more than two times then the bytecode is smaller than before. The following changes are measured for this commit compared to the previous (the baseline): - average 7%-9% reduction in size of .mpy files - frozen code size is reduced by about 5%-7% - importing .py files uses about 5% less RAM in total - importing .mpy files uses about 4% less RAM in total - importing .py and .mpy files takes about the same time as before The qstr indirection in the bytecode has only a small impact on VM performance. For stm32 on PYBv1.0 the performance change of this commit is: diff of scores (higher is better) N=100 M=100 baseline -> this-commit diff diff% (error%) bm_chaos.py 371.07 -> 357.39 : -13.68 = -3.687% (+/-0.02%) bm_fannkuch.py 78.72 -> 77.49 : -1.23 = -1.563% (+/-0.01%) bm_fft.py 2591.73 -> 2539.28 : -52.45 = -2.024% (+/-0.00%) bm_float.py 6034.93 -> 5908.30 : -126.63 = -2.098% (+/-0.01%) bm_hexiom.py 48.96 -> 47.93 : -1.03 = -2.104% (+/-0.00%) bm_nqueens.py 4510.63 -> 4459.94 : -50.69 = -1.124% (+/-0.00%) bm_pidigits.py 650.28 -> 644.96 : -5.32 = -0.818% (+/-0.23%) core_import_mpy_multi.py 564.77 -> 581.49 : +16.72 = +2.960% (+/-0.01%) core_import_mpy_single.py 68.67 -> 67.16 : -1.51 = -2.199% (+/-0.01%) core_qstr.py 64.16 -> 64.12 : -0.04 = -0.062% (+/-0.00%) core_yield_from.py 362.58 -> 354.50 : -8.08 = -2.228% (+/-0.00%) misc_aes.py 429.69 -> 405.59 : -24.10 = -5.609% (+/-0.01%) misc_mandel.py 3485.13 -> 3416.51 : -68.62 = -1.969% (+/-0.00%) misc_pystone.py 2496.53 -> 2405.56 : -90.97 = -3.644% (+/-0.01%) misc_raytrace.py 381.47 -> 374.01 : -7.46 = -1.956% (+/-0.01%) viper_call0.py 576.73 -> 572.49 : -4.24 = -0.735% (+/-0.04%) viper_call1a.py 550.37 -> 546.21 : -4.16 = -0.756% (+/-0.09%) viper_call1b.py 438.23 -> 435.68 : -2.55 = -0.582% (+/-0.06%) viper_call1c.py 442.84 -> 440.04 : -2.80 = -0.632% (+/-0.08%) viper_call2a.py 536.31 -> 532.35 : -3.96 = -0.738% (+/-0.06%) viper_call2b.py 382.34 -> 377.07 : -5.27 = -1.378% (+/-0.03%) And for unix on x64: diff of scores (higher is better) N=2000 M=2000 baseline -> this-commit diff diff% (error%) bm_chaos.py 13594.20 -> 13073.84 : -520.36 = -3.828% (+/-5.44%) bm_fannkuch.py 60.63 -> 59.58 : -1.05 = -1.732% (+/-3.01%) bm_fft.py 112009.15 -> 111603.32 : -405.83 = -0.362% (+/-4.03%) bm_float.py 246202.55 -> 247923.81 : +1721.26 = +0.699% (+/-2.79%) bm_hexiom.py 615.65 -> 617.21 : +1.56 = +0.253% (+/-1.64%) bm_nqueens.py 215807.95 -> 215600.96 : -206.99 = -0.096% (+/-3.52%) bm_pidigits.py 8246.74 -> 8422.82 : +176.08 = +2.135% (+/-3.64%) misc_aes.py 16133.00 -> 16452.74 : +319.74 = +1.982% (+/-1.50%) misc_mandel.py 128146.69 -> 130796.43 : +2649.74 = +2.068% (+/-3.18%) misc_pystone.py 83811.49 -> 83124.85 : -686.64 = -0.819% (+/-1.03%) misc_raytrace.py 21688.02 -> 21385.10 : -302.92 = -1.397% (+/-3.20%) The code size change is (firmware with a lot of frozen code benefits the most): bare-arm: +396 +0.697% minimal x86: +1595 +0.979% [incl +32(data)] unix x64: +2408 +0.470% [incl +800(data)] unix nanbox: +1396 +0.309% [incl -96(data)] stm32: -1256 -0.318% PYBV10 cc3200: +288 +0.157% esp8266: -260 -0.037% GENERIC esp32: -216 -0.014% GENERIC[incl -1072(data)] nrf: +116 +0.067% pca10040 rp2: -664 -0.135% PICO samd: +844 +0.607% ADAFRUIT_ITSYBITSY_M4_EXPRESS As part of this change the .mpy file format version is bumped to version 6. And mpy-tool.py has been improved to provide a good visualisation of the contents of .mpy files. In summary: this commit changes the bytecode to use qstr indirection, and reworks the .mpy file format to be simpler and allow .mpy files to be executed in-place. Performance is not impacted too much. Eventually it will be possible to store such .mpy files in a linear, read-only, memory- mappable filesystem so they can be executed from flash/ROM. This will essentially be able to replace frozen code for most applications. Signed-off-by: Damien George <damien@micropython.org>
2022-02-24esp32/README.md: Update list of supported IDF versions.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-24tools/ci.sh: Update IDF v4.4 build to use v4.4 tag.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-22unix: Show compiler info in REPL banner.stijn
The unix port's main.c gets used by unix and windows ports, and with a variety of compilers, so it's convenient to see which version is actually being used immediately when starting micropython. This is similar to what CPython does.
2022-02-22extmod/moduplatform: Move platform PP definitions into a header.stijn
These are more generally useful than just for the module so make them globally available, prefixed consistently with MICROPY_PLATFORM_.
2022-02-22esp32/modules: Create ffat partition object with block_size=512.Damien George
Because these are formatted with a 512 sector size. Signed-off-by: Damien George <damien@micropython.org>
2022-02-22esp32/esp32_partition: Add support for specifying block_size.Damien George
To support filesystems that use a block size different from the native erase-page size. Signed-off-by: Damien George <damien@micropython.org>
2022-02-18esp32/mpconfigport.h: Enable remaining features to get to "extra" level.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-18esp32/mpconfigport.h: Use the "extra" feature level.Damien George
This commit is a no-op change to simplify existing config. Signed-off-by: Damien George <damien@micropython.org>
2022-02-18tests/run-tests.py: Skip repl tests when running windows underneath.stijn
Some versions of Python (for instance: the mingw-w64 version which can be installed on MSYS2) do include a pty module and claim to be posix-like (os.name == 'posix'), yet the select.select call used in run-tests.py hangs forever. To be on the safe side just exclude anything which might be running on windows.
2022-02-18stm32/mboot: Allow a board more control over entry initialisation.Damien George
If MBOOT_BOARD_ENTRY_INIT is defined by a board then that function must now make sure system clocks are configured, eg by calling mboot_entry_init(). Signed-off-by: Damien George <damien@micropython.org>
2022-02-18stm32/mboot: Allow a board to fully configure system clocks.Damien George
If a board wants to customise the clocks it can define the following: MBOOT_CLK_PLLM MBOOT_CLK_PLLN MBOOT_CLK_PLLP MBOOT_CLK_PLLQ MBOOT_CLK_PLLR (only needed on STM32H7) MBOOT_FLASH_LATENCY MBOOT_CLK_AHB_DIV MBOOT_CLK_APB1_DIV MBOOT_CLK_APB2_DIV MBOOT_CLK_APB3_DIV (only needed on STM32H7) MBOOT_CLK_APB4_DIV (only needed on STM32H7) Signed-off-by: Damien George <damien@micropython.org>
2022-02-18stm32/boards/NUCLEO_WB55: Add Arduino pin alias definitions.Christophe Priouzeau
Fixes issue #8295. Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
2022-02-18windows/Makefile: Specify CXXFLAGS in the Makefile.stijn
Enables building user modules which use C++ code, like the unix port.
2022-02-18unix/Makefile: Remove explicit addition of -std=c++ flag.stijn
This was added merely for building the C++ user module example, so it's a better fit to add it in the corresponding micropython.mk.
2022-02-18drivers/sdcard: Allow setting the final SPI baudrate.robert-hh
This baudrate is supplied in the constructor. The default is 1320000 as before. Example: sd = sdcard.SDCard(spi, cs, baudrate=20_000_000)
2022-02-18drivers/ninaw10: Add NIC-level ioctl function.iabdalkader
This commit adds support in the driver for irregular commands. It currently supports setting GPIO pin mode, and GPIO pin read/write value.
2022-02-18tools/verifygitlog.py: Ignore line length in body if it's a URL.David Lechner
This changes the git commit message line length check to ignore lines that contain URLs, since these cannot be wrapped without breaking tools that detect URLs and create a link. Signed-off-by: David Lechner <david@pybricks.com>
2022-02-18windows/appveyor: Fix printing of test failures.David Lechner
In the `after_test` section, the current directory is `ports/windows` when tests are run, so running `run-tests.py` without changing the directory or specifying a path causes a file not found error. This commit fixes the problem by changing the directory before calling `run-tests.py`. Signed-off-by: David Lechner <david@pybricks.com>
2022-02-18README: Update link for ARM embedded toolchain to developer.arm.com.Bradley Wogsland
2022-02-18rp2/Makefile: Add FROZEN_MANIFEST Makefile option, to override default.YoungJoon Chun
2022-02-17py/gc: Update debug code to compile with changes to qstr pool types.Damien George
Following on from 18b1ba086c0e5547ca81030bf13b026961f80720 and f46a7140f55a8f6d80f9c2d5f8db7af3de116794. Signed-off-by: Damien George <damien@micropython.org>
2022-02-12tests/extmod/vfs_fat_finaliser.py: Make finalisation more robust.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2022-02-11py/qstr: Use `const` consistently to avoid a cast.Artyom Skrobov
Originally at adafruit#4707 Signed-off-by: Artyom Skrobov <tyomitch@gmail.com>