summaryrefslogtreecommitdiff
path: root/supervisor/shared
diff options
context:
space:
mode:
Diffstat (limited to 'supervisor/shared')
-rw-r--r--supervisor/shared/tick.c12
-rw-r--r--supervisor/shared/tick.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c
index d4a6ac5d7..7dc5a52d3 100644
--- a/supervisor/shared/tick.c
+++ b/supervisor/shared/tick.c
@@ -24,10 +24,13 @@
* THE SOFTWARE.
*/
+#include <stdatomic.h>
+
#include "supervisor/shared/tick.h"
#include "supervisor/filesystem.h"
#include "supervisor/shared/autoreload.h"
+static atomic_bool tick_up;
static volatile uint64_t ticks_ms;
#if CIRCUITPY_GAMEPAD
@@ -44,6 +47,7 @@ void supervisor_tick(void) {
ticks_ms ++;
+ atomic_store(&tick_up, true);
#if CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS > 0
filesystem_tick();
@@ -74,3 +78,11 @@ uint64_t supervisor_ticks_ms64() {
uint32_t supervisor_ticks_ms32() {
return ticks_ms;
}
+
+extern void run_background_tasks(void);
+
+void supervisor_run_background_tasks_if_tick() {
+ if (atomic_exchange(&tick_up, false)) {
+ run_background_tasks();
+ }
+}
diff --git a/supervisor/shared/tick.h b/supervisor/shared/tick.h
index 3defeb108..b66273449 100644
--- a/supervisor/shared/tick.h
+++ b/supervisor/shared/tick.h
@@ -33,5 +33,6 @@
extern void supervisor_tick(void);
extern uint32_t supervisor_ticks_ms32(void);
extern uint64_t supervisor_ticks_ms64(void);
+extern void supervisor_run_background_if_tick(void);
#endif