diff --git a/arduino/beken-72xx/cores/arduino/wiring.c b/arduino/beken-72xx/cores/arduino/wiring.c index 03135ee..43ea08b 100644 --- a/arduino/beken-72xx/cores/arduino/wiring.c +++ b/arduino/beken-72xx/cores/arduino/wiring.c @@ -26,15 +26,8 @@ unsigned long micros() { return millis() * 1000; } -static unsigned long lastHeapLog = 0; - void yield() { -#if LT_LOG_HEAP - if (millis() - lastHeapLog > 1000) { - LT_HEAP_I(); - lastHeapLog = millis(); - } -#endif + runPeriodicTasks(); vTaskDelay(1); taskYIELD(); } diff --git a/arduino/libretuya/core/LibreTuyaCustom.h b/arduino/libretuya/core/LibreTuyaCustom.h index c3a6a9d..3c67122 100644 --- a/arduino/libretuya/core/LibreTuyaCustom.h +++ b/arduino/libretuya/core/LibreTuyaCustom.h @@ -21,6 +21,13 @@ extern bool startMainTask(); */ extern void mainTask(const void *arg); +/** + * @brief Run periodic tasks, like printing free heap or checking millis() overflow. + * + * This is called during delaying operations, like yield() or delay(). + */ +extern void runPeriodicTasks(); + #define PIN_NONE (1 << 0) #define PIN_GPIO (1 << 1) #define PIN_IRQ (1 << 2) diff --git a/arduino/libretuya/core/main.cpp b/arduino/libretuya/core/main.cpp index 4730393..86ad423 100644 --- a/arduino/libretuya/core/main.cpp +++ b/arduino/libretuya/core/main.cpp @@ -32,6 +32,17 @@ void mainTask(const void *arg) { } } +static unsigned long periodicTasks[] = {0, 0}; + +void runPeriodicTasks() { +#if LT_LOG_HEAP + if (millis() - periodicTasks[0] > 1000) { + LT_HEAP_I(); + periodicTasks[0] = millis(); + } +#endif +} + int main(void) { // print a startup banner LT_BANNER();