Browse Source

esp8266/main: Activate UART(0) on dupterm for REPL before boot.py runs.

So that the user can explicitly deactivate UART(0) if needed.  See
issue #4314.

This introduces some risk to "brick" the device, if the user disables the
REPL without providing an alternative REPL (eg WebREPL), or any way to
reenable it.  In such a case the device needs to be erased and
reprogrammed.  This seems unavoidable, given the desire to have the option
to use the UART for something other than the REPL.
pull/4413/head
Damien George 6 years ago
parent
commit
36808d4e6a
  1. 27
      ports/esp8266/main.c
  2. 2
      ports/esp8266/modules/inisetup.py

27
ports/esp8266/main.c

@ -63,23 +63,9 @@ STATIC void mp_reset(void) {
pin_init0(); pin_init0();
readline_init0(); readline_init0();
dupterm_task_init(); dupterm_task_init();
#if MICROPY_MODULE_FROZEN
pyexec_frozen_module("_boot.py");
pyexec_file("boot.py");
if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) {
pyexec_file("main.py");
}
#endif
// Check if there are any dupterm objects registered and if not then // Activate UART(0) on dupterm slot 1 for the REPL
// activate UART(0), or else there will never be any chance to get a REPL {
size_t idx;
for (idx = 0; idx < MICROPY_PY_OS_DUPTERM; ++idx) {
if (MP_STATE_VM(dupterm_objs[idx]) != MP_OBJ_NULL) {
break;
}
}
if (idx == MICROPY_PY_OS_DUPTERM) {
mp_obj_t args[2]; mp_obj_t args[2];
args[0] = MP_OBJ_NEW_SMALL_INT(0); args[0] = MP_OBJ_NEW_SMALL_INT(0);
args[1] = MP_OBJ_NEW_SMALL_INT(115200); args[1] = MP_OBJ_NEW_SMALL_INT(115200);
@ -87,8 +73,15 @@ STATIC void mp_reset(void) {
args[1] = MP_OBJ_NEW_SMALL_INT(1); args[1] = MP_OBJ_NEW_SMALL_INT(1);
extern mp_obj_t os_dupterm(size_t n_args, const mp_obj_t *args); extern mp_obj_t os_dupterm(size_t n_args, const mp_obj_t *args);
os_dupterm(2, args); os_dupterm(2, args);
mp_hal_stdout_tx_str("Activated UART(0) for REPL\r\n");
} }
#if MICROPY_MODULE_FROZEN
pyexec_frozen_module("_boot.py");
pyexec_file("boot.py");
if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) {
pyexec_file("main.py");
}
#endif
} }
void soft_reset(void) { void soft_reset(void) {

2
ports/esp8266/modules/inisetup.py

@ -45,7 +45,7 @@ def setup():
#import esp #import esp
#esp.osdebug(None) #esp.osdebug(None)
import uos, machine import uos, machine
uos.dupterm(machine.UART(0, 115200), 1) #uos.dupterm(None, 1) # disable REPL on UART(0)
import gc import gc
#import webrepl #import webrepl
#webrepl.start() #webrepl.start()

Loading…
Cancel
Save