-
Notifications
You must be signed in to change notification settings - Fork 243
Home
Big Thank you for Doanh Văn Lương (aka tarzan115) for creating this wiki based on my documentation!
I always wanted to do it, and always did not find the time.
This unsolicited help is greatly appreciated!
Cooperative multitasking for Arduino microcontrollers
Version 2.6.0: 2018-02-07
Documentation in PDF format is always available here.
A lightweight implementation of cooperative multitasking (task scheduling) supporting:
- Periodic task execution, with dynamic execution period in
milliseconds
(default) ormicroseconds
(if explicitly enabled) – frequency of execution - Number of iterations (limited or infinite number of iterations)
- Execution of tasks in predefined sequence
- Dynamic change of task execution parameters (frequency, number of iterations, callback methods)
- Power saving via entering IDLE sleep mode when tasks are not scheduled to run
- Support for event-driven task invocation via Status Request object
- Support for task IDs and Control Points for error handling and watchdog timer
- Support for Local Task Storage pointer (allowing use of same callback code for multiple tasks)
- Support for layered task prioritization
- Support for
std::functions
(ESP8266
only) - Support for overall task timeouts
Scheduling overhead: between 15
and 18
microseconds per scheduling pass (Arduino UNO rev 3 @ 16MHz
clock, single scheduler w/o prioritization)
Memory requirements: 46 bytes (plain vanilla), 57 bytes (IDLE sleep, WDT and LTS pointer support). Other options have similar memory footprints.
TaskScheduler was tested on the following platforms:
- Arduino Uno R3
- Arduino Nano
- Arduino Micro
- ATtiny85
- ESP8266 (Node MCU v2.0)
- ESP32
- Teensy (tested on Teensy 3.5)
Version | Version 1 | Version 2 |
---|---|---|
1.9.2 | 2.6.0 (current version) | |
1.9.0 | 2.5.2 | |
1.8.5 | 2.5.1 | |
1.8.4 | 2.5.0 | |
1.8.3 | 2.4.0 | |
1.8.2 | 2.3.0 | |
1.8.1 | 2.2.1 | |
1.8.0 | 2.2.0 | |
1.7.0 | 2.1.0 | |
1.6.0 | 2.0.1 | |
1.5.1 | 2.0.0 | |
1.5.0 | ||
1.4.1 | ||
1.0.0 |
-
Implementation scenarios and ideas
1. Event driven programming
2. "Native" support for finite state machine
3. Multiple possible callbacks for task
4. Interrupt-driven execution support
5. UsingonEnable
andonDisable
methods
6. Using status request objects
7. Using local task storage pointer
8. Enabling task prioritization -
Futher information
Please refer to examples, provided withTaskScheduler
package for further information and implementation options.Real time examples of
TaskScheduler
are available here: