Commit 785cf9a6 authored by Paul Sokolovsky's avatar Paul Sokolovsky

esp8266: Support dedicated REPL loop (aka pull-style).

Event-driven loop (push-style) is still supported and default (controlled
by MICROPY_REPL_EVENT_DRIVEN setting, as expected).

Dedicated loop worked even without adding ets_loop_iter(), though that
needs to be revisited later.
parent 777232c9
...@@ -66,7 +66,7 @@ void mp_hal_delay_us(uint32_t us) { ...@@ -66,7 +66,7 @@ void mp_hal_delay_us(uint32_t us) {
int mp_hal_stdin_rx_chr(void) { int mp_hal_stdin_rx_chr(void) {
for (;;) { for (;;) {
int c = uart0_rx(); int c = ringbuf_get(&input_buf);
if (c != -1) { if (c != -1) {
return c; return c;
} }
...@@ -156,7 +156,9 @@ void __assert_func(const char *file, int line, const char *func, const char *exp ...@@ -156,7 +156,9 @@ void __assert_func(const char *file, int line, const char *func, const char *exp
} }
void mp_hal_signal_input(void) { void mp_hal_signal_input(void) {
#if MICROPY_REPL_EVENT_DRIVEN
system_os_post(UART_TASK_ID, 0, 0); system_os_post(UART_TASK_ID, 0, 0);
#endif
} }
static int call_dupterm_read(void) { static int call_dupterm_read(void) {
......
...@@ -62,15 +62,38 @@ void soft_reset(void) { ...@@ -62,15 +62,38 @@ void soft_reset(void) {
mp_hal_stdout_tx_str("PYB: soft reboot\r\n"); mp_hal_stdout_tx_str("PYB: soft reboot\r\n");
mp_hal_delay_us(10000); // allow UART to flush output mp_hal_delay_us(10000); // allow UART to flush output
mp_reset(); mp_reset();
#if MICROPY_REPL_EVENT_DRIVEN
pyexec_event_repl_init(); pyexec_event_repl_init();
#endif
} }
void init_done(void) { void init_done(void) {
#if MICROPY_REPL_EVENT_DRIVEN
uart_task_init(); uart_task_init();
#endif
mp_reset(); mp_reset();
mp_hal_stdout_tx_str("\r\n"); mp_hal_stdout_tx_str("\r\n");
#if MICROPY_REPL_EVENT_DRIVEN
pyexec_event_repl_init(); pyexec_event_repl_init();
#endif
dupterm_task_init(); dupterm_task_init();
#if !MICROPY_REPL_EVENT_DRIVEN
soft_reset:
for (;;) {
if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
if (pyexec_raw_repl() != 0) {
break;
}
} else {
if (pyexec_friendly_repl() != 0) {
break;
}
}
}
soft_reset();
goto soft_reset;
#endif
} }
void user_init(void) { void user_init(void) {
......
...@@ -233,6 +233,7 @@ void soft_reset(void); ...@@ -233,6 +233,7 @@ void soft_reset(void);
void mp_keyboard_interrupt(void); void mp_keyboard_interrupt(void);
int interrupt_char; int interrupt_char;
#if MICROPY_REPL_EVENT_DRIVEN
void uart_task_handler(os_event_t *evt) { void uart_task_handler(os_event_t *evt) {
if (pyexec_repl_active) { if (pyexec_repl_active) {
// TODO: Just returning here isn't exactly right. // TODO: Just returning here isn't exactly right.
...@@ -264,3 +265,4 @@ void uart_task_handler(os_event_t *evt) { ...@@ -264,3 +265,4 @@ void uart_task_handler(os_event_t *evt) {
void uart_task_init() { void uart_task_init() {
system_os_task(uart_task_handler, UART_TASK_ID, uart_evt_queue, sizeof(uart_evt_queue) / sizeof(*uart_evt_queue)); system_os_task(uart_task_handler, UART_TASK_ID, uart_evt_queue, sizeof(uart_evt_queue) / sizeof(*uart_evt_queue));
} }
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment