Update to MicroPython 1.17

This commit is contained in:
iabdalkader 2021-12-10 02:08:54 +02:00
parent d85122e43e
commit 708f7fe1ac
14 changed files with 130 additions and 54 deletions

View File

@ -458,6 +458,7 @@
#ifdef HAL_UART_MODULE_ENABLED #ifdef HAL_UART_MODULE_ENABLED
#include "stm32h7xx_hal_uart.h" #include "stm32h7xx_hal_uart.h"
#include "stm32h7xx_ll_lpuart.h"
#endif /* HAL_UART_MODULE_ENABLED */ #endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED #ifdef HAL_USART_MODULE_ENABLED

@ -1 +1 @@
Subproject commit 2bbe0bcb7ed7103fdd808d1332aaeef10a44064e Subproject commit 7138a47a265cda2dd8b75ad96f489e51120b65f8

View File

@ -2,3 +2,4 @@ freeze ("$(MPY_LIB_DIR)/", "hts221.py")
freeze ("$(MPY_LIB_DIR)/", "lps22h.py") freeze ("$(MPY_LIB_DIR)/", "lps22h.py")
freeze ("$(MPY_LIB_DIR)/", "lsm9ds1.py") freeze ("$(MPY_LIB_DIR)/", "lsm9ds1.py")
freeze ("$(MPY_LIB_DIR)/apds9960/", "apds9960") freeze ("$(MPY_LIB_DIR)/apds9960/", "apds9960")
freeze("$(PORT_DIR)/modules/scripts", "_mkfs.py")

View File

@ -76,23 +76,27 @@
#define OMV_CORE_VBAT "3.3" #define OMV_CORE_VBAT "3.3"
// USB IRQn. // USB IRQn.
#define OMV_USB_IRQN (USBD_IRQn) #define OMV_USB_IRQN (USBD_IRQn)
// Linker script constants (see the linker script template port/x.ld.S). // Linker script constants (see the linker script template port/x.ld.S).
#define OMV_FB_MEMORY SRAM // Framebuffer, fb_alloc #define OMV_FB_MEMORY SRAM // Framebuffer, fb_alloc
#define OMV_MAIN_MEMORY SRAM // data, bss and heap memory #define OMV_MAIN_MEMORY SRAM // data, bss and heap memory
#define OMV_STACK_MEMORY SRAM // stack memory #define OMV_STACK_MEMORY SRAM // stack memory
#define OMV_FB_SIZE (128K) // FB memory: header + QVGA/GS image #define OMV_FB_SIZE (128K) // FB memory: header + QVGA/GS image
#define OMV_FB_ALLOC_SIZE (16K) // minimum fb alloc size #define OMV_FB_ALLOC_SIZE (16K) // minimum fb alloc size
#define OMV_STACK_SIZE (8K) #define OMV_STACK_SIZE (8K)
#define OMV_HEAP_SIZE (64K) #define OMV_HEAP_SIZE (64K)
#define OMV_JPEG_BUF_SIZE (16 * 1024) // IDE JPEG buffer (header + data). #define OMV_JPEG_BUF_SIZE (16 * 1024) // IDE JPEG buffer (header + data).
#define OMV_TEXT_ORIGIN 0x00026000 #define OMV_TEXT_ORIGIN 0x00026000
#define OMV_TEXT_LENGTH 744K // Arduino bootloader starts at (0xE0000) - SD_SIZE (152K) #define OMV_FFS_LENGTH 64K
#define OMV_SRAM_ORIGIN 0x20004000 // Reserve 16K for SD memory. #define OMV_TEXT_LENGTH 680K // 0x00000 -> 0x26000 Soft device (152K)
#define OMV_SRAM_LENGTH 240K // RAM_SIZE - SD_RAM_SIZE // 0x26000 -> 0xD0000 OpenMV firmware (680K).
// 0xD0000 -> 0xE0000 Flash filesystem (64K).
// 0xE0000 -> 0x100000 Arduino bootloader
#define OMV_SRAM_ORIGIN 0x20004000 // Reserve 16K for SD memory.
#define OMV_SRAM_LENGTH 240K // RAM_SIZE - SD_RAM_SIZE
// FIR I2C // FIR I2C
#define FIR_I2C_ID (0) #define FIR_I2C_ID (0)

View File

