Skip to content

Latest Updates

Anatoli Arkhipenko edited this page Jun 18, 2024 · 72 revisions

June 17, 2024

Version 3.8.5 released

Changes:

  • updated volatile compound statements after C++20 deprecated compound assignment on volatiles
  • all updates from 3.7.0 to 3.8.5

January 13, 2024

Version 3.8.4 pushed into testing branch.

Changes:

  • 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()

September 29, 2023

Version 3.8.3 pushed into testing branch.

Changes:

  • feature: _TASK_TICKLESS - different approach to support tickless execution under FreeRTOS (fully backwards compatible with 3.7.x). See example 28

Tickless support could be enabled under PlatformIO using arduino and espidf frameworks simultaneously

September 27, 2023

Version 3.8.2 pushed into testing branch.

Changes:

  • feature: added setIntervalNodelay() method to dynamically adjust current interval
  • bug: conditional compile options missing from *.hpp files (Adafruit support)
  • feature: _TASK_TICKLESS - support for tickless execution under FreeRTOS
  • feature: _TASK_DO_NOT_YIELD - ability to disable yield() in execute() method

October 10, 2022

Version 3.7.0 pushed into main branch.

October 10, 2022

Version 3.7.0 pushed into testing branch.

Changes:

  • 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).

October 4, 2022

Version 3.6.2 pushed into testing branch.

Changes:

  • 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)

June 28, 2022

Version 3.6.1 pushed into testing branch.

Changes:

  • bug fix: Internal Status Request object completes with TASK_SR_CANCEL status if the task was canceled.
  • bug fix: Internal Status Request object completes with TASK_SR_ABORT status if the task was aborted.
  • feature: Status Requests with TASK_SR_ABORT status also abort dependent tasks

December 17, 2021

Version 3.6.0 pushed into main branch.

Changes:

  • this push includes versions 3.5.0 and 3.6.0 (described below).

December 17, 2021

Version 3.6.0 pushed into testing branch.

Changes:

  • 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.

November 8, 2021

Version 3.5.0 pushed into testing branch.

Changes:

  • feature: added adjust method to Task object. adjust(int32_t delta) moves the entire schedule forward (positive delta) or backward (negative delta) 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.

September 24, 2021

Version 3.4.0 pushed into master branch.

Changes:

  • feature: added enable, disable, pause and resume methods to Scheduler object. enable/disable completely stops scheduling of the tasks on this priority level and immediately returns from execute method without evaluating idle sleep condition. pause/resume stop execution of callback methods (and StatusRequest objects), but still evaluates sleep conditions and puts microcontroller to sleep if this feature is enabled.
  • feature: added ability to provide external_millis and external_micros methods for alternative time calculations (in case native millis roll over too fast, or some other reason)

July 27, 2021

Version 3.4.0 pushed into testing branch.

Changes:

  • feature: added enable, disable, pause and resume methods to Scheduler object. enable/disable completely stops scheduling of the tasks on this priority level and immediately returns from execute method without evaluating idle sleep condition. pause/resume stop execution of callback methods (and StatusRequest objects), but still evaluates sleep conditions and puts microcontroller to sleep if this feature is enabled.
  • feature: added ability to provide external_millis and external_micros methods for alternative time calculations (in case native millis roll over too fast, or some other reason)

May 27, 2021

Version 3.3.0 pushed into master branch.

Changes:

  • feature: added Timeout methods for StatusRequest objects.

May 13, 2021

Version 3.3.0 pushed into testing branch.

Changes:

  • feature: added Timeout methods for StatusRequest objects.

December 26, 2020

Version 3.2.2 pushed into master branch.

Changes:

  • feature: added method cancel() to Task class - execution of the task stops with setting a "canceled" flag.

NOTE: onDisable() is called after canceled flag is set.

  • feature: added method canceled() - check if task was canceled during onDisable() or other subsequent processing.
  • feature: added method abort() to Task class - execution of the task stops with setting a "canceled" flag.

NOTE: onDisable() is NOT called by the abort() method.

December 17, 2020

Version 3.2.2 pushed into testing branch.

Changes:

  • feature: added method cancel() to Task class - execution of the task stops with setting a "canceled" flag. NOTE: onDisable() is called after canceled flag is set.
  • feature: added method canceled() - check if task was canceled during onDisable() or other subsequent processing.

October 04, 2020

Version 3.2.1 pushed into testing branch.

Changes:

  • feature: added method abort() to Task class - execution of the task stops without calling OnDisable() method.

September 16, 2020

Commercial version 3.2.0 available from xs:code

Changes:

  • update: starting from September 16, 2020, a separate commercial version of TaskScheduler is available from xs:code

September 16, 2020

Version 3.2.0 pushed into master branch as a v3.2.0 release.

Changes:

  • 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

August 16, 2020

Version 3.2.0 pushed into testing branch.

