summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-04-25 22:24:49 +1000
committerDamien George <damien@micropython.org>2021-04-30 15:32:16 +1000
commit916c3fd23fc4b636a8007525c3bd6308d01509d0 (patch)
tree354894b3976b46a8e01c75c4605848b95e75a81f
parente9e9c76ddf131f8e50b0ae2d44501d3cd88537ef (diff)
downloadmicropython-916c3fd23fc4b636a8007525c3bd6308d01509d0.tar.gz
micropython-916c3fd23fc4b636a8007525c3bd6308d01509d0.zip
py/scheduler: Add optional port hook for when something is scheduled.
So that a port can "wake up" when there is work to do. Signed-off-by: Damien George <damien@micropython.org>
-rw-r--r--py/mpconfig.h6
-rw-r--r--py/scheduler.c1
2 files changed, 7 insertions, 0 deletions
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 4445e9aee2..7337994a5e 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -550,6 +550,12 @@
#define MICROPY_VM_HOOK_RETURN
#endif
+// Hook for mp_sched_schedule when a function gets scheduled on sched_queue
+// (this macro executes within an atomic section)
+#ifndef MICROPY_SCHED_HOOK_SCHEDULED
+#define MICROPY_SCHED_HOOK_SCHEDULED
+#endif
+
// Whether to include the garbage collector
#ifndef MICROPY_ENABLE_GC
#define MICROPY_ENABLE_GC (0)
diff --git a/py/scheduler.c b/py/scheduler.c
index 9ff930007e..947510c68b 100644
--- a/py/scheduler.c
+++ b/py/scheduler.c
@@ -134,6 +134,7 @@ bool MICROPY_WRAP_MP_SCHED_SCHEDULE(mp_sched_schedule)(mp_obj_t function, mp_obj
uint8_t iput = IDX_MASK(MP_STATE_VM(sched_idx) + MP_STATE_VM(sched_len)++);
MP_STATE_VM(sched_queue)[iput].func = function;
MP_STATE_VM(sched_queue)[iput].arg = arg;
+ MICROPY_SCHED_HOOK_SCHEDULED;
ret = true;
} else {
// schedule queue is full