@ -60,7 +60,7 @@
#define IMLIB_ENABLE_LAPLACIAN #define IMLIB_ENABLE_LAPLACIAN
// Enable bilateral() // Enable bilateral()
#define IMLIB_ENABLE_BILATERAL //#define IMLIB_ENABLE_BILATERAL
// Enable cartoon() // Enable cartoon()
// #define IMLIB_ENABLE_CARTOON // #define IMLIB_ENABLE_CARTOON

View File

@ -38,8 +38,8 @@
#include "py/stackctrl.h" #include "py/stackctrl.h"
#include "py/gc.h" #include "py/gc.h"
#include "py/compile.h" #include "py/compile.h"
#include "lib/utils/pyexec.h" #include "shared/runtime/pyexec.h"
#include "readline.h" #include "shared/readline/readline.h"
#include "gccollect.h" #include "gccollect.h"
#include "modmachine.h" #include "modmachine.h"
#include "modmusic.h" #include "modmusic.h"
@ -77,6 +77,13 @@
#include "usb_cdc.h" #include "usb_cdc.h"
#endif #endif
#if MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
#include "extmod/vfs_fat.h"
#include "lib/oofatfs/ff.h"
#include "extmod/vfs.h"
#include "modules/nrf/flashbdev.h"
#endif
#include "usbdbg.h" #include "usbdbg.h"
#include "py_audio.h" #include "py_audio.h"
#include "framebuffer.h" #include "framebuffer.h"
@ -93,6 +100,28 @@ uint32_t HAL_GetHalVersion()
extern uint32_t _heap_start; extern uint32_t _heap_start;
extern uint32_t _heap_end; extern uint32_t _heap_end;
#if MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
STATIC int vfs_mount_and_chdir(mp_obj_t bdev, mp_obj_t mount_point) {
nlr_buf_t nlr;
mp_int_t ret = -MP_EIO;
if (nlr_push(&nlr) == 0) {
mp_obj_t args[] = { bdev, mount_point };
mp_vfs_mount(2, args, (mp_map_t *)&mp_const_empty_map);
mp_vfs_chdir(mount_point);
ret = 0; // success
nlr_pop();
} else {
mp_obj_base_t *exc = nlr.ret_val;
if (mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(exc->type), MP_OBJ_FROM_PTR(&mp_type_OSError))) {
mp_obj_t v = mp_obj_exception_get_value(MP_OBJ_FROM_PTR(exc));
mp_obj_get_int_maybe(v, &ret); // get errno value
ret = -ret;
}
}
return ret;
}
#endif
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
soft_reset: soft_reset:
@ -125,6 +154,7 @@ soft_reset:
readline_init0(); readline_init0();
#if MICROPY_PY_MACHINE_HW_SPI #if MICROPY_PY_MACHINE_HW_SPI
spi_init0(); spi_init0();
#endif #endif
@ -166,13 +196,30 @@ soft_reset:
MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_NEW_SMALL_INT(0),
MP_OBJ_NEW_SMALL_INT(115200), MP_OBJ_NEW_SMALL_INT(115200),
}; };
MP_STATE_PORT(board_stdio_uart) = MP_STATE_PORT(board_stdio_uart) = machine_hard_uart_type.make_new(
machine_hard_uart_type.make_new((mp_obj_t)&machine_hard_uart_type, MP_ARRAY_SIZE(args), 0, args); (mp_obj_t)&machine_hard_uart_type, MP_ARRAY_SIZE(args), 0, args);
} }
#endif #endif
pin_init0(); pin_init0();
#if MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
flashbdev_init();
// Try to mount the flash on "/flash" and chdir to it for the boot-up directory.
mp_obj_t mount_point = MP_OBJ_NEW_QSTR(MP_QSTR__slash_flash);
int ret = vfs_mount_and_chdir((mp_obj_t)&nrf_flash_obj, mount_point);
if ((ret == -MP_ENODEV) || (ret == -MP_EIO)) {
pyexec_frozen_module("_mkfs.py"); // Frozen script for formatting flash filesystem.
ret = vfs_mount_and_chdir((mp_obj_t)&nrf_flash_obj, mount_point);
}
if (ret != 0) {
printf("MPY: can't mount flash\n");
}
#endif
#if MICROPY_MBFS #if MICROPY_MBFS
microbit_filesystem_init(); microbit_filesystem_init();
#endif #endif
@ -320,10 +367,10 @@ mp_import_stat_t mp_import_stat(const char *path) {
return uos_mbfs_import_stat(path); return uos_mbfs_import_stat(path);
} }
STATIC mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args) { mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) {
return uos_mbfs_open(n_args, args); return uos_mbfs_open(n_args, args);
} }
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_open_obj, 1, 2, mp_builtin_open); MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open);
#else #else
// use dummy functions - no filesystem available // use dummy functions - no filesystem available
@ -335,7 +382,7 @@ mp_import_stat_t mp_import_stat(const char *path) {
return MP_IMPORT_STAT_NO_EXIST; return MP_IMPORT_STAT_NO_EXIST;
} }
STATIC mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) { mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) {
mp_raise_OSError(MP_EPERM); mp_raise_OSError(MP_EPERM);
} }
MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open);

