Add new API for specifying the idle level and TX carrier output level, and
new write_pulses modes of operation. Also fix wait_done documentation
which was inverted and wrong about timing.
This change allows specification of the idle level and TX carrier output
level (through changed initialisation API), and more flexible specification
of pulses for write_pulses.
This is a breaking change for the esp32.RMT constructor API. Previous code
of this form:
esp32.RMT(..., carrier_duty_percent=D, carrier_freq=F)
will now raise an exception and should be changed to:
esp32.RMT(..., tx_carrier=(F, D, 1))
The firmware for Teensy 4.0, Teensy 4.1 and MIMXRT1020_EVK are created.
Users of other MIMXRT10xx_EVK boards should be able to build the firmware
themselves, they might need specific DEBUG settings.
The Makefile had to be changed in order to build the .bin file as well.
This adds a call to mp_deinit() in the main function of the STM32 port.
This enables the use of MICROPY_PORT_DEINIT_FUNC on that port, as well as
cleaning up the GIL if threading is enabled.
Previous behaviour was: if boot.py had an exception then main.py would
still run, which is arguably unexpected behaviour.
This commit changes the behaviour so main.py is not run if boot.py has an
error.
Signed-off-by: Damien George <damien@micropython.org>
Currently when using uasyncio.start_server() the socket configuration is
done inside a uasyncio.create_task() background function. If the address
and port are already in use however this throws an OSError which cannot be
cleanly caught behind the create_task().
This commit moves the getaddrinfo and socket binding to the start_server()
function, and only creates the task if that succeeds. This means that any
OSError from the initial socket configuration is propagated directly up the
call stack, compatible with CPython behaviour.
See #7444.
Signed-off-by: Damien George <damien@micropython.org>
This avoids the irritation of the PJRC HalfKay loader on Teensy 4.0. Block
0 and 1 are properly erased and the additional formatting in the make
script is not required anymore.
This class supports SPI bus controller mode, with blocking transfers.
SPI device numbers start at 0, to comply with the pinout of the Teensy
boards. With the configured clock frequency the fastest baud rate is
33MHz. For messages longer 16 bytes DMA is used. The class uses the
existing framework with extmod/machine_spi.c.
Extended driver options:
- drive=n with n being between 1 and 6 or PIN.POWER_1 to PIN.POWER_6.
Since the pins used by the SPI are fixed, no Pin settings can be made.
Thus the drive option is added allowing to control ringing and crosstalk
on the connection.
- gap_ns=nnnnn is the time between sent data items in a frame given in ns.
Default is 2 clock cycles.
Coverage calculated by Codecov has the same reliability/deterministic
issues as Coveralls did, so the problem is likely to do with the output of
lcov/gcov, rather than the analysis and display of the data.
Switch from lcov to gcov for data generation to try and simplify this
process of computing coverage.
Signed-off-by: Damien George <damien@micropython.org>
As discussed in #7455, Coveralls doesn't work properly anymore, it has
many spurious errors with reduced coverage.
Signed-off-by: Damien George <damien@micropython.org>
When looping, now disable the TX interrupt after calling rmt_write_items()
function to handle change in IDF behaviour (since v4.1). Also check length
of pulses to ensure it fits hardware limit.
Fixes issue #7403.
The GC now works correctly using asyncify and the functions
emscripten_scan_stack() and emscripten_scan_registers(). Stack/call depth
is monitored via the use of the pystack option.
Fixes issue #6738.
Signed-off-by: Damien George <damien@micropython.org>
Only include .c and .cpp files explicitly in the list of files passed to
the preprocessor for QSTR extraction. All relevant .h files will be
included in this process by "#include" from the .c(pp) files. In
particular for moduledefs.h, this is included by py/objmodule.c (and
doesn't actually contain any extractable MP_QSTR_xxx, but rather defines
macros with MP_QSTR_xxx's in them which are then part of py/objmodule.c).
The main reason for this change is to simplify the preprocessing step on
the javascript port, which tries to compile .h files as C++ precompiled
headers if they are passed with -E to clang.
Signed-off-by: Damien George <damien@micropython.org>
`mpy-cross` can be compiled to WASM using Emscripten, but it is not happy
unless the stack check is disabled.
Signed-off-by: David Lechner <david@pybricks.com>
Calculating the weekday each time you want to set a date is error prone and
tiresome. MicroPython can do it on its own - hardware on some ports do not
support storing weekday in hardware and always computes it on the fly,
ignoring the value given to the constructor.
During discussion for #7432 the conclusion was that there seems to be no
obvious reason to let user set the weekday to an incorrect value so it
makes sense to just ignore the provided weekday value and always compute
the correct value. This patch introduces this change for the rp2 port.
Signed-off-by: Krzysztof Adamski <k@japko.eu>
The RTC in rp2 can store any, even wrong, number as a weekday in RTC. It
was, however, discussed in #7394 that we would like to unify all ports and
use 0 as Monday, not Sunday in the machine.RTC implementation.
This patch makes sure that the default date set in RTC is adheres to this
convention. It also fixes the example in quickref to use proper weekday to
avoid confusion.
Signed-off-by: Krzysztof Adamski <k@japko.eu>
Add an optional 'lock' kwarg to callback that locks GC and scheduler. This
allows the callback to be invoked asynchronously in 'interrupt context',
for example as a signal handler.
Also add the 'cfun' member function to callback, that allows retrieving the
C callback function address. This is needed when the callback should be
set to a struct field.
See related #7373.
Signed-off-by: Amir Gonnen <amirgonnen@gmail.com>
Fixes the following (the line numbers match commit 0e87459e2b):
../../extmod/crypto-algorithms/sha256.c:49:19: runtime error: left shif...
../../extmod/moduasyncio.c:106:35: runtime error: member access within ...
../../py/binary.c:210:13: runtime error: left shift of negative value -...
../../py/mpz.c:744:16: runtime error: negation of -9223372036854775808 ...
../../py/objint.c:109:22: runtime error: left shift of 1 by 31 places c...
../../py/objint_mpz.c:374:9: runtime error: left shift of 4611686018427...
../../py/objint_mpz.c:374:9: runtime error: left shift of negative valu...
../../py/parsenum.c:106:14: runtime error: left shift of 46116860184273...
../../py/runtime.c:395:33: runtime error: left shift of negative value ...
../../py/showbc.c:177:28: runtime error: left shift of negative value -...
../../py/vm.c:321:36: runtime error: left shift of negative value -1```
Testing was done on an amd64 Debian Buster system using gcc-8.3 and these
settings:
CFLAGS += -g3 -Og -fsanitize=undefined
LDFLAGS += -fsanitize=undefined
The introduced TASK_PAIRHEAP macro's conditional (x ? &x->i : NULL)
assembles (under amd64 gcc 8.3 -Os) to the same as &x->i, since i is the
initial field of the struct. However, for the purposes of undefined
behavior analysis the conditional is needed.
Signed-off-by: Jeff Epler <jepler@gmail.com>
It reschedules the BT HCI poll soft timer so that it is called exactly when
the next timer expires.
Signed-off-by: Damien George <damien@micropython.org>
Instead of using systick the BT subsystem is now scheduled using a soft
timer. This means it is scheduled only when it is enabled.
Signed-off-by: Damien George <damien@micropython.org>
And call mp_pairheap_init_node() in soft_timer_static_init() so that
reinsert can be called after static_init.
Signed-off-by: Damien George <damien@micropython.org>
This is to provide a summary of the licenses used by MicroPython.
- Add SPDX identifier for every directory that includes
non-MIT-licensed content.
- Add brief summary.
- Update docs license to be more explicit.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Dynamically generate/loaded native code (eg from @micropython.native or
native .mpy files) needs to be able allocate from IRAM, and the memory
protection feature must be disabled for that to work. Disabling it is
needed to get native code working on ESP32-S2 and -C3.
Signed-off-by: Damien George <damien@micropython.org>
This introduces a new macro to get the main thread and uses it to ensure
that asynchronous exceptions such as KeyboardInterrupt (CTRL+C) are only
scheduled on the main thread. This is more deterministic than being
scheduled on a random thread and is more in line with CPython that only
allow signal handlers to run on the main thread.
Fixes issue #7026.
Signed-off-by: David Lechner <david@pybricks.com>
This moves mp_pending_exception from mp_state_vm_t to mp_state_thread_t.
This allows exceptions to be scheduled on a specific thread.
Signed-off-by: David Lechner <david@pybricks.com>