|
33 | 33 | #include "extmod/machine_mem.h"
|
34 | 34 | #include "extmod/machine_pulse.h"
|
35 | 35 | #include "extmod/machine_i2c.h"
|
| 36 | +#include "lib/utils/pyexec.h" |
36 | 37 | #include "lib/fatfs/ff.h"
|
37 | 38 | #include "lib/fatfs/diskio.h"
|
38 | 39 | #include "gccollect.h"
|
@@ -172,6 +173,12 @@ STATIC mp_obj_t machine_reset(void) {
|
172 | 173 | }
|
173 | 174 | MP_DEFINE_CONST_FUN_OBJ_0(machine_reset_obj, machine_reset);
|
174 | 175 |
|
| 176 | +STATIC mp_obj_t machine_soft_reset(void) { |
| 177 | + pyexec_system_exit = PYEXEC_FORCED_EXIT; |
| 178 | + nlr_raise(mp_obj_new_exception(&mp_type_SystemExit)); |
| 179 | +} |
| 180 | +MP_DEFINE_CONST_FUN_OBJ_0(machine_soft_reset_obj, machine_soft_reset); |
| 181 | + |
175 | 182 | // Activate the bootloader without BOOT* pins.
|
176 | 183 | STATIC NORETURN mp_obj_t machine_bootloader(void) {
|
177 | 184 | pyb_usb_dev_deinit();
|
@@ -502,6 +509,7 @@ STATIC const mp_map_elem_t machine_module_globals_table[] = {
|
502 | 509 | { MP_OBJ_NEW_QSTR(MP_QSTR_info), (mp_obj_t)&machine_info_obj },
|
503 | 510 | { MP_OBJ_NEW_QSTR(MP_QSTR_unique_id), (mp_obj_t)&machine_unique_id_obj },
|
504 | 511 | { MP_OBJ_NEW_QSTR(MP_QSTR_reset), (mp_obj_t)&machine_reset_obj },
|
| 512 | + { MP_OBJ_NEW_QSTR(MP_QSTR_soft_reset), (mp_obj_t)&machine_soft_reset_obj }, |
505 | 513 | { MP_OBJ_NEW_QSTR(MP_QSTR_bootloader), (mp_obj_t)&machine_bootloader_obj },
|
506 | 514 | { MP_OBJ_NEW_QSTR(MP_QSTR_freq), (mp_obj_t)&machine_freq_obj },
|
507 | 515 | #if MICROPY_HW_ENABLE_RNG
|
|
0 commit comments