From 47425f21cc73c8038f79231521bd60c163092211 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Tue, 16 Jun 2020 15:10:23 -0500 Subject: [PATCH 01/10] Handle a sleep exit with ctrl-c --- shared-module/time/__init__.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/shared-module/time/__init__.c b/shared-module/time/__init__.c index 347e68ae028c8..fad72c4b26de8 100644 --- a/shared-module/time/__init__.c +++ b/shared-module/time/__init__.c @@ -27,6 +27,8 @@ #include "py/mphal.h" #include "supervisor/port.h" #include "supervisor/shared/tick.h" +#include "py/obj.h" +#include "py/mpstate.h" uint64_t common_hal_time_monotonic(void) { return supervisor_ticks_ms64(); @@ -42,4 +44,9 @@ uint64_t common_hal_time_monotonic_ns(void) { void common_hal_time_delay_ms(uint32_t delay) { mp_hal_delay_ms(delay); + // if the delay was cut short by a CTRL-C then clear the keyboard exception + if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) + { + MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; + } } From 6a76e1571b7303f08dd90948bce44042716cc4a0 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Fri, 19 Jun 2020 12:30:18 -0500 Subject: [PATCH 02/10] Added stack trace after a sleep ctrl-c interrupt --- shared-module/time/__init__.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared-module/time/__init__.c b/shared-module/time/__init__.c index fad72c4b26de8..b83c3ca519de6 100644 --- a/shared-module/time/__init__.c +++ b/shared-module/time/__init__.c @@ -28,6 +28,7 @@ #include "supervisor/port.h" #include "supervisor/shared/tick.h" #include "py/obj.h" +#include "py/nlr.h" #include "py/mpstate.h" uint64_t common_hal_time_monotonic(void) { @@ -47,6 +48,7 @@ void common_hal_time_delay_ms(uint32_t delay) { // if the delay was cut short by a CTRL-C then clear the keyboard exception if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) { - MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; + MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; + nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); } } From 99789289d8f2a1d6284caa8ae788ca530e7deb79 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Fri, 19 Jun 2020 12:33:43 -0500 Subject: [PATCH 03/10] Update __init__.c --- shared-module/time/__init__.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-module/time/__init__.c b/shared-module/time/__init__.c index b83c3ca519de6..dd232e755e853 100644 --- a/shared-module/time/__init__.c +++ b/shared-module/time/__init__.c @@ -48,7 +48,7 @@ void common_hal_time_delay_ms(uint32_t delay) { // if the delay was cut short by a CTRL-C then clear the keyboard exception if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) { - MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; + MP_STATE_VM (mp_pending_exception) = MP_OBJ_NULL; nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); } } From beb80e75458168dd475f2153179bd786c867f380 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Fri, 19 Jun 2020 12:38:55 -0500 Subject: [PATCH 04/10] removed trailing whitespace --- shared-module/time/__init__.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shared-module/time/__init__.c b/shared-module/time/__init__.c index dd232e755e853..559e224a3ffb6 100644 --- a/shared-module/time/__init__.c +++ b/shared-module/time/__init__.c @@ -48,7 +48,8 @@ void common_hal_time_delay_ms(uint32_t delay) { // if the delay was cut short by a CTRL-C then clear the keyboard exception if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) { - MP_STATE_VM (mp_pending_exception) = MP_OBJ_NULL; + // clear exception and generate stacktrace + MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); } } From e381f593ff2071d8f40c7cd049fbdb924b3c1faa Mon Sep 17 00:00:00 2001 From: DavePutz Date: Fri, 19 Jun 2020 19:00:03 -0500 Subject: [PATCH 05/10] Moved changes to supervisor/shared/tick.c --- shared-module/time/__init__.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/shared-module/time/__init__.c b/shared-module/time/__init__.c index 559e224a3ffb6..2e43799415757 100644 --- a/shared-module/time/__init__.c +++ b/shared-module/time/__init__.c @@ -28,7 +28,6 @@ #include "supervisor/port.h" #include "supervisor/shared/tick.h" #include "py/obj.h" -#include "py/nlr.h" #include "py/mpstate.h" uint64_t common_hal_time_monotonic(void) { @@ -45,11 +44,4 @@ uint64_t common_hal_time_monotonic_ns(void) { void common_hal_time_delay_ms(uint32_t delay) { mp_hal_delay_ms(delay); - // if the delay was cut short by a CTRL-C then clear the keyboard exception - if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) - { - // clear exception and generate stacktrace - MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; - nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); - } } From 0b52359190490ab4a821d3998ce053a6fb23f28c Mon Sep 17 00:00:00 2001 From: DavePutz Date: Fri, 19 Jun 2020 19:02:43 -0500 Subject: [PATCH 06/10] Generate stacktrace and reset exception for ctrl-c interrupt Added code in mp_hal_delay_ms() to generate stacktrace and reset exception for ctrl-c interrupt --- supervisor/shared/tick.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c index 47395bd602efc..001db0f35485c 100644 --- a/supervisor/shared/tick.c +++ b/supervisor/shared/tick.c @@ -105,6 +105,12 @@ void mp_hal_delay_ms(mp_uint_t delay) { if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)) || MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception)) || WATCHDOG_EXCEPTION_CHECK()) { + if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) + { + // clear exception and generate stacktrace + MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; + nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); + } break; } remaining = end_tick - port_get_raw_ticks(NULL); From 182a8733a4acf356b848714c1f2e85190a27da0c Mon Sep 17 00:00:00 2001 From: DavePutz Date: Sun, 21 Jun 2020 13:28:26 -0500 Subject: [PATCH 07/10] Rework handling of ctrl-c interrupt --- supervisor/shared/tick.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c index 001db0f35485c..3842b67d56681 100644 --- a/supervisor/shared/tick.c +++ b/supervisor/shared/tick.c @@ -102,15 +102,15 @@ void mp_hal_delay_ms(mp_uint_t delay) { while (remaining > 0) { RUN_BACKGROUND_TASKS; // Check to see if we've been CTRL-Ced by autoreload or the user. - if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)) || - MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception)) || - WATCHDOG_EXCEPTION_CHECK()) { - if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) + if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) { // clear exception and generate stacktrace MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); - } + } + if( MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception)) || + WATCHDOG_EXCEPTION_CHECK()) { + // stop sleeping immediately break; } remaining = end_tick - port_get_raw_ticks(NULL); From 65512cef1c278258f525422fe57271ffac6f51b0 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Mon, 22 Jun 2020 15:59:15 -0500 Subject: [PATCH 08/10] Update tick.c --- supervisor/shared/tick.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c index 3842b67d56681..106ff53f8997c 100644 --- a/supervisor/shared/tick.c +++ b/supervisor/shared/tick.c @@ -104,13 +104,13 @@ void mp_hal_delay_ms(mp_uint_t delay) { // Check to see if we've been CTRL-Ced by autoreload or the user. if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) { - // clear exception and generate stacktrace + // clear exception and generate stacktrace MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); } if( MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception)) || WATCHDOG_EXCEPTION_CHECK()) { - // stop sleeping immediately + // stop sleeping immediately break; } remaining = end_tick - port_get_raw_ticks(NULL); From 30a1624d59830e9eb73340e329586beec704b713 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Mon, 22 Jun 2020 20:18:55 -0500 Subject: [PATCH 09/10] Removed unneeded #includes --- shared-module/time/__init__.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/shared-module/time/__init__.c b/shared-module/time/__init__.c index 2e43799415757..347e68ae028c8 100644 --- a/shared-module/time/__init__.c +++ b/shared-module/time/__init__.c @@ -27,8 +27,6 @@ #include "py/mphal.h" #include "supervisor/port.h" #include "supervisor/shared/tick.h" -#include "py/obj.h" -#include "py/mpstate.h" uint64_t common_hal_time_monotonic(void) { return supervisor_ticks_ms64(); From b80abf1a90b515fff1503b75358e629fb248660c Mon Sep 17 00:00:00 2001 From: DavePutz Date: Tue, 23 Jun 2020 12:15:01 -0500 Subject: [PATCH 10/10] Update handing of a CTRL-C exception --- supervisor/shared/tick.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c index 106ff53f8997c..dd7dba8f3efa5 100644 --- a/supervisor/shared/tick.c +++ b/supervisor/shared/tick.c @@ -106,7 +106,7 @@ void mp_hal_delay_ms(mp_uint_t delay) { { // clear exception and generate stacktrace MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL; - nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt)); + nlr_raise(&MP_STATE_VM(mp_kbd_exception)); } if( MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception)) || WATCHDOG_EXCEPTION_CHECK()) {