py/scheduler: Move mp_keyboard_interrupt from lib/utils to py core.

This function is tightly coupled to the state and behaviour of the
scheduler, and is a core part of the runtime: to schedule a pending
exception.  So move it there.
This commit is contained in:
Damien George 2020-02-06 20:25:54 +11:00
parent 5a91cd9ff3
commit 9efb36bfa6
6 changed files with 14 additions and 23 deletions

View File

@ -38,13 +38,4 @@ void mp_hal_set_interrupt_char(int c) {
mp_interrupt_char = c; mp_interrupt_char = c;
} }
void mp_keyboard_interrupt(void) {
MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception));
#if MICROPY_ENABLE_SCHEDULER
if (MP_STATE_VM(sched_state) == MP_SCHED_IDLE) {
MP_STATE_VM(sched_state) = MP_SCHED_PENDING;
}
#endif
}
#endif #endif

View File

@ -28,6 +28,5 @@
extern int mp_interrupt_char; extern int mp_interrupt_char;
void mp_hal_set_interrupt_char(int c); void mp_hal_set_interrupt_char(int c);
void mp_keyboard_interrupt(void);
#endif // MICROPY_INCLUDED_LIB_UTILS_INTERRUPT_CHAR_H #endif // MICROPY_INCLUDED_LIB_UTILS_INTERRUPT_CHAR_H

View File

@ -26,8 +26,7 @@
#include <stdint.h> #include <stdint.h>
#include "py/mpconfig.h" #include "py/runtime.h"
#include "py/obj.h"
#include "py/mphal.h" #include "py/mphal.h"
#include "lib/utils/interrupt_char.h" #include "lib/utils/interrupt_char.h"
#include "telnet.h" #include "telnet.h"

View File

@ -24,9 +24,8 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include "py/mpstate.h" #include "py/runtime.h"
#include "py/mphal.h" #include "py/mphal.h"
#include "lib/utils/interrupt_char.h"
#include "samd_soc.h" #include "samd_soc.h"
#include "tusb.h" #include "tusb.h"
@ -46,15 +45,6 @@ void mp_hal_set_interrupt_char(int c) {
tud_cdc_set_wanted_char(c); tud_cdc_set_wanted_char(c);
} }
void mp_keyboard_interrupt(void) {
MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception));
#if MICROPY_ENABLE_SCHEDULER
if (MP_STATE_VM(sched_state) == MP_SCHED_IDLE) {
MP_STATE_VM(sched_state) = MP_SCHED_PENDING;
}
#endif
}
#endif #endif
void mp_hal_delay_ms(mp_uint_t ms) { void mp_hal_delay_ms(mp_uint_t ms) {

View File

@ -64,6 +64,7 @@ extern const byte mp_binary_op_method_name[];
void mp_init(void); void mp_init(void);
void mp_deinit(void); void mp_deinit(void);
void mp_keyboard_interrupt(void);
void mp_handle_pending(bool raise_exc); void mp_handle_pending(bool raise_exc);
void mp_handle_pending_tail(mp_uint_t atomic_state); void mp_handle_pending_tail(mp_uint_t atomic_state);

View File

@ -28,6 +28,17 @@
#include "py/runtime.h" #include "py/runtime.h"
#if MICROPY_KBD_EXCEPTION
void mp_keyboard_interrupt(void) {
MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception));
#if MICROPY_ENABLE_SCHEDULER
if (MP_STATE_VM(sched_state) == MP_SCHED_IDLE) {
MP_STATE_VM(sched_state) = MP_SCHED_PENDING;
}
#endif
}
#endif
#if MICROPY_ENABLE_SCHEDULER #if MICROPY_ENABLE_SCHEDULER
#define IDX_MASK(i) ((i) & (MICROPY_SCHEDULER_DEPTH - 1)) #define IDX_MASK(i) ((i) & (MICROPY_SCHEDULER_DEPTH - 1))