-
Notifications
You must be signed in to change notification settings - Fork 251
Changelog
Anatoli Arkhipenko edited this page Jun 18, 2024
·
46 revisions
-
2024-06-17:
- updated volatile compound statements after C++20 deprecated compound assignment on volatiles
- v3.8.5 released
-
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 disable tasks with self-destruct flag
- bug: (git PR #182): correct deletion of self-destruct 'current' task in
disableAll()
- bug: (git PR #180): the variables tStart and tFinish are required if sleep support is enabled, independent of
-
2023-09-29:
- feature:
_TASK_TICKLESS
- change in approach for backwards compatibility - feature: added scheduler stats for total/active/invoked tasks per each pass
- feature:
-
2023-09-27:
- feature:
_TASK_TICKLESS
- support for tickless execution under FreeRTOS - feature:
_TASK_DO_NOT_YIELD
- ability to disable yield() in execute() method
- feature:
-
2023-05-11:
- bug: conditional compile options missing from *.hpp files (Adafruit support)
-
2023-01-24:
- feature: added
setIntervalNodelay()
method to dynamically adjust current interval
- feature: added
-
2022-10-04:
- feature: added ability for Task to "self-destruct" on disable. Useful for dynamic task management. Added updated example 19 for this functionality. Updated the Sketch Template. (Thanks, https://github.com/vortigont for the idea).
-
2022-10-04:
- feature: added TScheduler.hpp and TSchedulerDeclarations.hpp - a workaround for conflicting declarations (e.g., nRF52840 using Adafruit Core) using namespace TS (credit: https://github.com/vortigont)
-
2022-06-28:
- bug fix: Internal Status Request of the canceled and aborted tasks complete with respective error code
- feature: TASK_SR_ABORT code causes Tasks waiting on this Status Request to be aborted as well
-
2021-12-17:
- feature: added
_TASK_THREAD_SAFE
compile option for instances of TaskScheduler running under preemptive schedulers like FreeRTOS. Under certain conditions, task scheduling was adversely affected and led to unexpected results. Enabling_TASK_THREAD_SAFE
compile option eliminates such occurrences. - feature: added
adjust
method toTask
object.adjust(int32_t delta)
moves the entire schedule forward (positivedelta
) or backward (negativedelta
) by that many milliseconds (microseconds). This is helpful if for some reason you need to adjust the "start" time of scheduling to align with RTC "zero" seconds (for instance) or postpone one task while the other task is running. - feature: added example 27 demonstrating how to use TaskScheduler in PlatformIO projects.
- feature: added
-
2021-09-24:
- feature:
enable
,disable
,pause
andresume
methods toScheduler
object. - added ability to provide
external_millis
andexternal_micros
methods for alternative time calculations
- feature:
-
2021-05-27:
- feature: timeout functionality extended to StatusRequest objects.
- various bug fixes.
-
2020-12-26:
- feature: cancel() and abort() methods.
- feature: enable(), restart() and waitFor() method varieities return true if task was actually enabled, and false otherwise.
- various bug fixes.
-
2020-09-16:
- feature: scheduling options with priority for original schedule, original schedule without "catch-up", and interval (see Issue #103) for explanations.
- update: non-Avr power-saving features are now available with the premium license only via xs:code
-
2020-05-14:
- bug fix: deleteTask and addTask should check task ownership first (Issue #97)
- feature: implemented light sleep for esp32
-
2020-02-22:
- bug fix: bug: get rid of unnecessary compiler warnings
- feature: access to the task chain with _TASK_EXPOSE_CHAIN compile option
-
2020-01-30:
- bug fix: _TASK_DEFINE_MILLIS to force forward definition of millis and micros. Not defined by default.
2020-02-16:
- bug fix: bug fix: add 'virtual' to the Task destructor definition.
-
2020-01-17:
- bug fix: corrected external forward definitions for millis() and micros() per Issue 84.
-
2020-01-09:
- Feature: added 4 cpu load monitoring methods for _TASK_TIMECRITICAL compilation option. Ability to define idle sleep threshold for ESP chips. Please see example #24
-
2020-01-07:
- Feature: added 4 cpu load monitoring methods for _TASK_TIMECRITICAL compilation option. Please see example #24
-
2019-06-11:
- Feature: custom sleep callback method:
setSleepMethod()
- ability to dynamically control idle sleep for various microcontrollers. Please see example #23 - Feature: idle Sleep support for MSP430 and MSP432 boards
- Officially discontinued support for offile documentation in favor of updating the Wiki pages.
- Feature: custom sleep callback method:
-
2018-11-11:
- Bug: default constructor is ambiguous when Status Request objects are enabled (github issue #65 & #68)
- Support for STM32F1 boards (including IDLE Sleep)
-
2018-11-09:
- Bug: task deleted from the execution chain cannot be added back (github issue #67)
- Sketch template
-
2018-03-15:
- Major Release: Support for dynamic callback methods binding via compilation parameter _TASK_OO_CALLBACKS
-
2018-02-13:
- Bug: Support for task self-destruction in the OnDisable method
- Example 19: dynamic task creation and destruction.
2018-03-14:
- Bug: high level scheduler ignored if lower level chain is empty
- Example 20: use of local task storage to work with task-specific class objects
-
-
2018-01-30 -
_TASK_TIMEOUT
compilation directive: Task overall timeout functionality -
2018-01-30 - Support for
ESP32
(Contributed by Marco Tombesi)
-
2018-01-30 -
-
-
2018-01-09 -
_TASK_INLINE
compilation directive making all methods declaredinline
(issue #42)
-
2018-01-09 -
-
- 2018-01-06 - support for IDLE sleep mode for Teensy boards (tested on Teensy 3.5)
-
-
2017-04-27 - added optional support for
std::functions
via_TASK_STD_FUNCTION
. (Contributed by Edwin van Leeuwen) -
2017-08-30 - add
_TASK_DEBUG
making all methods and variables public FOR DEBUGGING PURPOSES ONLY!
USE AT YOUR OWN RISK -
2017-08-30 - bug fix:
Scheduler::addTask()
checks if task is already part of an execution chain (issue #37) - 2017-08-30 - support for multi-tab sketches. (Contributed by Adam Ryczkowski)
-
2017-04-27 - added optional support for
-
-
2017-04-27:
- added destructor to the Task class to ensure tasks are disables and taken off the execution chain
- upon destruction. (Contributed by Edwin van Leeuwen)
-
2017-04-27:
-
-
2017-02-24 - new
timeUntilNextIteration()
method within Scheduler class - inquire when a particlar task is scheduled to run next time
-
2017-02-24 - new
-
-
2016-11-30 - inlined constructors. Added
yield()
andyieldOnce()
functions to easily break down and chain back together long running callback methods -
2016-12-16:
- added
getCount()
to StatusRequest objects, made every task StatusRequest enabled. - Internal StatusRequest objects are accessible via
getInternalStatusRequest()
method.
- added
-
2016-11-30 - inlined constructors. Added
-
-
2016-11-17 - all methods made
inline
to support inclusion ofTaskSchedule.h
file into other header files
-
2016-11-17 - all methods made
-
- 2016-02-01 - support for microsecond resolution
-
2016-02-02 - added Scheduler baseline start time reset method:
startNow()
-
- 2016-01-02 - bug fix: issue #11 Xtensa compiler (esp8266): Declaration of constructor does not match implementation
-
-
2015-12-22 -
_TASK_PRIORITY
- support for layered task prioritization
-
2015-12-22 -
-
-
2015-11-28 -
_TASK_ROLLOVER_FIX
is deprecated (not necessary) - 2015-12-16 - bug fixes: automatic millis rollover support for delay methods
-
2015-12-17 - new method for
_TASK_TIMECRITICAL
option:getStartDelay()
-
2015-11-28 -
-
- 2015-11-24 - packed three byte-long status variables into one byte-long bit array structure data type - saving 2 bytes per each task instance
-
- 2015-11-23 - bug fix: incorrect calculation of next task invocation in case callback changed the interval
-
2015-11-23 - bug fix:
Task::set()
method callssetInterval()
explicitly, therefore delaying the task in the same manner
-
-
2015-11-15 - bug fix: Task alignment with
millis()
for scheduling purposes should be done afterOnEnable
, not before. Especially sinceOnEnable
method can change the interval
-
2015-11-15 - bug fix: Task alignment with
-
-
2015-11-05 - support for task activation on a status request with arbitrary interval and number of iterations (
0
and1
are still default values) -
2015-11-05 - implement
waitForDelayed()
method to allow task activation on the status request completion delayed for one current interval -
2015-11-09 - added callback methods prototypes to all examples for
Arduino IDE 1.6.6
compatibility -
2015-11-14 - added several constants to be used as task parameters for readability (e.g,
TASK_FOREVER
,TASK_SECOND
, etc.) -
2015-11-14 - significant optimization of the scheduler's execute loop, including
millis()
rollover fix option
-
2015-11-05 - support for task activation on a status request with arbitrary interval and number of iterations (
-
- 2015-10-27 - implement Local Task Storage Pointer (allow use of same callback code for different tasks)
-
2015-10-27 - bug:
currentTask()
method returns incorrect Task reference if called withinOnEnable
andOnDisable
methods -
2015-10-27 - protection against infinite loop in
OnEnable
(ifenable()
methods are called withinOnEnable
) -
2015-10-29 - new
currentLts()
method in the scheduler class returns current task's LTS pointer in one call
-
- 2015-10-22 - implement Task id and control points to support identification of failure points for watchdog timer logging
-
- 2015-10-13 - support for status request objects allowing tasks waiting on requests
- 2015-10-13 - moved to a single header file to allow compilation control via #defines from the main sketch
-
- 2015-10-08 - introduced callback run counter - callback functions can branch on the iteration number.
-
2015-10-11 -
enableIfNot()
- enable a task only if it is not already enabled. Returns true if was already enabled, false if was disabled. -
2015-10-11 -
disable()
returns previous enable state (true if was enabled, false if was already disabled) - 2015-10-11 - introduced callback functions "on enable" and "on disable". On enable runs every time enable is called, on disable runs only if task was enabled
-
2015-10-12 - new Task method:
forceNextIteration()
- makes next iteration happen immediately during the next pass regardless how much time is left
-
- 2015-09-22 - revert back to having all tasks disable on last iteration.
-
2015-09-22 - deprecated
disableOnLastIteration
method as a result - 2015-10-01 - made version numbers semver compliant (documentation only)
-
-
2015-09-21 - bug fix: incorrect handling of active tasks via
set()
andsetIterations()
. Thanks to Hannes Morgenstern for catching this one
-
2015-09-21 - bug fix: incorrect handling of active tasks via
-
- 2015-09-20 - access to currently executing task (for callback functions)
- 2015-09-20 - pass scheduler as a parameter to the task constructor to append the task to the end of the chain
- 2015-09-20 - option to create a task already enabled
-
-
2015-09-15 - more careful placement of AVR-specific includes for sleep functions (compatibility with DUE) sleep on idle run is no longer a default and should be explicitly compiled with
_TASK_SLEEP_ON_IDLE_RUN
defined
-
2015-09-15 - more careful placement of AVR-specific includes for sleep functions (compatibility with DUE) sleep on idle run is no longer a default and should be explicitly compiled with
-
- 2015-02-24 - Initial release
-
2015-02-28 - added
delay()
anddisableOnLastIteration()
functions -
2015-03-25 - changed scheduler
execute()
function for a more precise delay calculation:- Do not delay if any of the tasks ran (making request for immediate execution redundant)
- Delay is invoked only if none of the tasks ran
- Delay is based on the min anticipated wait until next task
_AND_
the runtime of execute function itself.
-
2015-05-11 - added
restart()
andrestartDelayed()
functions to restart tasks which are on hold after running all iterations -
2015-05-19 - completely removed delay from the scheduler since there are no power saving there. using
1
ms sleep instead