More compact tick events implementation

This commit is contained in:
dario 2025-03-24 19:58:41 +01:00
parent 1479e75365
commit 93c70de8d7
2 changed files with 37 additions and 51 deletions

View File

@ -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)
};
/**

View File

@ -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);