From 93c70de8d714ec1a10622be3c24fae12a9b492c4 Mon Sep 17 00:00:00 2001 From: dario Date: Mon, 24 Mar 2025 19:58:41 +0100 Subject: [PATCH] More compact tick events implementation --- include/sta/tacos/system/events.hpp | 21 +++++---- src/events.cpp | 67 ++++++++++++----------------- 2 files changed, 37 insertions(+), 51 deletions(-) diff --git a/include/sta/tacos/system/events.hpp b/include/sta/tacos/system/events.hpp index 012a03c..e4cecec 100644 --- a/include/sta/tacos/system/events.hpp +++ b/include/sta/tacos/system/events.hpp @@ -37,17 +37,16 @@ namespace sta { enum class Types : uint32_t { - STARTUP = 0x01, - TICK_100Hz = 0x02, - TOCK_100Hz = 0x03, - TICK_50Hz = 0x04, - TOCK_50Hz = 0x05, - TICK_20Hz = 0x06, - TOCK_20Hz = 0x07, - TICK_10Hz = 0x08, - TOCK_10Hz = 0x09, - TICK_1Hz = 0x0A, - TOCK_1Hz = 0x0B + STARTUP = (0x01 << 0x00), + TICK_100Hz = (0x01 << 0x01), + TICK_50Hz = (0x01 << 0x02), + TOCK_50Hz = (0x01 << 0x03), + TICK_20Hz = (0x01 << 0x04), + TOCK_20Hz = (0x01 << 0x05), + TICK_10Hz = (0x01 << 0x06), + TOCK_10Hz = (0x01 << 0x07), + TICK_1Hz = (0x01 << 0x08), + TOCK_1Hz = (0x01 << 0x09) }; /** diff --git a/src/events.cpp b/src/events.cpp index 33805d7..eda6992 100644 --- a/src/events.cpp +++ b/src/events.cpp @@ -13,10 +13,10 @@ namespace // Event handle sta::RtosEvent * systemEvents = nullptr; - uint8_t tickCounter = 0; - // Tick timer handle sta::RtosTimer * tickTimer = nullptr; + + uint8_t tickCounter = 0; } @@ -38,49 +38,36 @@ namespace sta tickTimer = new sta::RtosTimer([]() { uint32_t flags = 0x00; - if (tickCounter % 2 == 0) - { - flags |= Types::TICK_100Hz; + flags |= Types::TICK_100Hz; - if ((tickCounter / 2) % 2 == 0) { - flags |= Types::TICK_50Hz; - } - else - { - flags |= Types::TOCK_50Hz; - } - - if (tickCounter % 10 == 0 && ((tickCounter / 10) % 2) == 0) - { - flags |= Types::TICK_10Hz; - } - else if (tickCounter % 10 == 0 && (tickCounter / 10) == 1) { - flags |= Types::TOCK_10Hz; - } - - if (tickCounter % 100 == 0 && (tickCounter / 100) % 2 == 0) { - flags |= Types::TICK_1Hz; - } - else if (tickCounter % 100 == 0 && (tickCounter / 100) == 1) { - flags |= Types::TOCK_1Hz; - } - } - else - { - flags |= Types::TOCK_100Hz; - - if (tickCounter % 5 == 0 && ((tickCounter / 5) % 2) == 0) - { - flags |= Types::TICK_20Hz; - } - else if (tickCounter % 5 == 0 && (tickCounter / 5) == 1) { - flags |= Types::TOCK_20Hz; - } + if (tickCounter % 20 == 0) { + flags |= Types::TICK_50Hz; + } else { + flags |= Types::TOCK_50Hz; } - tickCounter = ++tickCounter % 200; + if (tickCounter % 50 == 0) { + flags |= Types::TICK_20Hz; + } else if (tickCounter % 25 == 0) { + flags |= Types::TOCK_20Hz; + } + + if (tickCounter % 100) { + flags |= Types::TICK_10Hz; + } else if (tickCounter % 50 == 0) { + flags |= Types::TOCK_10Hz; + } + + if (tickCounter % 1000) { + flags |= Types::TICK_1Hz; + } else if (tickCounter % 500 == 0) { + flags |= Types::TOCK_1Hz; + } + + tickCounter = (tickCounter + 10) % 1000; signal(flags); + systemEvents->clear(0xFFFFFFFF); }, true); tickTimer->start(10);