Changes:

  • feature: scheduling options with priority for original schedule, original schedule without "catch-up", and interval (see Issue #103) for explanations.

July 07, 2020

Version 3.1.7 pushed into testing branch.

Changes:

  • warning fix: unused parameter 'aRecursive' (Issue #99)

May 14, 2020

Version 3.1.6 pushed into master branch.

Changes:

  • bug fix: deleteTask() and addTask() should check task ownership first (Issue #97).
  • feature: light sleep for ESP32 chip.

May 12, 2020

Version 3.1.6 pushed into testing branch.

Changes:

  • bug fix: deleteTask() and addTask() should check task ownership first (Issue #97).

May 8, 2020

Version 3.1.5 pushed into testing branch.

Changes:

  • feature: light sleep for ESP32 chip.

February 28, 2020

Version 3.1.4 released into master branch.

Changes:

  • bug fix: fixed compiler warnings about unused variables under certain compile options.
  • feature: _TASK_EXPOSE_CHAIN compile option giving access to task execution chain: Task* Scheduler::getFirstTask(), Task* Scheduler::getLastTask(), Task* Task::getPreviousTask(), and Task* Task::getNextTask()

January 17, 2020

Version 3.1.2 released into master branch.

Changes:

  • bug fix: corrected external forward definitions for millis() and micros().

January 9, 2020

Version 3.1.1 released into master branch.

Version 3.1.1 is a collection of updates from testing branch from version 3.0.0

January 9, 2020

Version 3.1.1 updated into testing branch.

Changes:

  • update: more precise CPU load measuring. Ability to define idle sleep threshold for ESP chips. Please see example #24.

January 7, 2020

Version 3.1.0 updated into testing branch.

Changes:

  • feature: added 4 CPU load monitoring methods for _TASK_TIMECRITICAL compilation option; Please see example #24. Issue #81

June 11, 2019

Version 3.0.3 updated into testing branch.

Changes:

  • feature: Custom idle sleep function support via TaskScheduler setSleepMethod method; Please see example #23. Also Idle Sleep support for MSP430 and MSP432 boards. PR #75

March 22, 2019

Version 3.0.2 updated into testing branch

Changes:

  • bug fixed: Example #19 uses appropriate freeMemory() method and properly deletes the tasks on STM32F1 boards (Tested on Mini USB STM32F103RCBT6 ARM Cortex-M3 leaflabs Leaf maple mini module).

January 04, 2019

ESP32 compatibility update

Due to the multi-core nature of ESP32, it is not recommended to use TaskScheduler on that chip. Pre-emptive multitasking between the cores breaks the cooperative paradigm of TaskScheduler leading to crashes and core dumps. I would recommend using FreeRTOS instead as it is supported by ESP32 natively. For more details see comment for Issue #41

November 15, 2018

Version 3.0 released

New features:

  • Dynamic Callback binding via compilation parameter _TASK_OO_CALLBACKS. See example #21 for details of how to program Tasks in a true Object Oriented way
  • Sketch template. Located here this sketch is available as a TaskScheduler example in the IDE to jump-start your Task-enabled project
  • Support for STM32 devices
  • Various bug fixes and tuning

November 14, 2018

Version 3.0.2 pushed into testing branch

Changes:

  • bug fixed: default constructor if ambiguous when compiled for Status Requests Issue #65
  • support for STM32F1 boards (IDLE sleep and examples). Tested on Mini USB STM32F103RCBT6 ARM Cortex-M3 leaflabs Leaf maple mini module F

November 09, 2018

Version 3.0.1 pushed into testing branch

Changes:

  • bug fixed: task deleted from the execution chain cannot be added back Issue #67
  • created a template sketch: a minimal TS-enabled code with all the compile parameters explained in the code.

March 15, 2018

Version 3.0.0 MAJOR RELEASE - pushed into testing branch

Version 3.0.0 is a major release which add significant new functionality to the TaskScheduler library. The main added feature is:

  • Support for dynamic callback methods binding via compilation parameter _TASK_OO_CALLBACKS

March 15, 2018

Version 2.6.1 pushed into master branch

Version 2.6.1 has been regression tested and pushed into the master branch. It should be picked up by Arduino IDE and available for an upgrade now. The main features are:

  • 2 small corner case bug fixes
  • Added example 19: dynamic task creation and destruction.
  • Added example 20: use of local task storage to work with task-specific class objects

Enjoy.

March 13, 2018

Version 2.6.1 pushed into testing branch

This iteration contains Example #20 which illustrated the use of task-specific class objects via local task storage functionality (LTS). Also, a corner-case bug was discovered and fixed: if low priority scheduler has an empty chain, high priority scheduler is executed. Fixed now. Example 20 is basically example 19 with random number of sensors using task-specific class object.

February 13, 2018

Version 2.6.1 pushed into testing branch

Version 2.6.1 fixes a bug that prevented tasks from correctly self-destructing inside the OnDisable method. Example 19 is provided illustrating the use of dynamically created and deleted Tasks.

February 7, 2018

Version 2.6.0 pushed into master branch

Version 2.6.0 has been regression tested and pushed into the master branch. It should be picked up by Arduino IDE and available for an upgrade now. The main features are:

  • Support for ESP32
  • Overall task timeout functionality
  • Support for "bare metal" compilation

Enjoy.

January 31, 2018

New example posted

New example that illustrated the use of several compilation directives has been posted. Example 18 is a rewrite of example 5 using TIMEOUT, LTS, WTD, and other directives. Please check out here.

January 30, 2018

Support for ESP32, bare metal compilation and overall Task timeouts

Multiple updates pushed for testing into "testing" branch:

  • Support for ESP32 (Pull Request #47)
  • Forward definitions of millis() and micros() for bare metal compilation (Pull Request #43)
  • Support for overall Task Timeouts. (please see example: here)

January 14, 2018

Writing TaskScheduler-friendly libraries

If you consider writing or changing a library to be TaskScheduler friendly, please consider reading this first.

January 10, 2018

Testing branch updates

Testing branch updated with 2.5.2 version introducing "bare metal" functionality: _TASK_BARE_METAL compilation directive added, which requires forward definition of arduino-specific methods, i.e.:

millis()
micros()
delay()

Pull Request #43

January 09, 2018

Testing branch updates

Testing branch updated with 2.5.1 version introducing _TASK_INLINE compilation directive. _TASK_INLINE compilation directive marks all methods of Task, Scheduler and StatusRequest object as inline. This was requested by a few people who use multi-tab and non-Arduino IDEs, or use TaskScheduler declarations inside other C++ classes.

Issue #42

Clone this wiki locally