Cooperative multitasking for Arduino, ESPx, STM32, nRF and more
Cooperative multitasking for Arduino, ESPx, STM32 and other microcontrollers. A lightweight implementation of cooperative multitasking (task scheduling). An easier alternative to preemptive programming and frameworks like FreeRTOS. You mostly do not need to worry about pitfalls of concurrent processing (races, deadlocks, livelocks, resource sharing, etc.). The fact of cooperative processing takes care of such issues by design.
Usage:
- run function blinkLED() every 2000 ms:
timer.addEverytime(2000, blinkLED);
- run function itWorks() two times with interval 2000 ms, wait 300 ms before first start:
timer.addTask(2000, 2, 300, itWorks);
Removing a task:
removeEverytime(callback_function);
removeTask(callback_function);
Library can also be used in desktop C++ applications:
#include <iostream>
#include <string>
#include <chrono>
#include <thread>
#include "RZtimer.h"
int main()
{
RZTimer timer;
timer.addEverytime(2000, [] (){ std::cout << "Hello! " << std::chrono::duration_cast<std::chrono::milliseconds >(
std::chrono::system_clock::now().time_since_epoch()
).count() << "\n";});
while(1){
timer.run();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
The embedded Single Timer Wheel (eSTW) is a timer wheel facility that can be used at task and interrupt level. The number of wheel spokes is user configured. The timer granularity is determined by the task signal or hardware interrupt source.