View File

@ -24,7 +24,7 @@ MEMORY
_heap_size = OMV_HEAP_SIZE; /* required amount of heap */ _heap_size = OMV_HEAP_SIZE; /* required amount of heap */
_stack_size = OMV_STACK_SIZE; /* minimum amount of stack */ _stack_size = OMV_STACK_SIZE; /* minimum amount of stack */
_fs_start = OMV_TEXT_ORIGIN + OMV_TEXT_LENGTH; _fs_start = OMV_TEXT_ORIGIN + OMV_TEXT_LENGTH;
_fs_end = OMV_TEXT_ORIGIN + OMV_TEXT_LENGTH + 64K; _fs_end = OMV_TEXT_ORIGIN + OMV_TEXT_LENGTH + OMV_FFS_LENGTH;
/* define output sections */ /* define output sections */
SECTIONS SECTIONS
@ -40,6 +40,7 @@ SECTIONS
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
. = ALIGN(4); . = ALIGN(4);
_etext = .; /* define a global symbol at end of code */ _etext = .; /* define a global symbol at end of code */
_unused_flash_start = .;
} >FLASH_TEXT } >FLASH_TEXT
/* used by the startup to initialize data */ /* used by the startup to initialize data */
@ -118,3 +119,5 @@ SECTIONS
.ARM.attributes 0 : { *(.ARM.attributes) } .ARM.attributes 0 : { *(.ARM.attributes) }
} }
_unused_flash_len = (ORIGIN(FLASH_TEXT) + LENGTH(FLASH_TEXT)) - _unused_flash_start;

View File

