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:
parent
5a91cd9ff3
commit
9efb36bfa6
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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"
|
||||||
|
@ -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) {
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user