aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-04-12py/profile: Resolve name collision with STATIC unset.matejcik
When building with STATIC undefined (e.g., -DSTATIC=), there are two instances of mp_type_code that collide at link time: in profile.c and in builtinevex.c. This patch resolves the collision by renaming one of them.
2021-04-12stm32/rfcore: Intercept addr-resolution HCI cmd to work around BLE bug.Damien George
The STM32WB has a problem when address resolution is enabled: under certain conditions the MCU can get into a state where it draws an additional 10mA or so and eventually ends up with a broken BLE RX path in the silicon. A simple way to reproduce this is to enable address resolution (which is the default for NimBLE) and start the device advertising. If there is enough BLE activity in the vicinity then the device will at some point enter the bad state and, if left long enough, will have permanent BLE RX damage. STMicroelectronics are aware of this issue. The only known workaround at this stage is to not enable address resolution, which is implemented by this commit. Work done in collaboration with Jim Mussared aka @jimmo. Signed-off-by: Damien George <damien@micropython.org>
2021-04-12stm32/rfcore: Fix race condition with C2 accessing free buffer list.Damien George
Prior to this commit, if C2 was busy (eg lots of BLE activity) then it may not have had time to respond to the notification on the IPCC_CH_MM channel by the time additional memory was available to put on that buffer. In such a case C1 would modify the free buffer list while C2 was potentially accessing it, and this would eventually lead to lost memory buffers (or a corrupt linked list). If all buffers become lost then ACL packets (asynchronous events) can no longer be delivered from C2 to C1. This commit fixes this issue by waiting for C2 to indicate that it has finished using the free buffer list. Work done in collaboration with Jim Mussared aka @jimmo. Signed-off-by: Damien George <damien@micropython.org>
2021-04-12rp2: Add support for building different board configurations.jahr
This change allows to build firmware for different rp2-based boards, following how it is done in other ports like stm32 and esp32. So far only the original Pico and Adafruit Feather RP2040 are added. Board names should match (sans case) those in pico-sdk/src/boards/include/boards/. Usage: Pico firmware can be build either using make as previously (it is the default board) or by `make BOARD=PICO`. Feather is built by `make BOARD=ADAFRUIT_FEATHER_RP2040`. Only the board name and flash drive size is set, pin definition is taken from the appropriate pico-sdk board definition. Firmware is saved in the directory build-BOARD_NAME.
2021-04-12rp2/machine_uart: Add buffered transfer of data with rxbuf/txbuf kwargs.robert-hh
Instantiation and init now support the rxbuf and txbuf keywords for setting the buffer size. The default size is 256 bytes. The minimum and maximum sizes are 32 and 32766 respectively. uart.write() still includes checks for timeout, even if it is very unlikely to happen due to a) lack of flow control support and b) the minimal timeout values being longer than the time it needs to send a byte.
2021-04-11rp2/rp2_pio: Add StateMachine restart,rx_fifo,tx_fifo helper functions.robert-hh
StateMachine.restart: Restarts the state machine StateMachine.rx_fifo: Return the number of RX FIFO items, 0 if empty StateMachine.tx_fifo: Return the number of TX FIFO items, 0 if empty restart() seems to be the most useful one, as it resets the state machine to the initial state without the need to re-initialise/re-create. It also makes PIO code easier, because then stalling as an error state can be unlocked. rx_fifo() is also useful, for MP code to check for data and timeout if no data arrived. Complex logic is easier handled in Python code than in PIO code. tx_fifo() can be useful to check states where data is not processed, and is mostly for symmetry.
2021-04-09rp2/moduos: Implement uos.urandom().robert-hh
The implementation samples rosc.randombits at a frequency lower than the oscillator frequency. This gives better random values. In addition, for an 8-bit value 8 samples are taken and fed through a 8-bit CRC, distributing the sampling over the byte. The resulting sampling rate is about 120k/sec. The RNG does not include testing of error conditions, like the ROSC being in sync with the sampling or completely failing. Making the interim value static causes it to perform a little bit better in short sync or drop-out situations. The output of uos.urandom() performs well with the NIST800-22 test suite. In my trial it passed all tests of the sts 2.1.2 test suite. I also ran a test of the random data with the Common Criteria test suite AIS 31, and it passed all tests too.
2021-04-09rp2/rp2_pio: Validate state machine frequency in constructor.Damien George
Fixes issue #7025. Signed-off-by: Damien George <damien@micropython.org>
2021-04-09examples/embedding: Fix example so it compiles again.Santeri Paavolainen
There were a few changes that had broken this example, specifically 2cdf1d25f59409b6130c0e8b6cf50300aed2d7e6 removed file.c from ports/unix. And (at least for MacOS) mp_state_ctx must be placed in the BSS with -fno-common so it is visible to the linker. Signed-off-by: Santeri Paavolainen <santtu@iki.fi>
2021-04-09stm32/boards/NUCLEO_L476RG: Add 5 remaining UARTs.aziubin
STM32L476RG MCU of NUCLEO_L476RG board has 6 UART/USART units in total (USART1, USART2, USART3, UART4, UART5 and LPUART1), but only UART2, connected to REPL, was defined and available in Python code. Defined are all 5 remaining UART/USART units including LPUART1. Signed-off-by: Alexander Ziubin aziubin@googlemail.com
2021-04-09esp32: Enable btree module.Damien George
This was disabled with the move to CMake, and this commit reinstates it. Signed-off-by: Damien George <damien@micropython.org>
2021-04-09extmod/extmod.cmake: Add support to build btree module with CMake.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-04-09py/py.cmake: Introduce MICROPY_INC_CORE as a list with core includes.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-04-09py/py.cmake: Move qstr helper code to micropy_gather_target_properties.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-04-09stm32/boardctrl: Give boards control over execution of boot.py,main.py.Damien George
This commit simplifies the customisation of the main MicroPython execution loop (4 macros are reduced to 2), and allows a board to have full control over the execution (or not) of boot.py and main.py. For boards that use the default start-up code, there is no functional change in this commit. Signed-off-by: Damien George <damien@micropython.org>
2021-04-08stm32/mpconfigport.h: Add support for a board to specify root pointers.Damien George
A board can now define MICROPY_BOARD_ROOT_POINTERS to specify any custom root pointers. Signed-off-by: Damien George <damien@micropython.org>
2021-04-07stm32/boards/pllvalues.py: Relax PLLQ constraints on STM32F413 MCUs.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-04-07stm32/powerctrl: Support using PLLI2C on STM32F413 as USB clock source.Damien George
So SYSCLK can run at more varied frequencies, eg 100MHz. Signed-off-by: Damien George <damien@micropython.org>
2021-04-07stm32/powerctrl: Allow a board to configure AHB and APB clock dividers.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-04-07unix: Improve command line argument processing.stijn
Per CPython everything which comes after the command, module or file argument is not an option for the interpreter itself. Hence the processing of options should stop when encountering those, and the remainder be passed as sys.argv. Note the latter was already the case for a module or file but not for a command. This fixes issues like 'micropython myfile.py -h' showing the help and exiting instead of passing '-h' as sys.argv[1], likewise for '-X <something>' being treated as a special option no matter where it occurs on the command line.
2021-04-07rp2: Import uarray instead of array in rp2 module.Tim Radvan
Some forum users noticed that `sm.exec()` took longer the more was present on the flash filesystem connected to the RP2040. They traced this back to the `array` import inside `asm_pio()`, which is causing MicroPython to scan the filesystem. uarray is a built-in module, so importing it shouldn't require scanning the filesystem. We avoid moving the import to the top-level in order to keep the namespace clean; we don't want to accidentally expose `rp2.array`.
2021-04-06extmod/re1.5: Check and report byte overflow errors in _compilecode.Jeff Epler
The generated regex code is limited in the range of jumps and counts, and this commit checks all cases which can overflow given the right kind of input regex, and returns an error in such a case. This change assumes that the results that overflow an int8_t do not overflow a platform int. Closes: #7078 Signed-off-by: Jeff Epler <jepler@gmail.com>
2021-04-06tools/metrics.py: Fix esp32 output filename due to move to CMake.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-04-06stm32: Include .ARM section in firmware for C++ exception handling.Damien George
Support for C++ was added in 97960dc7deb7a0e691fca5944402cd03386b744b but that commit didn't include the C++ exception handling table in the binary firmware image. This commit fixes that. Signed-off-by: Damien George <damien@micropython.org>
2021-04-06rp2/CMakeLists.txt: Enable USB enumeration fix.Damien George
This is a workaround for errata RP2040-E5, and is needed to make USB more reliable on certain USB ports. Signed-off-by: Damien George <damien@micropython.org>
2021-04-02docs/develop: Improve user C modules to properly describe how to build.Damien George
Make and CMake builds are slightly different and these changes help make it clear what to do in each case. Signed-off-by: Damien George <damien@micropython.org>
2021-04-01examples/usercmodules: Simplify user C module enabling.Damien George
It's a bit of a pitfall with user C modules that including them in the build does not automatically enable them. This commit changes the docs and examples for user C modules to encourage writers of user C modules to enable them unconditionally. This makes things simpler and covers most use cases. See discussion in issue #6960, and also #7086. Signed-off-by: Damien George <damien@micropython.org>
2021-04-01esp32: Fix multiple definition errors with mp_hal_stdout_tx functions.Michael O'Cleirigh
It was noticed that the esp32 port didn't build ulab correctly. The problem was a multiple defintion of the 'mp_hal_stdout_tx_str' and 'mp_hal_stdout_tx_strn_cooked' functions. They were defined in stdout_helpers.c but also in the ports/esp32/mphalport.c. Fixed by removing stdout_helpers.c from the build. Signed-off-by: Michael O'Cleirigh <michael.ocleirigh@rivulet.ca>
2021-04-01tools/ci.sh: Build user C modules for esp32.Michael O'Cleirigh
Builds the esp32 port against the example C and CXX modules. Signed-off-by: Michael O'Cleirigh <michael.ocleirigh@rivulet.ca>
2021-04-01esp32: Restore USER_C_MODULE support with new CMake build system.Michael O'Cleirigh
Support for User C and C++ modules was lost due to upgrading the esp32 to the latest CMake based IDF from the GNUMakefile build process. Restore the support for the esp32 port by integrating with the approach recently added for the rp2 port. Signed-off-by: Michael O'Cleirigh <michael.ocleirigh@rivulet.ca>
2021-03-31rp2: Don't advertise remote wakeup for USB serial.Liam Fraser
This USB feature is currently not supported. With this flag enabled (and the feature not implemented) the USB serial will stop working if there is a delay of more than about 2 seconds between messages, which can occur with USB autosuspend enabled. Fixes issue #6866.
2021-03-31tools/ci.sh: Add CI for CMake USER_C_MODULE support.Phil Howard
Builds the rp2 port against the example C and CXX modules. Signed-off-by: Phil Howard <phil@pimoroni.com>
2021-03-31docs/develop/cmodules.rst: Document C-modules and micropython.cmake.Phil Howard
Documents the micropython.cmake file required to make user C modules compatible with the CMake build system. Signed-off-by: Phil Howard <phil@pimoroni.com>
2021-03-31examples/usercmodule: Add micropython.cmake to the C and CPP examples.Phil Howard
examples/usercmodule/micropython.cmake: Root micropython.cmake file is responsible for including modules. examples/usercmodule/cexample/micropython.cmake: examples/usercmodule/cppexample/micropython.cmake: Module micropython.cmake files define the target and link it to usermod. Signed-off-by: Phil Howard <phil@pimoroni.com>
2021-03-31rp2: Add support for USER_C_MODULES to CMake build system.Phil Howard
The parts that are generic are added to py/ so they can be used by other ports that use CMake. py/usermod.cmake: * Creates a usermod target to hang user C/CXX modules from. * Gathers sources from user C/CXX modules and libs for QSTR scan. ports/rp2/CMakeLists.txt: * Includes py/usermod.cmake. * Links the resulting usermod library to the MicroPython target. py/mkrules.cmake: Add cxxflags to qstr.i.last custom command for CXX modules: * MICROPY_CPP_FLAGS so CXX modules will find includes. * -DNO_QSTR to fix fatal error missing "genhdr/qstrdefs.generated.h". Usage: The rp2 port can be linked against user C modules by running: make USER_C_MODULES=/path/to/module/micropython.cmake CMake will print a list of included modules. Co-authored-by: Graham Sanderson <graham.sanderson@raspberrypi.org> Co-authored-by: Michael O'Cleirigh <michael.ocleirigh@rivulet.ca> Signed-off-by: Phil Howard <phil@pimoroni.com>
2021-03-31rp2/mpthreadport.h: Cast core_state to _mp_state_thread_t.Phil Howard
Required for user C++ code to build successfully against ports/rp2. Signed-off-by: Phil Howard <phil@pimoroni.com>
2021-03-26py: Rename remaining object types to be of the form mp_type_xxx.Damien George
For consistency with all other object types in the core. Signed-off-by: Damien George <damien@micropython.org>
2021-03-19bare-arm: Clean up the code, make it run on an F405, and add a README.Damien George
This commit simplifies and cleans up the bare-arm port, and adds just enough system and library code to make it execute on an STM32F405 MCU. The mpconfigport.h configuration is simplified to just specify those configuration values that are different from the defaults. And the addition of -fdata-sections and -ffunction-sections means the final firmware is smaller than it previously was, by about 4200 bytes. A README is also added. Signed-off-by: Damien George <damien@micropython.org>
2021-03-17py/vm: For tracing use mp_printf, and print state when thread enabled.Damien George
mp_printf should be used to print the prefix because it's also used in mp_bytecode_print2 (otherwise, depending on the system, different output streams may be used). Also print the current thread state when threading is enabled to easily see which thread executes what opcode. Signed-off-by: Damien George <damien@micropython.org>
2021-03-17stm32/Makefile: Allow QSTR_DEFS,QSTR_GLOBAL_DEPENDENCIES to be extended.Damien George
So a board can provide custom qstr definitions if needed. Signed-off-by: Damien George <damien@micropython.org>
2021-03-16tests/run-tests.py: Provide more info if script run via pyboard crashes.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-03-16tests/extmod/vfs_fat_fileio2.py: Close test file at end of test.Damien George
Otherwise it can lead to inconsistent results running subsequent tests. Signed-off-by: Damien George <damien@micropython.org>
2021-03-16extmod/modbluetooth: Free temp arrays in gatts register services.Damien George
This helps to reduce memory fragmentation, by freeing the heap data as soon as it is not needed. It also helps the compiler keeps a reference to the beginning of both arrays, which need to be traceable by the GC (otherwise some compilers may optimise this reference to something else). Signed-off-by: Damien George <damien@micropython.org>
2021-03-16stm32/Makefile: Fix C++ linker flags when toolchain has spaces in path.stijn
The GNU Make dir command uses spaces as item separator so it does not work for e.g building the STM32 port on Cygwin with a default Arm installation in "c:/program files (x86)/GNU Arm Embedded Toolchain". Fix by using POSIX dirname on a quoted path instead.
2021-03-15all: Add .git-blame-ignore-revs for fixing up git blame output.stijn
Add most formatting-only commits to this file so that when used with git blame, these commits are excluded and the output shows only the interesting bits.
2021-03-14rp2: Use core-provided cmake fragments instead of custom ones.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-03-14extmod/extmod.cmake: Add modonewire.c to MICROPY_SOURCE_EXTMOD list.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-03-14rp2/modmachine: Enable machine.Signal class.Damien George
Fixes issue #6863. Signed-off-by: Damien George <damien@micropython.org>
2021-03-14rp2: Enabled more core Python features.Damien George
This brings the port's configuration closer to the stm32 and esp32 ports. Signed-off-by: Damien George <damien@micropython.org>
2021-03-13rp2: Enable uerrno module.Kevin Köck
Fixes #6991.