From 771008495edf0144dd528818bafa77bc10096002 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:25:54 +0100 Subject: [PATCH] Replace rounded div macro --- src/displayapp/DisplayApp.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 14047571..918dd9f9 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -159,8 +159,11 @@ void DisplayApp::InitHw() { TickType_t DisplayApp::CalculateSleepTime() { TickType_t ticksElapsed = xTaskGetTickCount() - alwaysOnStartTime; // Divide both the numerator and denominator by 8 to increase the number of ticks (frames) before the overflow tick is reached - TickType_t elapsedTarget = ROUNDED_DIV((configTICK_RATE_HZ / 8) * alwaysOnTickCount * alwaysOnRefreshPeriod, 1000 / 8); - // ROUNDED_DIV overflows when numerator + (denominator floordiv 2) > uint32 max + auto RoundedDiv = [](uint32_t a, uint32_t b) { + return ((a + (b / 2)) / b); + }; + TickType_t elapsedTarget = RoundedDiv((configTICK_RATE_HZ / 8) * alwaysOnTickCount * alwaysOnRefreshPeriod, 1000 / 8); + // RoundedDiv overflows when numerator + (denominator floordiv 2) > uint32 max // in this case around 9 hours constexpr TickType_t overflowTick = (UINT32_MAX - (1000 / 16)) / ((configTICK_RATE_HZ / 8) * alwaysOnRefreshPeriod);