Version 4.0.0
v3.8.0:
2023-01-24 - feature: added setIntervalNodelay() method to dynamically adjust current interval
v3.8.1:
2023-05-11 - bug: conditional compile options missing from *.hpp files (Adafruit support)
v3.8.2:
2023-09-27 - feature: _TASK_TICKLESS - support for tickless execution under FreeRTOS
- feature: _TASK_DO_NOT_YIELD - ability to disable yield() in execute() method
v3.8.3:
2023-09-29 - feature: _TASK_TICKLESS - change in approach for backwards compatibility
- feature: added scheduler stats for total/active/invoked tasks for each pass
v3.8.4:
2024-01-13 - bug: (git PR #180): the variables tStart and tFinish are required if sleep support is enabled,
independent of _TASK_TIMECRITICAL. However, they were guarded by _TASK_TIMECRITICAL as well.
- bug: (git PR #181): delete manually disabled tasks with self-destruct flag
- bug: (git PR #182): correct deletion of self-destruct 'current' task in disableAll()
v3.8.5:
2024-06-17 - updated volatile compound statements after C++20 deprecated compound assignment on volatiles
v3.9.0:
2024-08-14 - _TASK_ISR_SUPPORT compile option (espressif chips only) - allow placing a few control methods into IRAM to be used in ISRs
list of IRAM-enabled methods:
StatusRequest::signal
StatusRequest::signalComplete
Task::enable
Task::enableIfNot
Task::enableDelayed
Task::restart
Task::restartDelayed
Task::delay
Task::forceNextIteration
v4.0.0:
2024-10-26 - MAJOR UPDATE for use in pre-emptive environments (FreeRTOS or Zephyr)
- list of IRAM-enabled methods extended:
Task::disable
Task::abort
Task::cancel
- _TASK_DEFINE_MILLIS - deprecated
- _TASK_EXTERNAL_TIME - deprecated
- New compile options:
_TASK_NON_ARDUINO - does not include "Arduino.h"
target platform has to implement:
unsigned long _task_millis();
unsigned long _task_micros();
void _task_yield();
_TASK_HEADER_AND_CPP - enables compilation of TaskScheduler.cpp (non Arduino IDE use)
- Major rework of the _TASK_THREAD_SAFE approach. Developers should only be calling Scheduler and Task methods
directly from the thread where TaskScheduler execute() method runs.
Calls from the other threads should be done via Scheduler::requestAction(...) methods.
Target platform should implement an action queue and two methods:
bool _task_enqueue_request(_task_request_t* req); // puts _task_request_t object on the action queue
bool _task_dequeue_request(_task_request_t* req); // retrieves _task_request_t object from the action queue
Please see examples folder for implementation folder.
2025-09-13:
- feature: allow _TASK_STD_FUNCTION for all platforms (you should know what you are doing)
- feature: allow _TASK_DO_NOT_YIELD for all platforms (you should know what you are doing)
2025-09-21:
- bug: incorrect behavior of the StatusRequest timeout functionality due to uninitialized timeout variable
- update: addedd Doxygen comments to all methods and variables
-update: added a number of compile and unit tests for CI/CD