@ -178,6 +178,7 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/imlib/, \
FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/*.o) FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/*.o)
FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/modules/*.o) FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/modules/*.o)
FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/modules/nrf/*.o)
FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/ports/$(PORT)/modules/*.o) FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/ports/$(PORT)/modules/*.o)
#------------- MicroPy Objects -------------------# #------------- MicroPy Objects -------------------#
@ -209,16 +210,18 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/,\
modutimeq.o \ modutimeq.o \
machine_i2c.o \ machine_i2c.o \
utime_mphal.o \ utime_mphal.o \
vfs.o \
vfs_fat.o \
vfs_lfs.o \
vfs_fat_file.o \
vfs_fat_diskio.o \
vfs_reader.o \
vfs_blockdev.o \
machine_mem.o \
) )
FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\
utils/pyexec.o \ littlefs/*.o \
utils/printf.o \
utils/sys_stdio_mphal.o \
utils/interrupt_char.o \
libc/string0.o \
timeutils/timeutils.o \
mp-readline/readline.o \
tinyusb/src/common/tusb_fifo.o \ tinyusb/src/common/tusb_fifo.o \
tinyusb/src/device/usbd.o \ tinyusb/src/device/usbd.o \
tinyusb/src/device/usbd_control.o \ tinyusb/src/device/usbd_control.o \
@ -227,6 +230,16 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\
tinyusb/src/portable/nordic/nrf5x/dcd_nrf5x.o \ tinyusb/src/portable/nordic/nrf5x/dcd_nrf5x.o \
) )
FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/shared/,\
libc/printf.o \
libc/string0.o \
runtime/pyexec.o \
runtime/interrupt_char.o \
runtime/sys_stdio_mphal.o \
timeutils/timeutils.o \
readline/readline.o \
)
FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\
math.o \ math.o \
fmodf.o \ fmodf.o \

View File

@ -32,9 +32,9 @@
#include "py/mperrno.h" #include "py/mperrno.h"
#include "py/mphal.h" #include "py/mphal.h"
#include "py/stackctrl.h" #include "py/stackctrl.h"
#include "lib/mp-readline/readline.h" #include "shared/readline/readline.h"
#include "lib/utils/gchelper.h" #include "shared/runtime/gchelper.h"
#include "lib/utils/pyexec.h" #include "shared/runtime/pyexec.h"
#include "tusb.h" #include "tusb.h"
#include "uart.h" #include "uart.h"
#include "modmachine.h" #include "modmachine.h"

View File

@ -22,7 +22,7 @@
#include "py/runtime.h" #include "py/runtime.h"
#include "mperrno.h" #include "mperrno.h"
#include "lib/netutils/netutils.h" #include "shared/netutils/netutils.h"
#include "modnetwork.h" #include "modnetwork.h"
#include "nina.h" #include "nina.h"

View File

@ -27,7 +27,6 @@
#include "gc.h" #include "gc.h"
#include "stackctrl.h" #include "stackctrl.h"
#include "gccollect.h" #include "gccollect.h"
#include "readline.h"
#include "timer.h" #include "timer.h"
#include "pin.h" #include "pin.h"
#include "usb.h" #include "usb.h"
@ -40,7 +39,8 @@
#include "extmod/vfs.h" #include "extmod/vfs.h"
#include "extmod/vfs_fat.h" #include "extmod/vfs_fat.h"
#include "lib/utils/pyexec.h" #include "shared/runtime/pyexec.h"
#include "shared/readline/readline.h"
#include "irq.h" #include "irq.h"
#include "rng.h" #include "rng.h"
@ -88,6 +88,7 @@
#if MICROPY_PY_BLUETOOTH #if MICROPY_PY_BLUETOOTH
#include "extmod/modbluetooth.h" #include "extmod/modbluetooth.h"
#include "mpbthciport.h"
#endif #endif
int errno; int errno;
@ -234,7 +235,8 @@ void NORETURN __fatal_error(const char *msg) {
storage_flush(); storage_flush();
// Initialize the USB device if it's not already initialize to allow // Initialize the USB device if it's not already initialize to allow
// the host to mount the filesystem and access the error log. // the host to mount the filesystem and access the error log.
pyb_usb_dev_init(pyb_usb_dev_detect(), USBD_VID, USBD_PID_CDC_MSC, USBD_MODE_CDC_MSC, 0, NULL, NULL); pyb_usb_dev_init(pyb_usb_dev_detect(), MICROPY_HW_USB_VID,
MICROPY_HW_USB_PID_CDC_MSC, USBD_MODE_CDC_MSC, 0, NULL, NULL);
} }
} }
for (uint i = 0;;) { for (uint i = 0;;) {
@ -555,8 +557,7 @@ soft_reset:
systick_enable_dispatch(SYSTICK_DISPATCH_LWIP, mod_network_lwip_poll_wrapper); systick_enable_dispatch(SYSTICK_DISPATCH_LWIP, mod_network_lwip_poll_wrapper);
#endif #endif
#if MICROPY_PY_BLUETOOTH #if MICROPY_PY_BLUETOOTH
extern void mp_bluetooth_hci_systick(uint32_t ticks_ms); mp_bluetooth_hci_init();
systick_enable_dispatch(SYSTICK_DISPATCH_BLUETOOTH_HCI, mp_bluetooth_hci_systick);
#endif #endif
#if MICROPY_PY_NETWORK_CYW43 #if MICROPY_PY_NETWORK_CYW43
@ -686,7 +687,8 @@ soft_reset:
// Init USB device to default setting if it was not already configured // Init USB device to default setting if it was not already configured
if (!(pyb_usb_flags & PYB_USB_FLAG_USB_MODE_CALLED)) { if (!(pyb_usb_flags & PYB_USB_FLAG_USB_MODE_CALLED)) {
pyb_usb_dev_init(pyb_usb_dev_detect(), USBD_VID, USBD_PID_CDC_MSC, USBD_MODE_CDC_MSC, 0, NULL, NULL); pyb_usb_dev_init(pyb_usb_dev_detect(), MICROPY_HW_USB_VID,
MICROPY_HW_USB_PID_CDC_MSC, USBD_MODE_CDC_MSC, 0, NULL, NULL);
} }
// report if SDRAM failed // report if SDRAM failed

View File

@ -87,8 +87,8 @@ static void fir_lepton_spi_resync()
flir_lepton_spi_rx_timer.mode = SOFT_TIMER_MODE_ONE_SHOT; flir_lepton_spi_rx_timer.mode = SOFT_TIMER_MODE_ONE_SHOT;
flir_lepton_spi_rx_timer.expiry_ms = VOSPI_SYNC_MS + mp_hal_ticks_ms(); flir_lepton_spi_rx_timer.expiry_ms = VOSPI_SYNC_MS + mp_hal_ticks_ms();
flir_lepton_spi_rx_timer.delta_ms = VOSPI_SYNC_MS; flir_lepton_spi_rx_timer.delta_ms = VOSPI_SYNC_MS;
flir_lepton_spi_rx_timer.callback = (mp_obj_t) &fir_lepton_spi_resync_callback_obj; flir_lepton_spi_rx_timer.py_callback = (mp_obj_t) &fir_lepton_spi_resync_callback_obj;
soft_timer_insert(&flir_lepton_spi_rx_timer); soft_timer_insert(&flir_lepton_spi_rx_timer, VOSPI_SYNC_MS);
} }
#if defined(OMV_FIR_LEPTON_CHECK_CRC) #if defined(OMV_FIR_LEPTON_CHECK_CRC)

View File

@ -18,7 +18,7 @@
#include "py/objlist.h" #include "py/objlist.h"
#include "py/stream.h" #include "py/stream.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "lib/netutils/netutils.h" #include "shared/netutils/netutils.h"
#include "modnetwork.h" #include "modnetwork.h"
#include "pin.h" #include "pin.h"
#include "genhdr/pins.h" #include "genhdr/pins.h"

View File

@ -20,7 +20,6 @@ MPY_CFLAGS += -I$(MP_BOARD_CONFIG_DIR)
MPY_CFLAGS += -I$(BUILD)/$(MICROPY_DIR)/ MPY_CFLAGS += -I$(BUILD)/$(MICROPY_DIR)/
MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/
MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/py/ MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/py/
MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/mp-readline
MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/oofatfs MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/oofatfs
MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/lwip/src/include/ MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/lwip/src/include/
MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/ MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/
@ -281,6 +280,7 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\
machine_uart.o \ machine_uart.o \
machine_adc.o \ machine_adc.o \
machine_timer.o \ machine_timer.o \
machine_bitstream.o \
pybthread.o \ pybthread.o \
mpthreadport.o \ mpthreadport.o \
posix_helpers.o \ posix_helpers.o \
@ -290,21 +290,25 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\
) )
#------------- MicroPy Objects ----------------# #------------- MicroPy Objects ----------------#
FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/shared/,\
utils/mpirq.o \ libc/printf.o \
utils/pyexec.o \
utils/printf.o \
utils/interrupt_char.o \
utils/sys_stdio_mphal.o \
utils/gchelper_m3.o \
utils/gchelper_native.o \
libc/string0.o \ libc/string0.o \
libc/abort_.o \
runtime/mpirq.o \
runtime/pyexec.o \
runtime/interrupt_char.o \
runtime/sys_stdio_mphal.o \
runtime/gchelper_m3.o \
runtime/gchelper_native.o \
runtime/stdout_helpers.o \
netutils/*.o \ netutils/*.o \
timeutils/timeutils.o \ timeutils/timeutils.o \
readline/readline.o \
)
FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\
berkeley-db-1.xx/btree/*.o \ berkeley-db-1.xx/btree/*.o \
berkeley-db-1.xx/mpool/*.o \ berkeley-db-1.xx/mpool/*.o \
embed/abort_.o \
mp-readline/readline.o \
) )
FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\
@ -374,6 +378,7 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/,\
machine_pulse.o \ machine_pulse.o \
machine_signal.o \ machine_signal.o \
machine_pinbase.o \ machine_pinbase.o \
machine_bitstream.o \
utime_mphal.o \ utime_mphal.o \
modonewire.o \ modonewire.o \
uos_dupterm.o \ uos_dupterm.o \