summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-06-23zephyr/boards/beagleconnect_freedom: Enable networking.Ayush Singh
Having both PWM and networking enabled now works fine. So enable subg networking. Signed-off-by: Ayush Singh <ayush@beagleboard.org>
2025-06-19samd/boards: Change the SparkFun vendor name to SparkFun.robert-hh
Only the board.json files are affected. No other file uses the style "Sparkfun". The documentation is fine. Signed-off-by: robert-hh <robert@hammelrath.com>
2025-06-19py/repl: Skip private variables when printing tab completion options.Andrew Leech
Any '_' variables/functions in frozen modules are currently printed, when they shouldn't be. That's due to underscore names possibly existing between the start and end qstrs which are used to print the auto-complete matches. The underscore names should be skipped when iterating between the two boundary qstrs. The underscore attributes are removed from the extra coverage exp file because tab completing "import <tab>" no longer lists modules beginning with an underscore. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2025-06-19tests/cmdline: Add a test for REPL paste mode.Andrew Leech
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2025-06-19tests/run-tests.py: Add support for ctrl keys in REPL tests.Andrew Leech
This allows having {\xDD} in tests, which will be expanded to the given hex character. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2025-06-19rp2/CMakeLists.txt: Make linker script configurable.Phil Howard
Add `MICROPY_BOARD_LINKER_SCRIPT` to specify a custom linker script for rp2 boards/variants. This may, for example, include a PSRAM region so that C buffers or otherwise can be allocated into PSRAM. Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-06-19rp2/CMakeLists.txt: Make board's pins.csv configurable.Phil Howard
Allow `mpconfigboard.cmake` to specify a custom `MICROPY_BOARD_PINS` to override `${MICROPY_BOARD_DIR}/pins.csv`. Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-06-17rp2/rp2_flash: Add default MICROPY_HW_FLASH_MAX_FREQ.Phil Howard
Set a default MICROPY_HW_FLASH_MAX_FREQ if PICO_FLASH_SPI_CLKDIV is unset. Use a divider of 4, which is the default in boot2_generic_03h.S. Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-06-17rp2/rp2_flash: Add MICROPY_HW_FLASH_MAX_FREQ to replace fixed max freq.Phil Howard
Assuming a 133MHz capable flash in 91cff8e4f10ea665c5f3f4b16d62c98d6ca22037 caused `rp2_flash_set_timing_internal` to set out of range dividers for some boards (anything with value of 4 and flash that doesn't tolerate higher speeds). This affected (at least) the XIAO RP2350 board, making it non-bootable. Since Pico SDK's `PICO_FLASH_SPI_CLKDIV` is entirely unreliable on a system with a variable system clock (users can change it at runtime) then use it only to work out a default `MICROPY_HW_FLASH_MAX_FREQ`. This value can be overridden in board config. Note that RP2350's default clock is 150MHz, RP2040's is 125MHz and it has been certified at 200MHz so it's quite possible that `PICO_FLASH_SPI_CLKDIV` is unreliable even at standard RP2 clocks. (If flash timings are marginal then this can manifest as instability rather than outright failure.) Fixes issue #17375. Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-06-17esp32/modesp32: Fix access to ext0_pin only if defined.Meir Armon
In different functions `machine_rtc_config.ext0_pin` is accessed where SOC_PM_SUPPORT_EXT0_WAKEUP is not defined, fix that. Signed-off-by: Meir Armon <meirarmon@gmail.com>
2025-06-17py/modio: Fix the case where write fails in BufferedWriter.flush.Jeff Epler
Previously, there was no test coverage of the "write failed" path. In fact, the assertion would fire instead of gracefully raising a Python exception. Slightly re-organize the code to place the assertion later. Add a test case which exercises all paths, and update the expected output. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16tests/extmod: Add platform_basic.py for basic coverage test of platform.Jeff Epler
Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16tests/cpydiff: Document complex() parsing difference.Jeff Epler
In #17384 it was decided that fixing this difference was not worth the code size increase. So document it instead. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16github/workflows: Add sanitize_undefined workflow to unix port CI.Jeff Epler
gcc's "undefined behavior" sanitizer can catch a range of misbehaviors at runtime that normally go unnoticed. These include integer and pointer operations that are "undefined" per the relevant C specification. This commit enables undefined behavior detection during a new unix coverage-like build. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16tools/ci.sh: Add functions for sanitizer builds.Jeff Epler
Includes both undefined and address sanitizer configurations. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16py: Fix undefined left shift operations.Jeff Epler
By ensuring the value to be shifted is an unsigned of the appropriate type. This fixes several runtime diagnostics such as: ../../py/binary.c:199:28: runtime error: left shift of 32768 by 16 places cannot be represented in type 'int' Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16docs/rp2: Document the new rp2 Timer hard= option.Chris Webb
Signed-off-by: Chris Webb <chris@arachsys.com>
2025-06-16tests/ports/rp2: Add tests for rp2-specific timer options.Chris Webb
Add tests for both one-shot and periodic timers using the rp2-specific tick_hz= and hard= parameters. Signed-off-by: Chris Webb <chris@arachsys.com>
2025-06-16rp2/machine_timer: Support hard IRQ timer callbacks.Chris Webb
Unlike some boards like stm32, timer callbacks on the rp2 port are unconditionally dispatched via mp_sched_schedule(), behaving like soft IRQs with consequent GC jitter and delays. Add a 'hard' keyword argument to the rp2 Timer constructor and init. This defaults to False but if it is set True, the timer callback will be dispatched in hard IRQ context rather than queued. Signed-off-by: Chris Webb <chris@arachsys.com>
2025-06-16drivers/esp-hosted: Replace EVENT_POLL_HOOK with mp_event_wait_ms.Andrew Leech
Signed-off-by: Andrew Leech <andrew@alelec.net>
2025-06-16renesas-ra: Replace MICROPY_EVENT_POLL_HOOK with mp_event_wait.Andrew Leech
Basic update to the renesas-ra port to replace the traditional `MICROPY_EVENT_POLL_HOOK` with the newer mp_event_wait API as appropriate. Signed-off-by: Andrew Leech <andrew@alelec.net>
2025-06-16tools/mpremote: Improve df command to use new no-arg vfs.mount() query.Damien George
The existing `mpremote df` command is not very good, because it needs to assume that all directories in the root directory are mount points, and also doesn't correctly stat filesystems when the current directory is not the root. This leads to wrong results With the introduction of `vfs.mount()` to return a list of mounted filesystems and their path, a much better df can be implemented, as done in this commit. The new df will also fall back to using the old approach of listing the root directory if the no-arg `vfs.mount()` query is not supported. Signed-off-by: Damien George <damien@micropython.org>
2025-06-16esp32/modesp32: Make wake_on_ext1 available only on SoCs supporting it.Meir Armon
The `esp32.wake_on_ext1()` method should only be available on boards that have SOC_PM_SUPPORT_EXT1_WAKEUP=y. And update docs to reflect this. Signed-off-by: Meir Armon <meirarmon@gmail.com>
2025-06-16esp32/modesp32: Make wake_on_ext0 available only on SoCs supporting it.Meir Armon
The `esp32.wake_on_ext0()` method should only be available on boards that have SOC_PM_SUPPORT_EXT0_WAKEUP=y. And update docs to reflect this. Signed-off-by: Meir Armon <meirarmon@gmail.com>
2025-06-16esp32/modesp32: Make wake_on_touch available only on SoCs supporting it.Meir Armon
The `esp32.wake_on_touch()` method should only be available on boards that have SOC_TOUCH_SENSOR_SUPPORTED=y. And update docs to reflect this. Signed-off-by: Meir Armon <meirarmon@gmail.com>
2025-06-16py/asmbase: Fix assertion error with viper code.Jeff Epler
In the case of viper code it's possible to reach MP_ASM_PASS_EMIT with a code size of 0 bytes. Update the assertion accordingly. After this change, `mpy-cross -march=debug' on viper tests no longer crashes. Fixes issue #17467. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16unix/coverage: Add coverage test for left adjusted print.Jeff Epler
Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16py/mpprint: Remove unused "PF_FLAG_NO_TRAILZ" flag.Jeff Epler
Looking at the git history, there's no indication that the `PF_FLAG_NO_TRAILZ` flag was ever implemented or that "%!" was used as an `mp_printf` format string in practice. So remove the flag and re-number the other flags. Leave `PF_FLAG_SEP_POS` at 9 (the highest position that probably works with 16-bit integers like the pic16bit port). Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16py/objlist: Reduce code size in slice operations.Jeff Epler
By refactoring the code to separate out the slicing operation from the regular indexing operation, code can be shared between the various types of slice operations (read/assign/delete). Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16py/mpz: Avoid undefined behavior decrementing NULL.Jeff Epler
In the case where an mpz number is zero, its `len` is 0 and its `dig` is NULL. In that case, decrementing NULL via `d--` is undefined behavior according to the C specification. Restructuring the loops in this way avoids undefined behavior. Also, ensure that these cases are tested in the coverage test. This doesn't make much difference now, but would otherwise cause errors later when the undefined behavior sanitizer is employed in CI. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-16esp32/modesp32: Make wake_on_ulp available only on SoCs that support it.Meir Armon
The `esp32.wake_on_ulp()` method should only be available on boards that have SOC_ULP_SUPPORTED=y. Update docs to reflect this. Signed-off-by: Meir Armon <meirarmon@gmail.com>
2025-06-14esp32/README: Update README to describe auto filesystem sizing.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2025-06-14esp32/boards: Convert all boards to auto detect flash size.Damien George
Remove the "vfs" entry from all partitions-*.csv files, and then remove duplicated files. And remove the ESP32_GENERIC_S3-FLASH_4M variant, because it's no longer needed. Signed-off-by: Damien George <damien@micropython.org>
2025-06-14esp32/main: Auto detect the size of flash and auto create vfs partition.Damien George
Currently in the esp32 port the size of the SPI flash must be configured at build time, eg 4MiB, 8MiB, etc. Also, the esp32 partition table must be configured at build time, which depends on the size of the SPI flash. A bigger flash means more can be allocated to the user filesystem. This commit makes it so the SPI flash size is automatically determined at runtime, and the filesystem size is automatically set to take up as much room as possible (a "vfs" partition is created automatically if it doesn't exist). This works by: - Setting the SPI flash size to be 4MiB in the build (or some other value, as long as the firmware app fits). - Removing the vfs partition from the esp32 partition table (only nvs, phy_init and firmware, and maybe romfs, remain in the partition table). - At boot, query the physical size of the SPI flash and use that as the actual size in the code. - If it doesn't already exist, automatically create a "vfs" partition which takes up the flash from the end of all existing partitions to the end of flash. This allows simplifying a lot of board configurations, and removing some board variants that just change the flash size (to be done in a following commit). It's also fully backwards compatible, in the following sense: - Existing boards with MicroPython firmware will continue to work with the same filesystem, ie the filesystem won't be erased when the firmware is updated. - If a user has a custom esp32 partition table and installs MicroPython as a bare app into the app partition, the new MicroPython firmware will honour the esp32 partition table and use either "vfs" or "ffat" partitions as the filesystem. Signed-off-by: Damien George <damien@micropython.org>
2025-06-13esp8266/modmachine: Use common machine_time_pulse_us implementation.Damien George
Testing shows that for frequencies which the esp8266 can handle -- up to about 1kHz -- `machine.time_pulse_us()` now gives more accurate results. Prior to this commit it would measure on average about 1us lower, but now the average is much closer to the true value. For example a pulse that is 1000us long, it would measure between 998 and 1000us. Now it measures between 999us and 1001us. Signed-off-by: Damien George <damien@micropython.org>
2025-06-13extmod/machine_pulse: Optimise time_pulse_us for code size.Damien George
This implementation is based on the esp8266 custom implementation, and further optimised for size and accuracy. Testing on PYBD_SF2 and RPI_PICO2_W shows that it is at least as good as the original implementation in performance. Signed-off-by: Damien George <damien@micropython.org>
2025-06-12tests/run-natmodtests.py: Consider a test skipped if mpy doesn't exist.Damien George
This is different to a test not being run because there is no corresponding natmod at all. Signed-off-by: Damien George <damien@micropython.org>
2025-06-12tests/run-perfbench.py: Create a _result.json at end of run.Damien George
Reuse the `create_test_report()` function from `run-tests.py` to generate a `_result.json` file summarising the test run. Signed-off-by: Damien George <damien@micropython.org>
2025-06-12tests/run-natmodtests.py: Create a _result.json at end of run.Damien George
Reuse the `create_test_report()` function from `run-tests.py` to generate a `_result.json` file summarising the test run. Signed-off-by: Damien George <damien@micropython.org>
2025-06-12tests/run-multitests.py: Create a _result.json at end of run.Damien George
Reuse the `create_test_report()` function from `run-tests.py` to generate a `_result.json` file summarising the test run. If there's more than one permutation of the test run, only the last result is saved. Signed-off-by: Damien George <damien@micropython.org>
2025-06-12tests/run-tests.py: Factor out helper function to create test report.Damien George
This commit factors existing code in `run-tests.py` into a new helper function `create_test_report()`. That function prints out a summary of the test run (eg number of tests passed, number failed, number skipped) and creates the corresponding `_results.json` file. This is done so `create_test_report()` can be reused by the other test runners. The `test_count` counter is now gone, and instead the number of passed plus number of failed tests is used as an equivalent count. For consistency this commit makes a minor change to the printed output of `run-tests.py`: instead of printing a shorthand name for tests that failed or skipped, it now prints the full name. Eg what was previously printed as `attrtuple2` is now printed as `basics/attrtuple2.py`. This makes the output a little longer (when there are failed/skipped tests) but helps to disambiguate the test name, eg which directory it's in. Signed-off-by: Damien George <damien@micropython.org>
2025-06-12tests/extmod/random_extra_float.py: Skip when funcs not available.Damien George
This test was factored out from `random_extra.py` back in commit 6572029dc0665e58c2ea7355c9e541bdf83105a4, and the skip logic copied from that file. But the skip logic needs to test that the `random` and `uniform` functions exist, not `randint`. This commit fixes that skip logic. Signed-off-by: Damien George <damien@micropython.org>
2025-06-11github/workflows: Use windows-latest runner for all Windows CI jobs.Damien George
The windows-2019 runner has been deprecated by GitHub, so stop using that. Also take the chance to stop using windows-2022 and just use windows-latest everywhere. Signed-off-by: Damien George <damien@micropython.org>
2025-06-11py/objfloat: Change MSVC workaround for NAN being a constant.Damien George
It's actually a bug in the Windows SDK, not MSVC, as per https://stackoverflow.com/questions/79195142/recent-msvc-versions-dont-treat-nan-as-constant-workaround/79324199#79324199 Thanks to @stinos. Signed-off-by: Damien George <damien@micropython.org>
2025-06-10py/parsenum: Fix parsing complex literals with negative real part.Jeff Epler
If a complex literal had a negative real part and a positive imaginary part, it was not parsed properly because the imaginary part also came out negative. Includes a test of complex parsing, which fails without this fix. Co-authored-by: ComplexSymbol <141301057+ComplexSymbol@users.noreply.github.com> Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-10py/objarray: Allow extending array with any iterable.Jeff Epler
As suggested by @dpgeorge, factor out part of array_construct to allow it to be used for construction & extension. Note that extending with a known-length list (or tuple) goes through the slow path of calling array_extend once per element. Fixes issue #7408. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-10py/parsenum: Further reduce code size in check for inf/nan.Jeff Epler
A few more bytes can be saved by not using nested `if`s (4 bytes for `build-MICROBIT/py/parsenum.o`, 8 bytes for RPI_PICO firmware). This commit is better viewed with whitespace changes hidden, because two blocks were reindented (e.g., `git show -b`). Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-10py/parsenum: Reduce code size in check for inf/nan.Jeff Epler
By avoiding two different checks of the string length, code size is reduced without changing behavior: Some invalid float/complex strings like "ix" will get handled just like "xx" in the main number literal parsing code instead. The optimizer alone couldn't remove the reundant comparisons because it couldn't make a transformation that let an invalid string like "ix" pass into the generic number parsing code. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-10extmod/modre: Use specific error message if regex is too complex.Jeff Epler
If the error reporting mode is at least "normal", report a failure due to a complex regex with a different message. Fixes issue #17150. Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-06-10py/dynruntime.mk: Enable single-precision float by default on armv6/7m.Damien George
Soft float now works on these ARM targets thanks to the parent commit. Signed-off-by: Damien George <damien@micropython.org>