From 30a63a204dc6ad02c996d5c40c34b67c85c650e4 Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 23 Nov 2023 16:36:52 +1100 Subject: [PATCH] extmod/modmachine: Provide common Python bindings for machine.idle(). And use it in all ports. The ports are unchanged, except esp8266 which now just returns None from this function instead of the time elapsed (to match other ports), and qemu-arm which gains this function. Signed-off-by: Damien George --- extmod/modmachine.c | 13 +++++++++++++ ports/cc3200/mods/modmachine.c | 5 +---- ports/esp32/modmachine.c | 5 +---- ports/esp8266/modmachine.c | 7 +------ ports/mimxrt/modmachine.c | 5 +---- ports/nrf/modules/machine/modmachine.c | 5 +---- ports/qemu-arm/modmachine.c | 4 ++++ ports/renesas-ra/modmachine.c | 5 +---- ports/renesas-ra/modmachine.h | 1 - ports/rp2/modmachine.c | 5 +---- ports/samd/modmachine.c | 5 +---- ports/stm32/modmachine.c | 5 +---- ports/stm32/modmachine.h | 1 - ports/stm32/modpyb.c | 8 +++++++- ports/unix/modmachine.c | 17 +++++------------ ports/zephyr/modmachine.c | 5 +---- 16 files changed, 39 insertions(+), 57 deletions(-) diff --git a/extmod/modmachine.c b/extmod/modmachine.c index e0bef3a73f..311d5dc037 100644 --- a/extmod/modmachine.c +++ b/extmod/modmachine.c @@ -35,6 +35,10 @@ #include "drivers/dht/dht.h" #endif +// The port must provide implementations of these low-level machine functions. + +STATIC void mp_machine_idle(void); + // The port can provide additional machine-module implementation in this file. #ifdef MICROPY_PY_MACHINE_INCLUDEFILE #include MICROPY_PY_MACHINE_INCLUDEFILE @@ -46,6 +50,12 @@ STATIC mp_obj_t machine_soft_reset(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_soft_reset_obj, machine_soft_reset); +STATIC mp_obj_t machine_idle(void) { + mp_machine_idle(); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); + STATIC const mp_rom_map_elem_t machine_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_machine) }, @@ -57,6 +67,9 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = { // Reset related functions. { MP_ROM_QSTR(MP_QSTR_soft_reset), MP_ROM_PTR(&machine_soft_reset_obj) }, + // Power related functions. + { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, + // Functions for bit protocols. #if MICROPY_PY_MACHINE_BITSTREAM { MP_ROM_QSTR(MP_QSTR_bitstream), MP_ROM_PTR(&machine_bitstream_obj) }, diff --git a/ports/cc3200/mods/modmachine.c b/ports/cc3200/mods/modmachine.c index 8673c62865..1df11c9d28 100644 --- a/ports/cc3200/mods/modmachine.c +++ b/ports/cc3200/mods/modmachine.c @@ -62,7 +62,6 @@ { MP_ROM_QSTR(MP_QSTR_unique_id), MP_ROM_PTR(&machine_unique_id_obj) }, \ { MP_ROM_QSTR(MP_QSTR_main), MP_ROM_PTR(&machine_main_obj) }, \ { MP_ROM_QSTR(MP_QSTR_rng), MP_ROM_PTR(&machine_rng_get_obj) }, \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ @@ -168,11 +167,9 @@ STATIC mp_obj_t machine_main(mp_obj_t main) { } MP_DEFINE_CONST_FUN_OBJ_1(machine_main_obj, machine_main); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { __WFI(); - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_lightsleep(void) { pyb_sleep_sleep(); diff --git a/ports/esp32/modmachine.c b/ports/esp32/modmachine.c index a1bd9a5cb9..1946d43db6 100644 --- a/ports/esp32/modmachine.c +++ b/ports/esp32/modmachine.c @@ -58,7 +58,6 @@ { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_bootloader), MP_ROM_PTR(&machine_bootloader_obj) }, \ \ { MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) }, \ @@ -283,13 +282,11 @@ STATIC mp_obj_t machine_unique_id(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_unique_id_obj, machine_unique_id); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { MP_THREAD_GIL_EXIT(); taskYIELD(); MP_THREAD_GIL_ENTER(); - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_disable_irq(void) { uint32_t state = MICROPY_BEGIN_ATOMIC_SECTION(); diff --git a/ports/esp8266/modmachine.c b/ports/esp8266/modmachine.c index b15515acd7..cce6b01ce7 100644 --- a/ports/esp8266/modmachine.c +++ b/ports/esp8266/modmachine.c @@ -45,7 +45,6 @@ { MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&machine_reset_obj) }, \ { MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) }, \ { MP_ROM_QSTR(MP_QSTR_unique_id), MP_ROM_PTR(&machine_unique_id_obj) }, \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ @@ -102,14 +101,10 @@ STATIC mp_obj_t machine_unique_id(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_unique_id_obj, machine_unique_id); -STATIC mp_obj_t machine_idle(void) { - uint32_t t = mp_hal_ticks_cpu(); +STATIC void mp_machine_idle(void) { asm ("waiti 0"); - t = mp_hal_ticks_cpu() - t; ets_event_poll(); // handle any events after possibly a long wait (eg feed WDT) - return MP_OBJ_NEW_SMALL_INT(t); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_lightsleep(size_t n_args, const mp_obj_t *args) { uint32_t max_us = 0xffffffff; diff --git a/ports/mimxrt/modmachine.c b/ports/mimxrt/modmachine.c index ecd79d2230..b0c41fe1af 100644 --- a/ports/mimxrt/modmachine.c +++ b/ports/mimxrt/modmachine.c @@ -67,7 +67,6 @@ { MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&machine_rtc_type) }, \ MICROPY_PY_MACHINE_SDCARD_ENTRY \ \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ \ { MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) }, \ @@ -127,11 +126,9 @@ STATIC mp_obj_t machine_freq(void) { } MP_DEFINE_CONST_FUN_OBJ_0(machine_freq_obj, machine_freq); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { MICROPY_EVENT_POLL_HOOK; - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_deepsleep(size_t n_args, const mp_obj_t *args) { if (n_args != 0) { diff --git a/ports/nrf/modules/machine/modmachine.c b/ports/nrf/modules/machine/modmachine.c index b5d078ae51..3e3f185f6c 100644 --- a/ports/nrf/modules/machine/modmachine.c +++ b/ports/nrf/modules/machine/modmachine.c @@ -89,7 +89,6 @@ { MP_ROM_QSTR(MP_QSTR_bootloader), MP_ROM_PTR(&machine_bootloader_obj) }, \ { MP_ROM_QSTR(MP_QSTR_enable_irq), MP_ROM_PTR(&machine_enable_irq_obj) }, \ { MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) }, \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ @@ -196,11 +195,9 @@ NORETURN mp_obj_t machine_bootloader(size_t n_args, const mp_obj_t *args) { } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_bootloader_obj, 0, 1, machine_bootloader); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { MICROPY_EVENT_POLL_HOOK; - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_lightsleep(void) { __WFE(); diff --git a/ports/qemu-arm/modmachine.c b/ports/qemu-arm/modmachine.c index 1134ab4103..59694f92fc 100644 --- a/ports/qemu-arm/modmachine.c +++ b/ports/qemu-arm/modmachine.c @@ -32,3 +32,7 @@ // This variable is needed for machine.soft_reset(), but the variable is otherwise unused. int pyexec_system_exit = 0; + +STATIC void mp_machine_idle(void) { + // Do nothing. +} diff --git a/ports/renesas-ra/modmachine.c b/ports/renesas-ra/modmachine.c index 4617f0af0c..e0b34666fe 100644 --- a/ports/renesas-ra/modmachine.c +++ b/ports/renesas-ra/modmachine.c @@ -67,7 +67,6 @@ { MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&machine_reset_obj) }, \ { MP_ROM_QSTR(MP_QSTR_bootloader), MP_ROM_PTR(&machine_bootloader_obj) }, \ { MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&machine_freq_obj) }, \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ @@ -236,11 +235,9 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_freq_obj, 0, 4, machine_freq); // idle() // This executies a wfi machine instruction which reduces power consumption // of the MCU until an interrupt occurs, at which point execution continues. -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { __WFI(); - return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_lightsleep(size_t n_args, const mp_obj_t *args) { if (n_args != 0) { diff --git a/ports/renesas-ra/modmachine.h b/ports/renesas-ra/modmachine.h index 22d1fc475e..b8f8b631f2 100644 --- a/ports/renesas-ra/modmachine.h +++ b/ports/renesas-ra/modmachine.h @@ -47,7 +47,6 @@ MP_DECLARE_CONST_FUN_OBJ_0(machine_reset_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_bootloader_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_freq_obj); -MP_DECLARE_CONST_FUN_OBJ_0(machine_idle_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_lightsleep_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_deepsleep_obj); diff --git a/ports/rp2/modmachine.c b/ports/rp2/modmachine.c index 6ec2811f98..65a5f75c58 100644 --- a/ports/rp2/modmachine.c +++ b/ports/rp2/modmachine.c @@ -54,7 +54,6 @@ { MP_ROM_QSTR(MP_QSTR_bootloader), MP_ROM_PTR(&machine_bootloader_obj) }, \ { MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&machine_freq_obj) }, \ \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ \ @@ -121,11 +120,9 @@ STATIC mp_obj_t machine_freq(size_t n_args, const mp_obj_t *args) { } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_freq_obj, 0, 1, machine_freq); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { __wfe(); - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_lightsleep(size_t n_args, const mp_obj_t *args) { mp_int_t delay_ms = 0; diff --git a/ports/samd/modmachine.c b/ports/samd/modmachine.c index 9b2e88ba60..60b09cb0a3 100644 --- a/ports/samd/modmachine.c +++ b/ports/samd/modmachine.c @@ -64,7 +64,6 @@ { MP_ROM_QSTR(MP_QSTR_Timer), MP_ROM_PTR(&machine_timer_type) }, \ MICROPY_PY_MACHINE_RTC_ENTRY \ \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) }, \ { MP_ROM_QSTR(MP_QSTR_enable_irq), MP_ROM_PTR(&machine_enable_irq_obj) }, \ { MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) }, \ @@ -122,11 +121,9 @@ STATIC mp_obj_t machine_unique_id(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_unique_id_obj, machine_unique_id); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { MICROPY_EVENT_POLL_HOOK; - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_disable_irq(void) { uint32_t state = MICROPY_BEGIN_ATOMIC_SECTION(); diff --git a/ports/stm32/modmachine.c b/ports/stm32/modmachine.c index fcdab9dfc1..8378fb3feb 100644 --- a/ports/stm32/modmachine.c +++ b/ports/stm32/modmachine.c @@ -102,7 +102,6 @@ { MP_ROM_QSTR(MP_QSTR_bootloader), MP_ROM_PTR(&machine_bootloader_obj) }, \ { MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&machine_freq_obj) }, \ MICROPY_PY_MACHINE_RNG_ENTRY \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, \ { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, \ @@ -381,11 +380,9 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_freq_obj, 0, 4, machine_freq); // idle() // This executies a wfi machine instruction which reduces power consumption // of the MCU until an interrupt occurs, at which point execution continues. -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { __WFI(); - return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); STATIC mp_obj_t machine_lightsleep(size_t n_args, const mp_obj_t *args) { if (n_args != 0) { diff --git a/ports/stm32/modmachine.h b/ports/stm32/modmachine.h index 096666eb5a..a234325fd7 100644 --- a/ports/stm32/modmachine.h +++ b/ports/stm32/modmachine.h @@ -39,7 +39,6 @@ MP_DECLARE_CONST_FUN_OBJ_0(machine_reset_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_bootloader_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_freq_obj); -MP_DECLARE_CONST_FUN_OBJ_0(machine_idle_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_lightsleep_obj); MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(machine_deepsleep_obj); MP_DECLARE_CONST_FUN_OBJ_0(machine_reset_cause_obj); diff --git a/ports/stm32/modpyb.c b/ports/stm32/modpyb.c index 0bf2d6a2c3..165c982f5d 100644 --- a/ports/stm32/modpyb.c +++ b/ports/stm32/modpyb.c @@ -65,6 +65,12 @@ STATIC mp_obj_t pyb_fault_debug(mp_obj_t value) { } STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_fault_debug_obj, pyb_fault_debug); +STATIC mp_obj_t pyb_idle(void) { + __WFI(); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(pyb_idle_obj, pyb_idle); + #if MICROPY_PY_PYB_LEGACY // Returns the number of milliseconds which have elapsed since `start`. @@ -144,7 +150,7 @@ STATIC const mp_rom_map_elem_t pyb_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_repl_info), MP_ROM_PTR(&pyb_set_repl_info_obj) }, #endif - { MP_ROM_QSTR(MP_QSTR_wfi), MP_ROM_PTR(&machine_idle_obj) }, + { MP_ROM_QSTR(MP_QSTR_wfi), MP_ROM_PTR(&pyb_idle_obj) }, { MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_irq), MP_ROM_PTR(&machine_enable_irq_obj) }, #if IRQ_ENABLE_STATS diff --git a/ports/unix/modmachine.c b/ports/unix/modmachine.c index 91e3e61340..9eacd5539f 100644 --- a/ports/unix/modmachine.c +++ b/ports/unix/modmachine.c @@ -36,14 +36,7 @@ #define MICROPY_PAGE_MASK (MICROPY_PAGE_SIZE - 1) #endif -#ifdef MICROPY_UNIX_MACHINE_IDLE -#define MICROPY_PY_MACHINE_IDLE_ENTRY { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, -#else -#define MICROPY_PY_MACHINE_IDLE_ENTRY -#endif - #define MICROPY_PY_MACHINE_EXTRA_GLOBALS \ - MICROPY_PY_MACHINE_IDLE_ENTRY \ { MP_ROM_QSTR(MP_QSTR_PinBase), MP_ROM_PTR(&machine_pinbase_type) }, \ // This variable is needed for machine.soft_reset(), but the variable is otherwise unused. @@ -80,10 +73,10 @@ uintptr_t mod_machine_mem_get_addr(mp_obj_t addr_o, uint align) { return addr; } -#ifdef MICROPY_UNIX_MACHINE_IDLE -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { + #ifdef MICROPY_UNIX_MACHINE_IDLE MICROPY_UNIX_MACHINE_IDLE - return mp_const_none; + #else + // Do nothing. + #endif } -MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); -#endif diff --git a/ports/zephyr/modmachine.c b/ports/zephyr/modmachine.c index 701420fadb..16109a3af8 100644 --- a/ports/zephyr/modmachine.c +++ b/ports/zephyr/modmachine.c @@ -43,7 +43,6 @@ #define MICROPY_PY_MACHINE_EXTRA_GLOBALS \ MICROPY_PY_MACHINE_RESET_ENTRY \ { MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) }, \ - { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, \ { MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&machine_pin_type) }, \ STATIC mp_obj_t machine_reset(void) { @@ -59,8 +58,6 @@ STATIC mp_obj_t machine_reset_cause(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_reset_cause_obj, machine_reset_cause); -STATIC mp_obj_t machine_idle(void) { +STATIC void mp_machine_idle(void) { k_yield(); - return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle);