From 35d61e6b51792e7b442162067e0d3e0cbb3d0204 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Sat, 19 Mar 2022 17:03:48 -0700 Subject: [PATCH 01/13] AutoBenchmark,USER_GUIDE.md: Update runtime latency numbers when profiling is enabled --- USER_GUIDE.md | 6 +++--- examples/AutoBenchmark/README.md | 10 +++++----- examples/AutoBenchmark/generate_readme.py | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 3ebbc2e..4108b8a 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -1459,13 +1459,13 @@ If the profiling feature is enabled, the The [AutoBenchmark](examples/AutoBenchmark) program shows that calling the profiler-enabled methods, `Coroutine::runCoroutineWithProfiler()` and -`CoroutineScheduler::loopWithProfiler(), increases latency by: +`CoroutineScheduler::loopWithProfiler()`, increases latency by: -* 3 - 3.2 micros on AVR +* 2.2 - 3.0 micros on AVR * 0.4 micros on STM32F1 * 0.2 - 0.3 micros on ESP8266 * 0.1 micros on ESP32 -* 0.033 - 0.166 micros on Teensy 3.2 +* 0.03 - 0.17 micros on Teensy 3.2 On 32-bit processors, the overhead seems neglegible. On 8-bit processors, the 3 microsecond of overhead might be an issue with sensitive applications. diff --git a/examples/AutoBenchmark/README.md b/examples/AutoBenchmark/README.md index c78a3f8..69475ff 100644 --- a/examples/AutoBenchmark/README.md +++ b/examples/AutoBenchmark/README.md @@ -124,11 +124,11 @@ $ make README.md * v1.5.0 * Add `CoroutineProfiler` to `CoroutineScheduler`. * `CoroutineScheduler::runCoroutine()` becomes slightly slower: - * 0.100 microseconds (AVR) - * 0.133 microseconds (STM32) - * 0.100 microseconds (ESP8266) - * 0.033 microseconds (ESP32) - * 0.133 microseconds (Teensy 3.2) + * 2.2-3 microseconds (AVR) + * 0.4 microseconds (STM32) + * 0.2-0.3 microseconds (ESP8266) + * 0.1 microseconds (ESP32) + * 0.03-0.17 microseconds (Teensy 3.2) ## Arduino Nano diff --git a/examples/AutoBenchmark/generate_readme.py b/examples/AutoBenchmark/generate_readme.py index 37d862b..a9464c8 100755 --- a/examples/AutoBenchmark/generate_readme.py +++ b/examples/AutoBenchmark/generate_readme.py @@ -148,11 +148,11 @@ * v1.5.0 * Add `CoroutineProfiler` to `CoroutineScheduler`. * `CoroutineScheduler::runCoroutine()` becomes slightly slower: - * 0.100 microseconds (AVR) - * 0.133 microseconds (STM32) - * 0.100 microseconds (ESP8266) - * 0.033 microseconds (ESP32) - * 0.133 microseconds (Teensy 3.2) + * 2.2-3 microseconds (AVR) + * 0.4 microseconds (STM32) + * 0.2-0.3 microseconds (ESP8266) + * 0.1 microseconds (ESP32) + * 0.03-0.17 microseconds (Teensy 3.2) ## Arduino Nano From b8a3260b1951a7268cbfccbe0f70f8c77b175388 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Sun, 20 Mar 2022 11:12:12 -0700 Subject: [PATCH 02/13] USER_GUIDE.md: Fix typos; add note LogBinProfiler saturates at 65535 --- USER_GUIDE.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 4108b8a..33cfb6f 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -1158,17 +1158,13 @@ memory is consumed. The static RAM usage does increase by 2 bytes (8-bits) and 4 bytes (32-bits) per coroutine. The following classes and API methods were added to support the profiling -feature. The `CoroutineProfiler` class is an interface that allows an object to -receive information about the execution time of the `Coroutine::runCoroutine()` -method: +feature. The `CoroutineProfiler` class is an interface whose +`updateElapsedMicros()` should be called with the execution time of the +`Coroutine::runCoroutine()` method: ```C++ class CoroutineProfiler { public: - /** - * Process the completion of the runCoroutine() method which took - * `micros` microseconds. - */ virtual void updateElapsedMicros(uint32_t micros) = 0; }; ``` @@ -1188,6 +1184,9 @@ class Coroutine { }; ``` +The `runCoroutineWithProfiler()` method calls `runCoroutine()`, measures the +elapsed time in microseconds, then calls the `profiler->updateElapsedMicros()`. + **Note**: When creating Coroutines with profiling enabled, it will probably be necessary to assign human-readable names to each coroutine for identification purposes. See [Coroutine Names](#CoroutineNames) for information on the @@ -1242,7 +1241,7 @@ COROUTINE(coroutine1) { ... } -COROUTINE(coroutine1) { +COROUTINE(coroutine2) { ... } @@ -1275,10 +1274,12 @@ COROUTINE(coroutine1) { ... } -COROUTINE(coroutine1) { +COROUTINE(coroutine2) { ... } +... + void setup() { ... LogBinProfiler::createProfilers(); @@ -1423,6 +1424,9 @@ this: } ``` +The `LogBinProfiler` uses a `uint16_t` counter, so the maximum value is +saturated to `65535`. + ### Profiler Resource Consumption From 1a3e2f6f69febed94ddcc0a7f67918a30fa64ca3 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Thu, 24 Mar 2022 10:13:45 -0700 Subject: [PATCH 03/13] USER_GUIDE.md: Add credit for Profiling feature to peufeu2 who proposed the idea in Discussion #50 --- USER_GUIDE.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 33cfb6f..8bba07b 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -1153,9 +1153,16 @@ about 14 bytes of flash per invocation. Version 1.5 added the ability to profile the execution time of `Coroutine::runCoroutine()` and render the information as a formatted table, or -as a JSON object. If the profiling feature is not used, no additional flash -memory is consumed. The static RAM usage does increase by 2 bytes (8-bits) and 4 -bytes (32-bits) per coroutine. +as a JSON object. (Thanks to peufeu2@ who proposed the idea and provided the +initial proof of concept in +[Discussion#50](https://github.com/bxparks/AceRoutine/discussions/50)). + +If the profiling feature is not used, no additional flash memory is consumed. +The static RAM usage does increase by 2 bytes (8-bits) and 4 bytes (32-bits) per +coroutine even if this feature is not used. The feature seemed useful enough to +accept this small increase in static memory size, because most applications will +not use more than 5-10 coroutines, and that translates into only 10-20 bytes of +additional static RAM usage on 8-bit processors. The following classes and API methods were added to support the profiling feature. The `CoroutineProfiler` class is an interface whose From 20280773956831addb7b30605cd2ee6f2886c2af Mon Sep 17 00:00:00 2001 From: Brian Park Date: Thu, 24 Mar 2022 10:18:06 -0700 Subject: [PATCH 04/13] USER_GUIDE.md: Tweak the valid interval expression for startBin and endBin --- USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 8bba07b..4c9942f 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -1399,7 +1399,7 @@ class LogBinJsonRenderer{ * The `printer` is usually the `Serial` object, but can be changed to something else if needed. -* The `startBin` (0-31) and `endBin` (0-32) identify the bins which should be +* The `startBin` [0-31] and `endBin` [0-32] identify the bins which should be printed. * A range of something like [2, 13) is useful to keep the width of the table reasonable. From 5638374f17e3897914155b5e2c044b7a0f150c07 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Fri, 25 Mar 2022 21:27:09 -0700 Subject: [PATCH 05/13] USER_GUIDE.md: Fix typo/grammar --- USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 4c9942f..74f6281 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -1201,7 +1201,7 @@ purposes. See [Coroutine Names](#CoroutineNames) for information on the methods. Each coroutine name will consume additional flash memory. Currently only a single implementation of `CoroutineProfiler` is provided, the -`LogBinProfiler`. It contains 32 bins of `uint16_t` which tracks the number of +`LogBinProfiler`. It contains 32 bins of `uint16_t` which track the number of times a `micros` was seen. The bins are logarithmically scaled, so that Bin 0 collects all events `<2us`, Bin 1 collects events `<4us`, Bin 2 collects events `<8us`, ..., Bin 30 collects events `<2147s`, and the last Bin 31 collects From 4aa05f5220725cdccda26dd4c1a0adb66b53ff59 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 2 Aug 2022 12:15:56 -0700 Subject: [PATCH 06/13] README.md: Fix Markdown typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d57389..89047a6 100644 --- a/README.md +++ b/README.md @@ -510,7 +510,7 @@ The development version can be installed by cloning the following git repos: You can copy these directories to the `./libraries` directory used by the Arduino IDE. (You should see 2 directories, named `./libraries/AceRoutine` and -`./libraries/AceCommon). Or you can create symlinks from `/.libraries` to these +`./libraries/AceCommon`). Or you can create symlinks from `/.libraries` to these directories. The `develop` branch contains the latest working version. From 069b7de01089bc3331daea10f10f35cd0c250535 Mon Sep 17 00:00:00 2001 From: Zach Wasserman Date: Wed, 17 Aug 2022 18:51:44 -0700 Subject: [PATCH 07/13] Add compatibility for Adafruit Circuit Playground Bluefruit (#53) * Add ACEROUTINE_SUPPRESS_UNTESTED_PLATFORM Allows suppressing the "untested platform" warning when using on a non-traditional platform, by defining the macro before importing AceRoutine. * Add compatibility for Circuit Playground Bluefruit * Update compat.h --- src/ace_routine/compat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ace_routine/compat.h b/src/ace_routine/compat.h index 7420034..b4c8b26 100644 --- a/src/ace_routine/compat.h +++ b/src/ace_routine/compat.h @@ -74,6 +74,10 @@ class __FlashStringHelper; #elif defined(EPOXY_DUINO) #include +#elif defined(ARDUINO_NRF52_ADAFRUIT) + #include + #define FPSTR(p) (reinterpret_cast(p)) + #else #warning Untested platform, AceRoutine may still work... From 48b156aec9134579598d2d5ba082a31707c8b61e Mon Sep 17 00:00:00 2001 From: Brian Park Date: Wed, 17 Aug 2022 19:05:08 -0700 Subject: [PATCH 08/13] README.md: Add Adafruit nRF52 to Tier 2 (should work) (#53) --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 89047a6..eaf8da0 100644 --- a/README.md +++ b/README.md @@ -880,12 +880,16 @@ These boards are tested on each release: **Tier 2: Should work** -These boards should work but I don't test them as often: +These boards should work, but they are not tested frequently by me, or I don't +own the specific hardware so they were tested by a community member: * ATtiny85 (8 MHz ATtiny85) * Arduino Pro Mini (16 MHz ATmega328P) * Mini Mega 2560 (Arduino Mega 2560 compatible, 16 MHz ATmega2560) * Teensy LC (48 MHz ARM Cortex-M0+) +* [Adafruit nRF52 Boards](https://github.com/adafruit/Adafruit_nRF52_Arduino) + * [Circuit Playground Bluefruit](https://www.adafruit.com/product/4333) + tested by a community member **Tier 3: May work, but not supported** @@ -924,6 +928,7 @@ This library was developed and tested using: * [ESP8266 Arduino 3.0.2](https://github.com/esp8266/Arduino) * [ESP32 Arduino 2.0.2](https://github.com/espressif/arduino-esp32) * [Teensyduino 1.56](https://www.pjrc.com/teensy/td_download.html) +* [Adafruit nRF52 1.3.0](https://github.com/adafruit/Adafruit_nRF52_Arduino) This library is *not* compatible with: From 0538569c86af53a82dbacd5b86f0c04ac065e410 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 20 Sep 2022 15:28:14 -0700 Subject: [PATCH 09/13] MemoryBenchmark: Regenerate after upgrading tool chain --- examples/MemoryBenchmark/README.md | 205 ++++++++++---------- examples/MemoryBenchmark/attiny.txt | 4 +- examples/MemoryBenchmark/esp32.txt | 56 +++--- examples/MemoryBenchmark/generate_readme.py | 33 ++-- examples/MemoryBenchmark/stm32.txt | 56 +++--- examples/MemoryBenchmark/teensy32.txt | 54 +++--- 6 files changed, 211 insertions(+), 197 deletions(-) diff --git a/examples/MemoryBenchmark/README.md b/examples/MemoryBenchmark/README.md index 7bf7d18..e90f718 100644 --- a/examples/MemoryBenchmark/README.md +++ b/examples/MemoryBenchmark/README.md @@ -12,9 +12,9 @@ by the runtime environment of the processor. For example, it often seems like the ESP8266 allocates flash memory in blocks of a certain quantity, so the calculated flash size can jump around in unexpected ways. -**NOTE**: This file was auto-generated using `make README.md`. DO NOT EDIT. +**DO NOT EDIT**: This file was auto-generated using `make README.md`. -**Version**: AceRoutine v1.5 +**Version**: AceRoutine v1.5.1 **Changes**: @@ -122,6 +122,13 @@ calculated flash size can jump around in unexpected ways. * Adds about 900 bytes of flash and ~20 bytes of RAM on AVR. * Adds about 1300 bytes of flash and ~0 bytes of RAM on ESP8266. +* v1.5.1 + * Upgrade tool chain + * Arduino CLI from 0.19.2 to 0.27.1 + * Arduino AVR Core from 1.8.4 to 1.8.5 + * STM32duino from 2.2.0 to 2.3.0 + * ESP32 Core from 2.0.2 to 2.0.5 + * Teensyduino from 1.56 to 1.57 ## How to Generate @@ -181,7 +188,7 @@ $ make README.md ### ATtiny85 * 8MHz ATtiny85 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * SpenceKonde/ATTinyCore 1.5.2 ``` @@ -224,8 +231,8 @@ $ make README.md | Scheduler, Two Coroutines, Profiler | 1582/ 133 | 556/ 52 | |---------------------------------------+--------------+-------------| | Scheduler, LogBinProfiler | 1512/ 181 | 486/ 100 | -| Scheduler, LogBinTableRenderer | 2876/ 193 | 1850/ 112 | -| Scheduler, LogBinJsonRenderer | 2410/ 197 | 1384/ 116 | +| Scheduler, LogBinTableRenderer | 2924/ 193 | 1898/ 112 | +| Scheduler, LogBinJsonRenderer | 2426/ 197 | 1400/ 116 | |---------------------------------------+--------------+-------------| | Blink Function | 1176/ 84 | 150/ 3 | | Blink Coroutine | 1330/ 107 | 304/ 26 | @@ -236,8 +243,8 @@ $ make README.md ### Arduino Nano * 16MHz ATmega328P -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Arduino AVR Boards 1.8.4 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Arduino AVR Boards 1.8.5 ``` +--------------------------------------------------------------------+ @@ -291,7 +298,7 @@ $ make README.md ### SparkFun Pro Micro * 16 MHz ATmega32U4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * SparkFun AVR Boards 1.1.13 ``` @@ -346,54 +353,54 @@ $ make README.md ### STM32 Blue Pill * STM32F103C8, 72 MHz ARM Cortex-M3 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* STM32duino 2.2.0 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* STM32duino 2.3.0 ``` +--------------------------------------------------------------------+ | functionality | flash/ ram | delta | |---------------------------------------+--------------+-------------| -| Baseline | 21932/ 3540 | 0/ 0 | +| Baseline | 21384/ 3556 | 0/ 0 | |---------------------------------------+--------------+-------------| -| One Delay Function | 21960/ 3544 | 28/ 4 | -| Two Delay Functions | 22008/ 3544 | 76/ 4 | +| One Delay Function | 21412/ 3560 | 28/ 4 | +| Two Delay Functions | 21460/ 3560 | 76/ 4 | |---------------------------------------+--------------+-------------| -| One Coroutine (millis) | 22064/ 3572 | 132/ 32 | -| Two Coroutines (millis) | 22212/ 3600 | 280/ 60 | +| One Coroutine (millis) | 21516/ 3588 | 132/ 32 | +| Two Coroutines (millis) | 21664/ 3616 | 280/ 60 | |---------------------------------------+--------------+-------------| -| One Coroutine (micros) | 22128/ 3572 | 196/ 32 | -| Two Coroutines (micros) | 22276/ 3600 | 344/ 60 | +| One Coroutine (micros) | 21592/ 3588 | 208/ 32 | +| Two Coroutines (micros) | 21740/ 3616 | 356/ 60 | |---------------------------------------+--------------+-------------| -| One Coroutine (seconds) | 22080/ 3572 | 148/ 32 | -| Two Coroutines (seconds) | 22244/ 3600 | 312/ 60 | +| One Coroutine (seconds) | 21532/ 3588 | 148/ 32 | +| Two Coroutines (seconds) | 21696/ 3616 | 312/ 60 | |---------------------------------------+--------------+-------------| -| One Coroutine, Profiler | 22172/ 3572 | 240/ 32 | -| Two Coroutines, Profiler | 22328/ 3600 | 396/ 60 | +| One Coroutine, Profiler | 21636/ 3588 | 252/ 32 | +| Two Coroutines, Profiler | 21792/ 3616 | 408/ 60 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (millis) | 22132/ 3576 | 200/ 36 | -| Scheduler, Two Coroutines (millis) | 22236/ 3604 | 304/ 64 | +| Scheduler, One Coroutine (millis) | 21584/ 3592 | 200/ 36 | +| Scheduler, Two Coroutines (millis) | 21688/ 3620 | 304/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (micros) | 22196/ 3576 | 264/ 36 | -| Scheduler, Two Coroutines (micros) | 22300/ 3604 | 368/ 64 | +| Scheduler, One Coroutine (micros) | 21660/ 3592 | 276/ 36 | +| Scheduler, Two Coroutines (micros) | 21764/ 3620 | 380/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (seconds) | 22148/ 3576 | 216/ 36 | -| Scheduler, Two Coroutines (seconds) | 22268/ 3604 | 336/ 64 | +| Scheduler, One Coroutine (seconds) | 21600/ 3592 | 216/ 36 | +| Scheduler, Two Coroutines (seconds) | 21720/ 3620 | 336/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (setup) | 22152/ 3576 | 220/ 36 | -| Scheduler, Two Coroutines (setup) | 22284/ 3604 | 352/ 64 | +| Scheduler, One Coroutine (setup) | 21604/ 3592 | 220/ 36 | +| Scheduler, Two Coroutines (setup) | 21736/ 3620 | 352/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (man setup) | 22144/ 3576 | 212/ 36 | -| Scheduler, Two Coroutines (man setup) | 22276/ 3604 | 344/ 64 | +| Scheduler, One Coroutine (man setup) | 21596/ 3592 | 212/ 36 | +| Scheduler, Two Coroutines (man setup) | 21728/ 3620 | 344/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine, Profiler | 22232/ 3576 | 300/ 36 | -| Scheduler, Two Coroutines, Profiler | 22336/ 3604 | 404/ 64 | +| Scheduler, One Coroutine, Profiler | 21696/ 3592 | 312/ 36 | +| Scheduler, Two Coroutines, Profiler | 21800/ 3620 | 416/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, LogBinProfiler | 22368/ 3644 | 436/ 104 | -| Scheduler, LogBinTableRenderer | 23752/ 3644 | 1820/ 104 | -| Scheduler, LogBinJsonRenderer | 23212/ 3644 | 1280/ 104 | +| Scheduler, LogBinProfiler | 21832/ 3660 | 448/ 104 | +| Scheduler, LogBinTableRenderer | 23216/ 3660 | 1832/ 104 | +| Scheduler, LogBinJsonRenderer | 22676/ 3660 | 1292/ 104 | |---------------------------------------+--------------+-------------| -| Blink Function | 22168/ 3544 | 236/ 4 | -| Blink Coroutine | 22280/ 3572 | 348/ 32 | +| Blink Function | 21620/ 3560 | 236/ 4 | +| Blink Coroutine | 21732/ 3588 | 348/ 32 | +--------------------------------------------------------------------+ ``` @@ -401,7 +408,7 @@ $ make README.md ### ESP8266 * NodeMCU 1.0 clone, 80MHz ESP8266 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * ESP8266 Boards 3.0.2 ``` @@ -456,54 +463,54 @@ $ make README.md ### ESP32 * ESP32-01 Dev Board, 240 MHz Tensilica LX6 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* ESP32 Boards 2.0.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* ESP32 Boards 2.0.5 ``` +--------------------------------------------------------------------+ | functionality | flash/ ram | delta | |---------------------------------------+--------------+-------------| -| Baseline | 230413/16220 | 0/ 0 | +| Baseline | 241149/16384 | 0/ 0 | |---------------------------------------+--------------+-------------| -| One Delay Function | 230953/16260 | 540/ 40 | -| Two Delay Functions | 231025/16260 | 612/ 40 | +| One Delay Function | 241529/16384 | 380/ 0 | +| Two Delay Functions | 241601/16384 | 452/ 0 | |---------------------------------------+--------------+-------------| -| One Coroutine (millis) | 231065/16292 | 652/ 72 | -| Two Coroutines (millis) | 231237/16316 | 824/ 96 | +| One Coroutine (millis) | 241653/16416 | 504/ 32 | +| Two Coroutines (millis) | 241829/16440 | 680/ 56 | |---------------------------------------+--------------+-------------| -| One Coroutine (micros) | 231077/16292 | 664/ 72 | -| Two Coroutines (micros) | 231249/16316 | 836/ 96 | +| One Coroutine (micros) | 241665/16416 | 516/ 32 | +| Two Coroutines (micros) | 241841/16440 | 692/ 56 | |---------------------------------------+--------------+-------------| -| One Coroutine (seconds) | 231081/16292 | 668/ 72 | -| Two Coroutines (seconds) | 231269/16316 | 856/ 96 | +| One Coroutine (seconds) | 241669/16416 | 520/ 32 | +| Two Coroutines (seconds) | 241861/16440 | 712/ 56 | |---------------------------------------+--------------+-------------| -| One Coroutine, Profiler | 231117/16292 | 704/ 72 | -| Two Coroutines, Profiler | 231333/16316 | 920/ 96 | +| One Coroutine, Profiler | 241705/16416 | 556/ 32 | +| Two Coroutines, Profiler | 241925/16440 | 776/ 56 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (millis) | 231129/16292 | 716/ 72 | -| Scheduler, Two Coroutines (millis) | 231269/16324 | 856/ 104 | +| Scheduler, One Coroutine (millis) | 241713/16416 | 564/ 32 | +| Scheduler, Two Coroutines (millis) | 241857/16448 | 708/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (micros) | 231141/16292 | 728/ 72 | -| Scheduler, Two Coroutines (micros) | 231281/16324 | 868/ 104 | +| Scheduler, One Coroutine (micros) | 241725/16416 | 576/ 32 | +| Scheduler, Two Coroutines (micros) | 241869/16448 | 720/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (seconds) | 231145/16292 | 732/ 72 | -| Scheduler, Two Coroutines (seconds) | 231301/16324 | 888/ 104 | +| Scheduler, One Coroutine (seconds) | 241729/16416 | 580/ 32 | +| Scheduler, Two Coroutines (seconds) | 241889/16448 | 740/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (setup) | 231157/16292 | 744/ 72 | -| Scheduler, Two Coroutines (setup) | 231329/16324 | 916/ 104 | +| Scheduler, One Coroutine (setup) | 241741/16416 | 592/ 32 | +| Scheduler, Two Coroutines (setup) | 241917/16448 | 768/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (man setup) | 231145/16292 | 732/ 72 | -| Scheduler, Two Coroutines (man setup) | 231321/16324 | 908/ 104 | +| Scheduler, One Coroutine (man setup) | 241729/16416 | 580/ 32 | +| Scheduler, Two Coroutines (man setup) | 241909/16448 | 760/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine, Profiler | 231181/16292 | 768/ 72 | -| Scheduler, Two Coroutines, Profiler | 231321/16324 | 908/ 104 | +| Scheduler, One Coroutine, Profiler | 241765/16416 | 616/ 32 | +| Scheduler, Two Coroutines, Profiler | 241909/16448 | 760/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, LogBinProfiler | 231321/16364 | 908/ 144 | -| Scheduler, LogBinTableRenderer | 232653/16364 | 2240/ 144 | -| Scheduler, LogBinJsonRenderer | 232101/16364 | 1688/ 144 | +| Scheduler, LogBinProfiler | 241913/16488 | 764/ 104 | +| Scheduler, LogBinTableRenderer | 243445/16488 | 2296/ 104 | +| Scheduler, LogBinJsonRenderer | 242893/16488 | 1744/ 104 | |---------------------------------------+--------------+-------------| -| Blink Function | 231301/16268 | 888/ 48 | -| Blink Coroutine | 231413/16300 | 1000/ 80 | +| Blink Function | 241757/16384 | 608/ 0 | +| Blink Coroutine | 241881/16416 | 732/ 32 | +--------------------------------------------------------------------+ ``` @@ -511,55 +518,55 @@ $ make README.md ### Teensy 3.2 * 96 MHz ARM Cortex-M4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Teensyduino 1.56 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Teensyduino 1.57 * Compiler options: "Faster" ``` +--------------------------------------------------------------------+ | functionality | flash/ ram | delta | |---------------------------------------+--------------+-------------| -| Baseline | 10648/ 4156 | 0/ 0 | +| Baseline | 10696/ 4156 | 0/ 0 | |---------------------------------------+--------------+-------------| -| One Delay Function | 10680/ 4160 | 32/ 4 | -| Two Delay Functions | 10708/ 4160 | 60/ 4 | +| One Delay Function | 10728/ 4160 | 32/ 4 | +| Two Delay Functions | 10756/ 4160 | 60/ 4 | |---------------------------------------+--------------+-------------| -| One Coroutine (millis) | 10804/ 4188 | 156/ 32 | -| Two Coroutines (millis) | 10924/ 4216 | 276/ 60 | +| One Coroutine (millis) | 10852/ 4188 | 156/ 32 | +| Two Coroutines (millis) | 10972/ 4216 | 276/ 60 | |---------------------------------------+--------------+-------------| -| One Coroutine (micros) | 10860/ 4188 | 212/ 32 | -| Two Coroutines (micros) | 10968/ 4216 | 320/ 60 | +| One Coroutine (micros) | 10908/ 4188 | 212/ 32 | +| Two Coroutines (micros) | 11016/ 4216 | 320/ 60 | |---------------------------------------+--------------+-------------| -| One Coroutine (seconds) | 10824/ 4188 | 176/ 32 | -| Two Coroutines (seconds) | 10964/ 4216 | 316/ 60 | +| One Coroutine (seconds) | 10872/ 4188 | 176/ 32 | +| Two Coroutines (seconds) | 11012/ 4216 | 316/ 60 | |---------------------------------------+--------------+-------------| -| One Coroutine, Profiler | 10904/ 4188 | 256/ 32 | -| Two Coroutines, Profiler | 11072/ 4216 | 424/ 60 | +| One Coroutine, Profiler | 10952/ 4188 | 256/ 32 | +| Two Coroutines, Profiler | 11120/ 4216 | 424/ 60 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (millis) | 10868/ 4192 | 220/ 36 | -| Scheduler, Two Coroutines (millis) | 10984/ 4220 | 336/ 64 | +| Scheduler, One Coroutine (millis) | 10920/ 4192 | 224/ 36 | +| Scheduler, Two Coroutines (millis) | 11036/ 4220 | 340/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (micros) | 10924/ 4192 | 276/ 36 | -| Scheduler, Two Coroutines (micros) | 11028/ 4220 | 380/ 64 | +| Scheduler, One Coroutine (micros) | 10976/ 4192 | 280/ 36 | +| Scheduler, Two Coroutines (micros) | 11080/ 4220 | 384/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (seconds) | 10888/ 4192 | 240/ 36 | -| Scheduler, Two Coroutines (seconds) | 11024/ 4220 | 376/ 64 | +| Scheduler, One Coroutine (seconds) | 10940/ 4192 | 244/ 36 | +| Scheduler, Two Coroutines (seconds) | 11076/ 4220 | 380/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (setup) | 10904/ 4192 | 256/ 36 | -| Scheduler, Two Coroutines (setup) | 11052/ 4220 | 404/ 64 | +| Scheduler, One Coroutine (setup) | 10956/ 4192 | 260/ 36 | +| Scheduler, Two Coroutines (setup) | 11104/ 4220 | 408/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine (man setup) | 10880/ 4192 | 232/ 36 | -| Scheduler, Two Coroutines (man setup) | 11032/ 4220 | 384/ 64 | +| Scheduler, One Coroutine (man setup) | 10932/ 4192 | 236/ 36 | +| Scheduler, Two Coroutines (man setup) | 11080/ 4220 | 384/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, One Coroutine, Profiler | 10976/ 4192 | 328/ 36 | -| Scheduler, Two Coroutines, Profiler | 11092/ 4220 | 444/ 64 | +| Scheduler, One Coroutine, Profiler | 11028/ 4192 | 332/ 36 | +| Scheduler, Two Coroutines, Profiler | 11144/ 4220 | 448/ 64 | |---------------------------------------+--------------+-------------| -| Scheduler, LogBinProfiler | 11396/ 4268 | 748/ 112 | -| Scheduler, LogBinTableRenderer | 14120/ 4284 | 3472/ 128 | -| Scheduler, LogBinJsonRenderer | 13476/ 4284 | 2828/ 128 | +| Scheduler, LogBinProfiler | 11444/ 4268 | 748/ 112 | +| Scheduler, LogBinTableRenderer | 14184/ 4284 | 3488/ 128 | +| Scheduler, LogBinJsonRenderer | 13476/ 4284 | 2780/ 128 | |---------------------------------------+--------------+-------------| -| Blink Function | 11104/ 4164 | 456/ 8 | -| Blink Coroutine | 11236/ 4188 | 588/ 32 | +| Blink Function | 11152/ 4164 | 456/ 8 | +| Blink Coroutine | 11284/ 4188 | 588/ 32 | +--------------------------------------------------------------------+ ``` diff --git a/examples/MemoryBenchmark/attiny.txt b/examples/MemoryBenchmark/attiny.txt index 363ddc9..ebdbde4 100644 --- a/examples/MemoryBenchmark/attiny.txt +++ b/examples/MemoryBenchmark/attiny.txt @@ -22,7 +22,7 @@ 21 1396 8192 109 512 22 1582 8192 133 512 23 1512 8192 181 512 -24 2876 8192 193 512 -25 2410 8192 197 512 +24 2924 8192 193 512 +25 2426 8192 197 512 26 1176 8192 84 512 27 1330 8192 107 512 diff --git a/examples/MemoryBenchmark/esp32.txt b/examples/MemoryBenchmark/esp32.txt index 87d83f4..48bc6dc 100644 --- a/examples/MemoryBenchmark/esp32.txt +++ b/examples/MemoryBenchmark/esp32.txt @@ -1,28 +1,28 @@ -0 230413 1310720 16220 327680 -1 230953 1310720 16260 327680 -2 231025 1310720 16260 327680 -3 231065 1310720 16292 327680 -4 231237 1310720 16316 327680 -5 231077 1310720 16292 327680 -6 231249 1310720 16316 327680 -7 231081 1310720 16292 327680 -8 231269 1310720 16316 327680 -9 231117 1310720 16292 327680 -10 231333 1310720 16316 327680 -11 231129 1310720 16292 327680 -12 231269 1310720 16324 327680 -13 231141 1310720 16292 327680 -14 231281 1310720 16324 327680 -15 231145 1310720 16292 327680 -16 231301 1310720 16324 327680 -17 231157 1310720 16292 327680 -18 231329 1310720 16324 327680 -19 231145 1310720 16292 327680 -20 231321 1310720 16324 327680 -21 231181 1310720 16292 327680 -22 231321 1310720 16324 327680 -23 231321 1310720 16364 327680 -24 232653 1310720 16364 327680 -25 232101 1310720 16364 327680 -26 231301 1310720 16268 327680 -27 231413 1310720 16300 327680 +0 241149 1310720 16384 327680 +1 241529 1310720 16384 327680 +2 241601 1310720 16384 327680 +3 241653 1310720 16416 327680 +4 241829 1310720 16440 327680 +5 241665 1310720 16416 327680 +6 241841 1310720 16440 327680 +7 241669 1310720 16416 327680 +8 241861 1310720 16440 327680 +9 241705 1310720 16416 327680 +10 241925 1310720 16440 327680 +11 241713 1310720 16416 327680 +12 241857 1310720 16448 327680 +13 241725 1310720 16416 327680 +14 241869 1310720 16448 327680 +15 241729 1310720 16416 327680 +16 241889 1310720 16448 327680 +17 241741 1310720 16416 327680 +18 241917 1310720 16448 327680 +19 241729 1310720 16416 327680 +20 241909 1310720 16448 327680 +21 241765 1310720 16416 327680 +22 241909 1310720 16448 327680 +23 241913 1310720 16488 327680 +24 243445 1310720 16488 327680 +25 242893 1310720 16488 327680 +26 241757 1310720 16384 327680 +27 241881 1310720 16416 327680 diff --git a/examples/MemoryBenchmark/generate_readme.py b/examples/MemoryBenchmark/generate_readme.py index f7d7d20..107a078 100755 --- a/examples/MemoryBenchmark/generate_readme.py +++ b/examples/MemoryBenchmark/generate_readme.py @@ -36,9 +36,9 @@ the ESP8266 allocates flash memory in blocks of a certain quantity, so the calculated flash size can jump around in unexpected ways. -**NOTE**: This file was auto-generated using `make README.md`. DO NOT EDIT. +**DO NOT EDIT**: This file was auto-generated using `make README.md`. -**Version**: AceRoutine v1.5 +**Version**: AceRoutine v1.5.1 **Changes**: @@ -146,6 +146,13 @@ * Adds about 900 bytes of flash and ~20 bytes of RAM on AVR. * Adds about 1300 bytes of flash and ~0 bytes of RAM on ESP8266. +* v1.5.1 + * Upgrade tool chain + * Arduino CLI from 0.19.2 to 0.27.1 + * Arduino AVR Core from 1.8.4 to 1.8.5 + * STM32duino from 2.2.0 to 2.3.0 + * ESP32 Core from 2.0.2 to 2.0.5 + * Teensyduino from 1.56 to 1.57 ## How to Generate @@ -205,7 +212,7 @@ ### ATtiny85 * 8MHz ATtiny85 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * SpenceKonde/ATTinyCore 1.5.2 ``` @@ -215,8 +222,8 @@ ### Arduino Nano * 16MHz ATmega328P -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Arduino AVR Boards 1.8.4 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Arduino AVR Boards 1.8.5 ``` {nano_results} @@ -225,7 +232,7 @@ ### SparkFun Pro Micro * 16 MHz ATmega32U4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * SparkFun AVR Boards 1.1.13 ``` @@ -235,8 +242,8 @@ ### STM32 Blue Pill * STM32F103C8, 72 MHz ARM Cortex-M3 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* STM32duino 2.2.0 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* STM32duino 2.3.0 ``` {stm32_results} @@ -245,7 +252,7 @@ ### ESP8266 * NodeMCU 1.0 clone, 80MHz ESP8266 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * ESP8266 Boards 3.0.2 ``` @@ -255,8 +262,8 @@ ### ESP32 * ESP32-01 Dev Board, 240 MHz Tensilica LX6 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* ESP32 Boards 2.0.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* ESP32 Boards 2.0.5 ``` {esp32_results} @@ -265,8 +272,8 @@ ### Teensy 3.2 * 96 MHz ARM Cortex-M4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Teensyduino 1.56 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Teensyduino 1.57 * Compiler options: "Faster" ``` diff --git a/examples/MemoryBenchmark/stm32.txt b/examples/MemoryBenchmark/stm32.txt index b4ada5d..4eb32f9 100644 --- a/examples/MemoryBenchmark/stm32.txt +++ b/examples/MemoryBenchmark/stm32.txt @@ -1,28 +1,28 @@ -0 21932 131072 3540 20480 -1 21960 131072 3544 20480 -2 22008 131072 3544 20480 -3 22064 131072 3572 20480 -4 22212 131072 3600 20480 -5 22128 131072 3572 20480 -6 22276 131072 3600 20480 -7 22080 131072 3572 20480 -8 22244 131072 3600 20480 -9 22172 131072 3572 20480 -10 22328 131072 3600 20480 -11 22132 131072 3576 20480 -12 22236 131072 3604 20480 -13 22196 131072 3576 20480 -14 22300 131072 3604 20480 -15 22148 131072 3576 20480 -16 22268 131072 3604 20480 -17 22152 131072 3576 20480 -18 22284 131072 3604 20480 -19 22144 131072 3576 20480 -20 22276 131072 3604 20480 -21 22232 131072 3576 20480 -22 22336 131072 3604 20480 -23 22368 131072 3644 20480 -24 23752 131072 3644 20480 -25 23212 131072 3644 20480 -26 22168 131072 3544 20480 -27 22280 131072 3572 20480 +0 21384 131072 3556 20480 +1 21412 131072 3560 20480 +2 21460 131072 3560 20480 +3 21516 131072 3588 20480 +4 21664 131072 3616 20480 +5 21592 131072 3588 20480 +6 21740 131072 3616 20480 +7 21532 131072 3588 20480 +8 21696 131072 3616 20480 +9 21636 131072 3588 20480 +10 21792 131072 3616 20480 +11 21584 131072 3592 20480 +12 21688 131072 3620 20480 +13 21660 131072 3592 20480 +14 21764 131072 3620 20480 +15 21600 131072 3592 20480 +16 21720 131072 3620 20480 +17 21604 131072 3592 20480 +18 21736 131072 3620 20480 +19 21596 131072 3592 20480 +20 21728 131072 3620 20480 +21 21696 131072 3592 20480 +22 21800 131072 3620 20480 +23 21832 131072 3660 20480 +24 23216 131072 3660 20480 +25 22676 131072 3660 20480 +26 21620 131072 3560 20480 +27 21732 131072 3588 20480 diff --git a/examples/MemoryBenchmark/teensy32.txt b/examples/MemoryBenchmark/teensy32.txt index 92024c4..a79e1ea 100644 --- a/examples/MemoryBenchmark/teensy32.txt +++ b/examples/MemoryBenchmark/teensy32.txt @@ -1,28 +1,28 @@ -0 10648 262144 4156 65536 -1 10680 262144 4160 65536 -2 10708 262144 4160 65536 -3 10804 262144 4188 65536 -4 10924 262144 4216 65536 -5 10860 262144 4188 65536 -6 10968 262144 4216 65536 -7 10824 262144 4188 65536 -8 10964 262144 4216 65536 -9 10904 262144 4188 65536 -10 11072 262144 4216 65536 -11 10868 262144 4192 65536 -12 10984 262144 4220 65536 -13 10924 262144 4192 65536 -14 11028 262144 4220 65536 -15 10888 262144 4192 65536 -16 11024 262144 4220 65536 -17 10904 262144 4192 65536 -18 11052 262144 4220 65536 -19 10880 262144 4192 65536 -20 11032 262144 4220 65536 -21 10976 262144 4192 65536 -22 11092 262144 4220 65536 -23 11396 262144 4268 65536 -24 14120 262144 4284 65536 +0 10696 262144 4156 65536 +1 10728 262144 4160 65536 +2 10756 262144 4160 65536 +3 10852 262144 4188 65536 +4 10972 262144 4216 65536 +5 10908 262144 4188 65536 +6 11016 262144 4216 65536 +7 10872 262144 4188 65536 +8 11012 262144 4216 65536 +9 10952 262144 4188 65536 +10 11120 262144 4216 65536 +11 10920 262144 4192 65536 +12 11036 262144 4220 65536 +13 10976 262144 4192 65536 +14 11080 262144 4220 65536 +15 10940 262144 4192 65536 +16 11076 262144 4220 65536 +17 10956 262144 4192 65536 +18 11104 262144 4220 65536 +19 10932 262144 4192 65536 +20 11080 262144 4220 65536 +21 11028 262144 4192 65536 +22 11144 262144 4220 65536 +23 11444 262144 4268 65536 +24 14184 262144 4284 65536 25 13476 262144 4284 65536 -26 11104 262144 4164 65536 -27 11236 262144 4188 65536 +26 11152 262144 4164 65536 +27 11284 262144 4188 65536 From 3168e437c907aab1a57a6446e63025d7791aa232 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 20 Sep 2022 15:47:29 -0700 Subject: [PATCH 10/13] AutoBenchmark: Regenerate after upgrading tool chain --- examples/AutoBenchmark/README.md | 58 ++++++++++++++--------- examples/AutoBenchmark/esp32.txt | 2 +- examples/AutoBenchmark/esp8266.txt | 2 +- examples/AutoBenchmark/generate_readme.py | 32 ++++++++----- examples/AutoBenchmark/micro.txt | 6 +-- examples/AutoBenchmark/stm32.txt | 7 ++- 6 files changed, 67 insertions(+), 40 deletions(-) diff --git a/examples/AutoBenchmark/README.md b/examples/AutoBenchmark/README.md index 69475ff..e794d07 100644 --- a/examples/AutoBenchmark/README.md +++ b/examples/AutoBenchmark/README.md @@ -14,10 +14,10 @@ is the overhead caused by the `Coroutine` context switch. All times in below are in microseconds. -**Version**: AceRoutine v1.5.0 - **DO NOT EDIT**: This file was auto-generated using `make README.md`. +**Version**: AceRoutine v1.5.1 + ## Dependencies This program depends on the following libraries: @@ -130,11 +130,19 @@ $ make README.md * 0.1 microseconds (ESP32) * 0.03-0.17 microseconds (Teensy 3.2) +* v1.5.1 + * Upgrade tool chain + * Arduino CLI from 0.19.2 to 0.27.1 + * Arduino AVR Core from 1.8.4 to 1.8.5 + * STM32duino from 2.2.0 to 2.3.0 + * ESP32 Core from 2.0.2 to 2.0.5 + * Teensyduino from 1.56 to 1.57 + ## Arduino Nano * 16MHz ATmega328P -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Arduino AVR Boards 1.8.4 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Arduino AVR Boards 1.8.5 * `micros()` has a resolution of 4 microseconds ``` @@ -164,7 +172,7 @@ CPU: ## SparkFun Pro Micro * 16 MHz ATmega32U4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * SparkFun AVR Boards 1.1.13 * `micros()` has a resolution of 4 microseconds @@ -183,11 +191,11 @@ CPU: |---------------------------------+--------+-------------+--------| | EmptyLoop | 10000 | 1.700 | 0.000 | |---------------------------------+--------+-------------+--------| -| DirectScheduling | 10000 | 2.800 | 1.100 | -| DirectSchedulingWithProfiler | 10000 | 5.800 | 4.100 | +| DirectScheduling | 10000 | 2.900 | 1.200 | +| DirectSchedulingWithProfiler | 10000 | 5.700 | 4.000 | |---------------------------------+--------+-------------+--------| | CoroutineScheduling | 10000 | 7.100 | 5.400 | -| CoroutineSchedulingWithProfiler | 10000 | 9.400 | 7.700 | +| CoroutineSchedulingWithProfiler | 10000 | 9.300 | 7.600 | +---------------------------------+--------+-------------+--------+ ``` @@ -195,11 +203,17 @@ CPU: ## STM32 * STM32 "Blue Pill", STM32F103C8, 72 MHz ARM Cortex-M3 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* STM32duino 2.2.0 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* STM32duino 2.3.0 ``` Sizes of Objects: +sizeof(Coroutine): 28 +sizeof(CoroutineScheduler): 4 +sizeof(Channel): 12 +sizeof(LogBinProfiler): 68 +sizeof(LogBinTableRenderer): 1 +sizeof(LogBinJsonRenderer): 1 CPU: +---------------------------------+--------+-------------+--------+ @@ -210,7 +224,7 @@ CPU: | DirectScheduling | 30000 | 0.533 | 0.367 | | DirectSchedulingWithProfiler | 30000 | 0.933 | 0.767 | |---------------------------------+--------+-------------+--------| -| CoroutineScheduling | 30000 | 1.066 | 0.900 | +| CoroutineScheduling | 30000 | 1.100 | 0.934 | | CoroutineSchedulingWithProfiler | 30000 | 1.466 | 1.300 | +---------------------------------+--------+-------------+--------+ @@ -219,7 +233,7 @@ CPU: ## ESP8266 * NodeMCU 1.0 clone, 80MHz ESP8266 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * ESP8266 Boards 3.0.2 ``` @@ -235,13 +249,13 @@ CPU: +---------------------------------+--------+-------------+--------+ | Functionality | iters | micros/iter | diff | |---------------------------------+--------+-------------+--------| -| EmptyLoop | 10000 | 0.100 | 0.000 | +| EmptyLoop | 10000 | 0.200 | 0.000 | |---------------------------------+--------+-------------+--------| -| DirectScheduling | 10000 | 0.500 | 0.400 | -| DirectSchedulingWithProfiler | 10000 | 0.800 | 0.700 | +| DirectScheduling | 10000 | 0.500 | 0.300 | +| DirectSchedulingWithProfiler | 10000 | 0.800 | 0.600 | |---------------------------------+--------+-------------+--------| -| CoroutineScheduling | 10000 | 0.900 | 0.800 | -| CoroutineSchedulingWithProfiler | 10000 | 1.100 | 1.000 | +| CoroutineScheduling | 10000 | 0.900 | 0.700 | +| CoroutineSchedulingWithProfiler | 10000 | 1.100 | 0.900 | +---------------------------------+--------+-------------+--------+ ``` @@ -249,8 +263,8 @@ CPU: ## ESP32 * ESP32-01 Dev Board, 240 MHz Tensilica LX6 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* ESP32 Boards 2.0.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* ESP32 Boards 2.0.5 ``` Sizes of Objects: @@ -267,7 +281,7 @@ CPU: |---------------------------------+--------+-------------+--------| | EmptyLoop | 30000 | 0.033 | 0.000 | |---------------------------------+--------+-------------+--------| -| DirectScheduling | 30000 | 0.133 | 0.100 | +| DirectScheduling | 30000 | 0.100 | 0.067 | | DirectSchedulingWithProfiler | 30000 | 0.233 | 0.200 | |---------------------------------+--------+-------------+--------| | CoroutineScheduling | 30000 | 0.333 | 0.300 | @@ -279,8 +293,8 @@ CPU: ## Teensy 3.2 * 96 MHz ARM Cortex-M4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Teensyduino 1.56 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Teensyduino 1.57 * Compiler options: "Faster" ``` diff --git a/examples/AutoBenchmark/esp32.txt b/examples/AutoBenchmark/esp32.txt index 8962292..f289e3e 100644 --- a/examples/AutoBenchmark/esp32.txt +++ b/examples/AutoBenchmark/esp32.txt @@ -7,7 +7,7 @@ sizeof(LogBinTableRenderer): 1 sizeof(LogBinJsonRenderer): 1 BENCHMARKS EmptyLoop 0.033 30000 -DirectScheduling 0.133 30000 +DirectScheduling 0.100 30000 DirectSchedulingWithProfiler 0.233 30000 CoroutineScheduling 0.333 30000 CoroutineSchedulingWithProfiler 0.433 30000 diff --git a/examples/AutoBenchmark/esp8266.txt b/examples/AutoBenchmark/esp8266.txt index b095164..6e7de87 100644 --- a/examples/AutoBenchmark/esp8266.txt +++ b/examples/AutoBenchmark/esp8266.txt @@ -6,7 +6,7 @@ sizeof(LogBinProfiler): 68 sizeof(LogBinTableRenderer): 1 sizeof(LogBinJsonRenderer): 1 BENCHMARKS -EmptyLoop 0.100 10000 +EmptyLoop 0.200 10000 DirectScheduling 0.500 10000 DirectSchedulingWithProfiler 0.800 10000 CoroutineScheduling 0.900 10000 diff --git a/examples/AutoBenchmark/generate_readme.py b/examples/AutoBenchmark/generate_readme.py index a9464c8..686ee1d 100755 --- a/examples/AutoBenchmark/generate_readme.py +++ b/examples/AutoBenchmark/generate_readme.py @@ -38,10 +38,10 @@ All times in below are in microseconds. -**Version**: AceRoutine v1.5.0 - **DO NOT EDIT**: This file was auto-generated using `make README.md`. +**Version**: AceRoutine v1.5.1 + ## Dependencies This program depends on the following libraries: @@ -154,11 +154,19 @@ * 0.1 microseconds (ESP32) * 0.03-0.17 microseconds (Teensy 3.2) +* v1.5.1 + * Upgrade tool chain + * Arduino CLI from 0.19.2 to 0.27.1 + * Arduino AVR Core from 1.8.4 to 1.8.5 + * STM32duino from 2.2.0 to 2.3.0 + * ESP32 Core from 2.0.2 to 2.0.5 + * Teensyduino from 1.56 to 1.57 + ## Arduino Nano * 16MHz ATmega328P -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Arduino AVR Boards 1.8.4 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Arduino AVR Boards 1.8.5 * `micros()` has a resolution of 4 microseconds ``` @@ -168,7 +176,7 @@ ## SparkFun Pro Micro * 16 MHz ATmega32U4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * SparkFun AVR Boards 1.1.13 * `micros()` has a resolution of 4 microseconds @@ -179,8 +187,8 @@ ## STM32 * STM32 "Blue Pill", STM32F103C8, 72 MHz ARM Cortex-M3 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* STM32duino 2.2.0 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* STM32duino 2.3.0 ``` {stm32_results} @@ -189,7 +197,7 @@ ## ESP8266 * NodeMCU 1.0 clone, 80MHz ESP8266 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 * ESP8266 Boards 3.0.2 ``` @@ -199,8 +207,8 @@ ## ESP32 * ESP32-01 Dev Board, 240 MHz Tensilica LX6 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* ESP32 Boards 2.0.2 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* ESP32 Boards 2.0.5 ``` {esp32_results} @@ -209,8 +217,8 @@ ## Teensy 3.2 * 96 MHz ARM Cortex-M4 -* Arduino IDE 1.8.19, Arduino CLI 0.19.2 -* Teensyduino 1.56 +* Arduino IDE 1.8.19, Arduino CLI 0.27.1 +* Teensyduino 1.57 * Compiler options: "Faster" ``` diff --git a/examples/AutoBenchmark/micro.txt b/examples/AutoBenchmark/micro.txt index 6584918..00d343e 100644 --- a/examples/AutoBenchmark/micro.txt +++ b/examples/AutoBenchmark/micro.txt @@ -7,8 +7,8 @@ sizeof(LogBinTableRenderer): 1 sizeof(LogBinJsonRenderer): 1 BENCHMARKS EmptyLoop 1.700 10000 -DirectScheduling 2.800 10000 -DirectSchedulingWithProfiler 5.800 10000 +DirectScheduling 2.900 10000 +DirectSchedulingWithProfiler 5.700 10000 CoroutineScheduling 7.100 10000 -CoroutineSchedulingWithProfiler 9.400 10000 +CoroutineSchedulingWithProfiler 9.300 10000 END diff --git a/examples/AutoBenchmark/stm32.txt b/examples/AutoBenchmark/stm32.txt index a50013e..2cfa5c2 100644 --- a/examples/AutoBenchmark/stm32.txt +++ b/examples/AutoBenchmark/stm32.txt @@ -1,9 +1,14 @@ +SIZEOF +sizeof(Coroutine): 28 +sizeof(CoroutineScheduler): 4 +sizeof(Channel): 12 +sizeof(LogBinProfiler): 68 sizeof(LogBinTableRenderer): 1 sizeof(LogBinJsonRenderer): 1 BENCHMARKS EmptyLoop 0.166 30000 DirectScheduling 0.533 30000 DirectSchedulingWithProfiler 0.933 30000 -CoroutineScheduling 1.066 30000 +CoroutineScheduling 1.100 30000 CoroutineSchedulingWithProfiler 1.466 30000 END From c267ffcca140bbbdcacf8dc7419af3761faa8eed Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 20 Sep 2022 15:54:17 -0700 Subject: [PATCH 11/13] Bump version to 1.5.1 --- CHANGELOG.md | 9 +++++++++ README.md | 22 +++++++++++----------- USER_GUIDE.md | 2 +- docs/doxygen.cfg | 2 +- library.properties | 2 +- src/AceRoutine.h | 4 ++-- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a69c15..d5453b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Changelog * Unreleased +* 1.5.1 (2022-09-20) + * Add Adafruit nRF52 boards to "Tier 2" after validation by community + member. + * Upgrade tool chain + * Arduino CLI from 0.19.2 to 0.27.1 + * Arduino AVR Core from 1.8.4 to 1.8.5 + * STM32duino from 2.2.0 to 2.3.0 + * ESP32 Core from 2.0.2 to 2.0.5 + * Teensyduino from 1.56 to 1.57 * 1.5.0 (2022-03-19) * (Re)add support for human-readable coroutine names. * See [Coroutine Names](USER_GUIDE.md#CoroutineNames) in the diff --git a/README.md b/README.md index eaf8da0..79d35e1 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ AceRoutine is a self-contained library that works on any platform supporting the Arduino API (AVR, Teensy, ESP8266, ESP32, etc), and it provides a handful of additional macros that can reduce boilerplate code. -**Version**: 1.5.0 (2022-03-19) +**Version**: 1.5.1 (2022-09-20) **Changelog**: [CHANGELOG.md](CHANGELOG.md) @@ -834,13 +834,13 @@ Arduino Nano: +---------------------------------+--------+-------------+--------+ | Functionality | iters | micros/iter | diff | |---------------------------------+--------+-------------+--------| -| EmptyLoop | 10000 | 1.900 | 0.000 | +| EmptyLoop | 10000 | 1.700 | 0.000 | |---------------------------------+--------+-------------+--------| -| DirectScheduling | 10000 | 2.800 | 0.900 | -| DirectSchedulingWithProfiler | 10000 | 5.800 | 3.900 | +| DirectScheduling | 10000 | 2.900 | 1.200 | +| DirectSchedulingWithProfiler | 10000 | 5.700 | 4.000 | |---------------------------------+--------+-------------+--------| -| CoroutineScheduling | 10000 | 7.000 | 5.100 | -| CoroutineSchedulingWithProfiler | 10000 | 9.300 | 7.400 | +| CoroutineScheduling | 10000 | 7.100 | 5.400 | +| CoroutineSchedulingWithProfiler | 10000 | 9.300 | 7.600 | +---------------------------------+--------+-------------+--------+ ``` @@ -850,13 +850,13 @@ ESP8266: +---------------------------------+--------+-------------+--------+ | Functionality | iters | micros/iter | diff | |---------------------------------+--------+-------------+--------| -| EmptyLoop | 10000 | 0.100 | 0.000 | +| EmptyLoop | 10000 | 0.200 | 0.000 | |---------------------------------+--------+-------------+--------| -| DirectScheduling | 10000 | 0.500 | 0.400 | -| DirectSchedulingWithProfiler | 10000 | 0.800 | 0.700 | +| DirectScheduling | 10000 | 0.500 | 0.300 | +| DirectSchedulingWithProfiler | 10000 | 0.800 | 0.600 | |---------------------------------+--------+-------------+--------| -| CoroutineScheduling | 10000 | 0.900 | 0.800 | -| CoroutineSchedulingWithProfiler | 10000 | 1.100 | 1.000 | +| CoroutineScheduling | 10000 | 0.900 | 0.700 | +| CoroutineSchedulingWithProfiler | 10000 | 1.100 | 0.900 | +---------------------------------+--------+-------------+--------+ ``` diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 74f6281..0aa9e96 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -4,7 +4,7 @@ See the [README.md](README.md) for installation instructions and other background information. This document describes how to use the library once it is installed. -**Version**: 1.5.0 (2022-03-19) +**Version**: 1.5.1 (2022-09-20) ## Table of Contents diff --git a/docs/doxygen.cfg b/docs/doxygen.cfg index 1ced2eb..88f5083 100644 --- a/docs/doxygen.cfg +++ b/docs/doxygen.cfg @@ -38,7 +38,7 @@ PROJECT_NAME = "AceRoutine" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.5.0 +PROJECT_NUMBER = 1.5.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/library.properties b/library.properties index 14c5494..7b43911 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=AceRoutine -version=1.5.0 +version=1.5.1 author=Brian T. Park maintainer=Brian T. Park sentence=A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms. diff --git a/src/AceRoutine.h b/src/AceRoutine.h index 0ef39b4..7d04793 100644 --- a/src/AceRoutine.h +++ b/src/AceRoutine.h @@ -43,8 +43,8 @@ SOFTWARE. #endif // Version format: xxyyzz == "xx.yy.zz" -#define ACE_ROUTINE_VERSION 10500 -#define ACE_ROUTINE_VERSION_STRING "1.5.0" +#define ACE_ROUTINE_VERSION 10501 +#define ACE_ROUTINE_VERSION_STRING "1.5.1" #include "ace_routine/Coroutine.h" #include "ace_routine/CoroutineScheduler.h" From 5a2c86d5c6e1651e1bec2eecb2c7df94ecab2e72 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 20 Sep 2022 16:02:17 -0700 Subject: [PATCH 12/13] docs/doxygen.cfg: Upgrade doxygen to 1.9.1, and upgrade config file using doxygen -u --- docs/doxygen.cfg | 217 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 149 insertions(+), 68 deletions(-) diff --git a/docs/doxygen.cfg b/docs/doxygen.cfg index 88f5083..78704bc 100644 --- a/docs/doxygen.cfg +++ b/docs/doxygen.cfg @@ -1,4 +1,4 @@ -# Doxyfile 1.8.17 +# Doxyfile 1.9.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "AceRoutine" +PROJECT_NAME = AceRoutine # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version @@ -227,6 +227,14 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -263,12 +271,6 @@ TAB_SIZE = 4 ALIASES = -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -310,18 +312,21 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is -# Fortran), use: inc=Fortran f=C. +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = @@ -455,6 +460,19 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which efficively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -518,6 +536,13 @@ EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -555,11 +580,18 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# (including Cygwin) ands Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES @@ -798,7 +830,10 @@ WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -834,8 +869,8 @@ INPUT = ../src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 @@ -848,13 +883,15 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, +# *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.cc \ @@ -1112,16 +1149,22 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO +# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to +# YES then doxygen will add the directory of each input to the include path. +# The default value is: YES. + +CLANG_ADD_INC_PATHS = YES + # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories @@ -1131,10 +1174,13 @@ CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the -# path to the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files -# were built. This is equivalent to specifying the "-p" option to a clang tool, -# such as clang-check. These options will then be passed to the parser. +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. @@ -1151,13 +1197,6 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1328,10 +1367,11 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1373,8 +1413,8 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# (see: +# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1404,7 +1444,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1449,7 +1489,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1457,8 +1498,8 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1466,16 +1507,16 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @@ -1487,9 +1528,9 @@ QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1566,6 +1607,17 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1605,7 +1657,7 @@ USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. @@ -1621,7 +1673,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest @@ -1635,7 +1687,8 @@ MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1682,7 +1735,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1695,8 +1749,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1860,9 +1915,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2373,10 +2430,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2568,9 +2647,11 @@ DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc and +# plantuml temporary files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES From dddfd58fa59d9da401cdb29c656b98c1c5a08ec4 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 20 Sep 2022 16:02:40 -0700 Subject: [PATCH 13/13] docs: Regenerate doxygen --- docs/html/AceRoutine_8h_source.html | 18 +- docs/html/Channel_8h_source.html | 22 ++- docs/html/ClockInterface_8h_source.html | 18 +- docs/html/CoroutineProfiler_8h_source.html | 22 ++- docs/html/CoroutineScheduler_8h_source.html | 24 ++- docs/html/Coroutine_8cpp_source.html | 18 +- docs/html/Coroutine_8h.html | 53 +++--- docs/html/Coroutine_8h__dep__incl.map | 2 +- docs/html/Coroutine_8h__dep__incl.md5 | 2 +- docs/html/Coroutine_8h__incl.map | 4 +- docs/html/Coroutine_8h__incl.md5 | 2 +- docs/html/Coroutine_8h_source.html | 127 +++++++-------- docs/html/LogBinJsonRenderer_8h_source.html | 16 +- docs/html/LogBinProfiler_8cpp_source.html | 12 +- docs/html/LogBinProfiler_8h_source.html | 26 ++- .../html/LogBinTableRenderer_8cpp_source.html | 12 +- docs/html/LogBinTableRenderer_8h_source.html | 20 +-- docs/html/annotated.html | 18 +- .../classace__routine_1_1Channel-members.html | 12 +- docs/html/classace__routine_1_1Channel.html | 12 +- ...ce__routine_1_1ClockInterface-members.html | 12 +- .../classace__routine_1_1ClockInterface.html | 12 +- ..._routine_1_1CoroutineProfiler-members.html | 12 +- ...lassace__routine_1_1CoroutineProfiler.html | 16 +- ...1_1CoroutineSchedulerTemplate-members.html | 12 +- ...routine_1_1CoroutineSchedulerTemplate.html | 14 +- ..._routine_1_1CoroutineTemplate-members.html | 12 +- ...lassace__routine_1_1CoroutineTemplate.html | 16 +- ...1_1LogBinJsonRendererTemplate-members.html | 12 +- ...routine_1_1LogBinJsonRendererTemplate.html | 12 +- ...ine_1_1LogBinProfilerTemplate-members.html | 12 +- ...ce__routine_1_1LogBinProfilerTemplate.html | 20 +-- ..._1LogBinTableRendererTemplate-members.html | 12 +- ...outine_1_1LogBinTableRendererTemplate.html | 12 +- docs/html/classes.html | 42 ++--- docs/html/compat_8h.html | 31 ++-- docs/html/compat_8h__dep__incl.map | 10 +- docs/html/compat_8h__dep__incl.md5 | 2 +- docs/html/compat_8h__dep__incl.png | Bin 62175 -> 61954 bytes docs/html/compat_8h__incl.map | 2 +- docs/html/compat_8h__incl.md5 | 2 +- docs/html/compat_8h_source.html | 39 ++--- docs/html/dir_000000_000001.html | 12 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 16 +- ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 | 2 +- .../dir_bbf1ec131ffa96b8d365d81f56025723.html | 14 +- docs/html/doxygen.css | 154 ++++++++++-------- docs/html/doxygen.png | Bin 3779 -> 0 bytes docs/html/doxygen.svg | 26 +++ docs/html/dynsections.js | 33 ++-- docs/html/files.html | 16 +- docs/html/functions.html | 14 +- docs/html/functions_func.html | 12 +- docs/html/functions_type.html | 12 +- docs/html/functions_vars.html | 12 +- docs/html/globals.html | 12 +- docs/html/globals_defs.html | 12 +- docs/html/graph_legend.html | 12 +- docs/html/hierarchy.html | 12 +- docs/html/index.html | 15 +- docs/html/inherits.html | 40 +++-- docs/html/menu.js | 37 +++-- docs/html/menudata.js | 32 ++-- docs/html/search/all_0.html | 19 ++- docs/html/search/all_1.html | 19 ++- docs/html/search/all_1.js | 41 ++--- docs/html/search/all_2.html | 19 ++- docs/html/search/all_2.js | 2 +- docs/html/search/all_3.html | 19 ++- docs/html/search/all_3.js | 6 +- docs/html/search/all_4.html | 19 ++- docs/html/search/all_4.js | 2 +- docs/html/search/all_5.html | 19 ++- docs/html/search/all_5.js | 20 +-- docs/html/search/all_6.html | 19 ++- docs/html/search/all_6.js | 20 +-- docs/html/search/all_7.html | 19 ++- docs/html/search/all_7.js | 18 +- docs/html/search/all_8.html | 19 ++- docs/html/search/all_8.js | 12 +- docs/html/search/all_9.html | 19 ++- docs/html/search/all_9.js | 22 +-- docs/html/search/all_a.html | 19 ++- docs/html/search/all_a.js | 6 +- docs/html/search/all_b.html | 19 ++- docs/html/search/all_b.js | 10 +- docs/html/search/all_c.html | 19 ++- docs/html/search/all_c.js | 38 ++--- docs/html/search/all_d.html | 19 ++- docs/html/search/all_d.js | 2 +- docs/html/search/all_e.html | 19 ++- docs/html/search/all_e.js | 2 +- docs/html/search/all_f.html | 19 ++- docs/html/search/all_f.js | 4 +- docs/html/search/classes_0.html | 19 ++- docs/html/search/classes_0.js | 10 +- docs/html/search/classes_1.html | 19 ++- docs/html/search/classes_1.js | 6 +- docs/html/search/close.png | Bin 273 -> 0 bytes docs/html/search/close.svg | 31 ++++ docs/html/search/defines_0.html | 19 ++- docs/html/search/defines_0.js | 2 +- docs/html/search/defines_1.html | 19 ++- docs/html/search/defines_1.js | 24 +-- docs/html/search/defines_2.html | 19 ++- docs/html/search/defines_2.js | 6 +- docs/html/search/defines_3.html | 19 ++- docs/html/search/defines_3.js | 2 +- docs/html/search/defines_4.html | 19 ++- docs/html/search/defines_4.js | 4 +- docs/html/search/files_0.html | 19 ++- docs/html/search/files_0.js | 4 +- docs/html/search/functions_0.html | 19 ++- docs/html/search/functions_0.js | 18 +- docs/html/search/functions_1.html | 19 ++- docs/html/search/functions_1.js | 2 +- docs/html/search/functions_2.html | 19 ++- docs/html/search/functions_2.js | 16 +- docs/html/search/functions_3.html | 19 ++- docs/html/search/functions_3.js | 20 +-- docs/html/search/functions_4.html | 19 ++- docs/html/search/functions_4.js | 8 +- docs/html/search/functions_5.html | 19 ++- docs/html/search/functions_5.js | 4 +- docs/html/search/functions_6.html | 19 ++- docs/html/search/functions_6.js | 4 +- docs/html/search/functions_7.html | 19 ++- docs/html/search/functions_7.js | 10 +- docs/html/search/functions_8.html | 19 ++- docs/html/search/functions_8.js | 36 ++-- docs/html/search/functions_9.html | 19 ++- docs/html/search/functions_9.js | 2 +- docs/html/search/functions_a.html | 19 ++- docs/html/search/functions_a.js | 2 +- docs/html/search/functions_b.html | 19 ++- docs/html/search/functions_b.js | 4 +- docs/html/search/mag_sel.png | Bin 465 -> 0 bytes docs/html/search/mag_sel.svg | 74 +++++++++ docs/html/search/nomatches.html | 3 +- docs/html/search/pages_0.html | 19 ++- docs/html/search/pages_0.js | 2 +- docs/html/search/search.css | 104 +++++------- docs/html/search/search.js | 52 +++--- docs/html/search/typedefs_0.html | 19 ++- docs/html/search/typedefs_0.js | 2 +- docs/html/search/typedefs_1.html | 19 ++- docs/html/search/typedefs_1.js | 2 +- docs/html/search/typedefs_2.html | 19 ++- docs/html/search/typedefs_2.js | 2 +- docs/html/search/variables_0.html | 19 ++- docs/html/search/variables_0.js | 18 +- docs/html/search/variables_1.html | 19 ++- docs/html/search/variables_1.js | 18 +- 153 files changed, 1543 insertions(+), 1201 deletions(-) delete mode 100644 docs/html/doxygen.png create mode 100644 docs/html/doxygen.svg delete mode 100644 docs/html/search/close.png create mode 100644 docs/html/search/close.svg delete mode 100644 docs/html/search/mag_sel.png create mode 100644 docs/html/search/mag_sel.svg diff --git a/docs/html/AceRoutine_8h_source.html b/docs/html/AceRoutine_8h_source.html index 8cc21cf..473c4ef 100644 --- a/docs/html/AceRoutine_8h_source.html +++ b/docs/html/AceRoutine_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/AceRoutine.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -105,8 +105,8 @@
43 #endif
44 
45 // Version format: xxyyzz == "xx.yy.zz"
-
46 #define ACE_ROUTINE_VERSION 10500
-
47 #define ACE_ROUTINE_VERSION_STRING "1.5.0"
+
46 #define ACE_ROUTINE_VERSION 10501
+
47 #define ACE_ROUTINE_VERSION_STRING "1.5.1"
48 
49 #include "ace_routine/Coroutine.h"
50 #include "ace_routine/CoroutineScheduler.h"
@@ -117,13 +117,11 @@
55 #include "ace_routine/LogBinJsonRenderer.h"
56 
57 #endif
+
All coroutines are instances of the Coroutine base class.
- diff --git a/docs/html/Channel_8h_source.html b/docs/html/Channel_8h_source.html index 7f69fed..cd4b3bd 100644 --- a/docs/html/Channel_8h_source.html +++ b/docs/html/Channel_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/Channel.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -169,19 +169,17 @@
139 }
140 
141 #endif
- -
bool write(const T &value)
Write the given value to the channel through the COROUTINE_AWAIT() if value is a static variable.
Definition: Channel.h:84
-
Channel()
Constructor.
Definition: Channel.h:46
-
void setValue(const T &value)
Used by COROUTINE_CHANNEL_WRITE() to preserve the value of the write across multiple COROUTINE_YIELD(...
Definition: Channel.h:53
+
All coroutines are instances of the Coroutine base class.
An unbuffered synchronized channel.
Definition: Channel.h:43
+
bool write(const T &value)
Write the given value to the channel through the COROUTINE_AWAIT() if value is a static variable.
Definition: Channel.h:84
bool read(T &value)
Read the value through the COROUTINE_AWAIT() macro or the COROUTINE_CHANNEL_READ() macro.
Definition: Channel.h:106
- +
void setValue(const T &value)
Used by COROUTINE_CHANNEL_WRITE() to preserve the value of the write across multiple COROUTINE_YIELD(...
Definition: Channel.h:53
bool write()
Same as write(constT& value) except use the value of setValue().
Definition: Channel.h:62
+
Channel()
Constructor.
Definition: Channel.h:46
+ diff --git a/docs/html/ClockInterface_8h_source.html b/docs/html/ClockInterface_8h_source.html index 353d93b..d9d060b 100644 --- a/docs/html/ClockInterface_8h_source.html +++ b/docs/html/ClockInterface_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/ClockInterface.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -115,16 +115,14 @@
66 }
67 
68 #endif
- -
static unsigned long millis()
Get the current millis.
-
static unsigned long seconds()
Get the current seconds.
A utility class (all methods are static) that provides a layer of indirection to Arduino clock functi...
+
static unsigned long seconds()
Get the current seconds.
static unsigned long micros()
Get the current micros.
+
static unsigned long millis()
Get the current millis.
+ diff --git a/docs/html/CoroutineProfiler_8h_source.html b/docs/html/CoroutineProfiler_8h_source.html index 64e2b0a..4b527cc 100644 --- a/docs/html/CoroutineProfiler_8h_source.html +++ b/docs/html/CoroutineProfiler_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/CoroutineProfiler.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -104,30 +104,28 @@
31 
37  public:
-
39  CoroutineProfiler() = default;
+
39  CoroutineProfiler() = default;
40 
64  #if defined(ARDUINO_ARCH_AVR)
65  ~CoroutineProfiler() = default;
66  #else
-
67  virtual ~CoroutineProfiler() = default;
+
67  virtual ~CoroutineProfiler() = default;
68  #endif
69 
-
74  virtual void updateElapsedMicros(uint32_t micros) = 0;
+
74  virtual void updateElapsedMicros(uint32_t micros) = 0;
75 };
76 
77 }
78 
79 #endif
- -
virtual void updateElapsedMicros(uint32_t micros)=0
Process the completion of the runCoroutine() method which took micros microseconds.
An interface class for profiling classes that can track the elapsed time consumed by Coroutine::runCo...
virtual ~CoroutineProfiler()=default
The destructor is NON-virtual on AVR processors because adding a virtual destructor causes flash cons...
+
virtual void updateElapsedMicros(uint32_t micros)=0
Process the completion of the runCoroutine() method which took micros microseconds.
CoroutineProfiler()=default
Use default constructor.
+ diff --git a/docs/html/CoroutineScheduler_8h_source.html b/docs/html/CoroutineScheduler_8h_source.html index 5b46b04..7074f2f 100644 --- a/docs/html/CoroutineScheduler_8h_source.html +++ b/docs/html/CoroutineScheduler_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/CoroutineScheduler.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -109,7 +109,7 @@
36 namespace ace_routine {
37 
81 template <typename T_COROUTINE>
-
82 class CoroutineSchedulerTemplate {
+
83  public:
85  static void setup() { getScheduler()->setupScheduler(); }
86 
@@ -256,19 +256,17 @@
264 }
265 
266 #endif
- -
static void loop()
Run the current coroutine using the current scheduler.
-
static void setupCoroutines()
Set up the coroutines by calling their setupCoroutine() methods.
+
All coroutines are instances of the Coroutine base class.
+
Class that manages instances of the Coroutine class, and executes them in a round-robin fashion.
static void loopWithProfiler()
Run the current coroutine using the current scheduler with the coroutine profiler enabled.
+
static void setupCoroutines()
Set up the coroutines by calling their setupCoroutine() methods.
+
static void loop()
Run the current coroutine using the current scheduler.
static void setup()
Set up the scheduler.
static void list(Print &printer)
Print out the known coroutines to the printer (usually Serial).
-
Class that manages instances of the Coroutine class, and executes them in a round-robin fashion.
Definition: Coroutine.h:274
- + diff --git a/docs/html/Coroutine_8cpp_source.html b/docs/html/Coroutine_8cpp_source.html index 10fd63e..a159ef5 100644 --- a/docs/html/Coroutine_8cpp_source.html +++ b/docs/html/Coroutine_8cpp_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/Coroutine.cpp Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -124,15 +124,13 @@
51 };
52 
53 }
+
All coroutines are instances of the Coroutine base class.
+
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+
#define FPSTR(p)
A macro that converts a const char* that already points to a PROGMEM string to a const __FlashStringH...
Definition: compat.h:91
-
#define FPSTR(p)
A macro that converts a const char* that already points to a PROGMEM string to a const __FlashStringH...
Definition: compat.h:87
- - diff --git a/docs/html/Coroutine_8h.html b/docs/html/Coroutine_8h.html index 46fa9d7..d1487f1 100644 --- a/docs/html/Coroutine_8h.html +++ b/docs/html/Coroutine_8h.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/Coroutine.h File Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -75,6 +75,9 @@
Coroutine.h File Reference
+ +

All coroutines are instances of the Coroutine base class. +More...

#include <stdint.h>
#include <Print.h>
#include <AceCommon.h>
@@ -84,15 +87,15 @@
Include dependency graph for Coroutine.h:
-
- - +
+ + - + @@ -100,9 +103,9 @@
This graph shows which files directly or indirectly include this file:
-
- - +
+ + @@ -119,9 +122,6 @@ - - - @@ -132,7 +132,7 @@ #define  - +

Classes

class  ace_routine::CoroutineSchedulerTemplate< T_COROUTINE >
 Class that manages instances of the Coroutine class, and executes them in a round-robin fashion. More...
 
class  ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY >
 Base class of all coroutines. More...
 
ACE_ROUTINE_DEPRECATED
 Macro that indicates a deprecation.
 
#define COROUTINE(...)   GET_COROUTINE(__VA_ARGS__, COROUTINE2, COROUTINE1)(__VA_ARGS__)
#define COROUTINE(...)    GET_COROUTINE(__VA_ARGS__, COROUTINE2, COROUTINE1)(__VA_ARGS__)
 Create a Coroutine instance named 'name'. More...
 
@@ -193,7 +193,8 @@
 

Detailed Description

-

All coroutines are instances of the Coroutine base class. The COROUTINE() macro creates these instances, and registers them to automatically run when CoroutineScheduler::loop() is called.

+

All coroutines are instances of the Coroutine base class.

+

The COROUTINE() macro creates these instances, and registers them to automatically run when CoroutineScheduler::loop() is called.

Various macros use macro overloading to implement a 1-argument and a 2-argument version. See https://stackoverflow.com/questions/11761703 to description of how that works.

The computed goto is a GCC extension: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html The noinline and noclone attributes make sure that label pointers are always the same. I'm not 100% sure they are needed here, but they don't seem to hurt.

@@ -210,7 +211,7 @@

  ...) -    GET_COROUTINE(__VA_ARGS__, COROUTINE2, COROUTINE1)(__VA_ARGS__) +     GET_COROUTINE(__VA_ARGS__, COROUTINE2, COROUTINE1)(__VA_ARGS__)

} \
int Coroutine_##name :: runCoroutine()
+
Base class of all coroutines.
Definition: Coroutine.h:292
+
virtual int runCoroutine()=0
The body of the coroutine.

Implement the 1-argument COROUTINE() macro.

@@ -322,6 +325,7 @@

+
#define COROUTINE_YIELD()
Yield execution to another coroutine.
Definition: Coroutine.h:168

but potentially slightly more efficient.

Definition at line 185 of file Coroutine.h.

@@ -495,6 +499,7 @@

Value:
while (true) \
+
#define COROUTINE_BEGIN()
Mark the beginning of a coroutine.
Definition: Coroutine.h:141

Mark the beginning of a coroutine loop.

Can be used instead of COROUTINE_BEGIN() at the beginning of a Coroutine.

@@ -573,6 +578,9 @@

Value:
__VA_ARGS__, EXTERN_COROUTINE2, EXTERN_COROUTINE1)(__VA_ARGS__)
+
#define GET_EXTERN_COROUTINE(_1, _2, NAME,...)
Internal helper macro to allow overloading of the EXTERN_COROUTINE() macro.
Definition: Coroutine.h:122
+
#define EXTERN_COROUTINE1(name)
Implement the 1-argument EXTERN_COROUTINE() macro.
Definition: Coroutine.h:125
+
#define EXTERN_COROUTINE2(className, name)
Implement the 2-argument EXTERN_COROUTINE() macro.
Definition: Coroutine.h:133

Create an extern reference to a coroutine that is defined in another .cpp file.

The extern reference is needed before it can be used. Two forms are supported:

@@ -670,18 +678,9 @@

#define COROUTINE_BEGIN()
Mark the beginning of a coroutine.
Definition: Coroutine.h:141

-
#define EXTERN_COROUTINE2(className, name)
Implement the 2-argument EXTERN_COROUTINE() macro.
Definition: Coroutine.h:133
-
virtual int runCoroutine()=0
The body of the coroutine.
-
#define COROUTINE_YIELD()
Yield execution to another coroutine.
Definition: Coroutine.h:168
-
Base class of all coroutines.
Definition: Coroutine.h:292
-
#define EXTERN_COROUTINE1(name)
Implement the 1-argument EXTERN_COROUTINE() macro.
Definition: Coroutine.h:125
-
#define GET_EXTERN_COROUTINE(_1, _2, NAME,...)
Internal helper macro to allow overloading of the EXTERN_COROUTINE() macro.
Definition: Coroutine.h:122
diff --git a/docs/html/Coroutine_8h__dep__incl.map b/docs/html/Coroutine_8h__dep__incl.map index f52e9bd..ecd249a 100644 --- a/docs/html/Coroutine_8h__dep__incl.map +++ b/docs/html/Coroutine_8h__dep__incl.map @@ -1,5 +1,5 @@ - + diff --git a/docs/html/Coroutine_8h__dep__incl.md5 b/docs/html/Coroutine_8h__dep__incl.md5 index 76a124b..34ba571 100644 --- a/docs/html/Coroutine_8h__dep__incl.md5 +++ b/docs/html/Coroutine_8h__dep__incl.md5 @@ -1 +1 @@ -e516b8c0aea4d94272a4a77a89df3974 \ No newline at end of file +e3e759d5cc0876b09ad4432cd23ca2f7 \ No newline at end of file diff --git a/docs/html/Coroutine_8h__incl.map b/docs/html/Coroutine_8h__incl.map index ee99bdf..cc37e7a 100644 --- a/docs/html/Coroutine_8h__incl.map +++ b/docs/html/Coroutine_8h__incl.map @@ -1,11 +1,11 @@ - + - + diff --git a/docs/html/Coroutine_8h__incl.md5 b/docs/html/Coroutine_8h__incl.md5 index f19ead9..acffc4e 100644 --- a/docs/html/Coroutine_8h__incl.md5 +++ b/docs/html/Coroutine_8h__incl.md5 @@ -1 +1 @@ -560a8be5d36b44561ce8376d71288f61 \ No newline at end of file +51a01595acddcf3b145532b01bf087c0 \ No newline at end of file diff --git a/docs/html/Coroutine_8h_source.html b/docs/html/Coroutine_8h_source.html index bd2c752..3c7874a 100644 --- a/docs/html/Coroutine_8h_source.html +++ b/docs/html/Coroutine_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/Coroutine.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@
- + @@ -115,7 +115,7 @@
61 #elif defined(_MSC_VER)
62  #define ACE_ROUTINE_DEPRECATED __declspec(deprecated)
63 #else
-
64  #pragma message("WARNING: Implement ACE_ROUTINE_DEPRECATED for this compiler")
+
64  #pragma message("WARNING: Implement ACE_ROUTINE_DEPRECATED for this compiler")
65  #define ACE_ROUTINE_DEPRECATED
66 #endif
67 
@@ -172,7 +172,6 @@
152  COROUTINE_BEGIN(); \
153  while (true) \
154 
-
155 
159 #define COROUTINE_YIELD_INTERNAL() \
160  do { \
161  __label__ jumpLabel; \
@@ -241,7 +240,7 @@
271 extern const __FlashStringHelper* const sStatusStrings[] PROGMEM;
272 
273 // Forward declaration of CoroutineSchedulerTemplate<T>
-
274 template <typename T> class CoroutineSchedulerTemplate;
+
274 template <typename T> class CoroutineSchedulerTemplate;
275 
291 template <typename T_CLOCK, typename T_DELAY>
@@ -255,7 +254,7 @@
302  static const uint8_t kNameTypeFString = 1;
303 
304  public:
-
315  virtual int runCoroutine() = 0;
+
315  virtual int runCoroutine() = 0;
316 
331  virtual void setupCoroutine() {}
332 
@@ -414,7 +413,7 @@
630  insertAtRoot();
631  }
632 
-
645  ~CoroutineTemplate() = default;
+
645  ~CoroutineTemplate() = default;
646 
648  Status getStatus() const { return mStatus; }
649 
@@ -513,80 +512,78 @@
827 }
828 
829 #endif
-
-
void printNameTo(Print &printer, uint8_t maxLen=0) const
Print name to the given Printer.
Definition: Coroutine.h:389
-
static const uint8_t kNameTypeFString
Coroutine name is a const __FlashStringHelper* f-string.
Definition: Coroutine.h:302
+
#define ACE_ROUTINE_DEPRECATED
Macro that indicates a deprecation.
Definition: Coroutine.h:65
+
An interface class for profiling classes that can track the elapsed time consumed by Coroutine::runCo...
virtual void updateElapsedMicros(uint32_t micros)=0
Process the completion of the runCoroutine() method which took micros microseconds.
-
CoroutineTemplate * mNext
Pointer to the next coroutine in a singly-linked list.
Definition: Coroutine.h:784
-
Status getStatus() const
Return the status of the coroutine.
Definition: Coroutine.h:648
-
bool isDelaying() const
The coroutine returned using COROUTINE_DELAY().
Definition: Coroutine.h:500
-
void setEnding()
Set the kStatusEnding state.
Definition: Coroutine.h:678
-
void * getJump() const
Pointer to label where execute will start on the next call to runCoroutine().
Definition: Coroutine.h:666
-
static const Status kStatusYielding
Coroutine returned using the COROUTINE_YIELD() statement.
Definition: Coroutine.h:614
-
bool isDone() const
The coroutine is either Ending or Terminated.
Definition: Coroutine.h:525
-
const char * getCName() const
Get name of the coroutine assuming it's a c-string.
Definition: Coroutine.h:375
+
Class that manages instances of the Coroutine class, and executes them in a round-robin fashion.
+
Base class of all coroutines.
Definition: Coroutine.h:292
+
CoroutineTemplate ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
Definition: Coroutine.h:570
void setName(const char *name)
Set the name of the coroutine to the given c-string.
Definition: Coroutine.h:363
-
uint8_t getNameType() const
Return the type of the name string, either kNameTypeCString or kNameTypeFString.
Definition: Coroutine.h:360
-
bool isYielding() const
The coroutine returned using COROUTINE_YIELD().
Definition: Coroutine.h:497
+
bool isDelaySecondsExpired() const
Check if delay seconds time is over.
Definition: Coroutine.h:487
+
void resume()
Add a Suspended coroutine into the head of the scheduler linked list, and change the state to Yieldin...
Definition: Coroutine.h:443
+
void reset()
Reset the coroutine to its initial state.
Definition: Coroutine.h:467
void setDelayMicros(T_DELAY delayMicros)
Configure the delay timer for delayMicros.
Definition: Coroutine.h:713
-
~CoroutineTemplate()=default
Destructor.
-
CoroutineTemplate ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
Definition: Coroutine.h:570
-
void setYielding()
Set the kStatusDelaying state.
Definition: Coroutine.h:672
+
void * getJump() const
Pointer to label where execute will start on the next call to runCoroutine().
Definition: Coroutine.h:666
+
void setDelayMillis(T_DELAY delayMillis)
Configure the delay timer for delayMillis.
Definition: Coroutine.h:699
+
static const Status kStatusEnding
Coroutine executed the COROUTINE_END() statement.
Definition: Coroutine.h:623
+
static unsigned long coroutineMicros()
Returns the current microseconds clock.
Definition: Coroutine.h:751
void setJump(void *jumpPoint)
Pointer to label where execute will start on the next call to runCoroutine().
Definition: Coroutine.h:660
-
static CoroutineTemplate ** getRoot()
Get the pointer to the root pointer.
Definition: Coroutine.h:557
-
CoroutineTemplate()
Constructor.
Definition: Coroutine.h:629
-
uint8_t mNameType
String type of the coroutine mName.
Definition: Coroutine.h:796
-
static const uint8_t kNameTypeCString
Coroutine name is a const char* c-string.
Definition: Coroutine.h:299
-
CoroutineProfiler * getProfiler() const
Get the profiler.
Definition: Coroutine.h:550
+
void setupCoroutine(const char *) ACE_ROUTINE_DEPRECATED
Deprecated method that does nothing.
Definition: Coroutine.h:535
+
uint8_t getNameType() const
Return the type of the name string, either kNameTypeCString or kNameTypeFString.
Definition: Coroutine.h:360
+
const char * getCName() const
Get name of the coroutine assuming it's a c-string.
Definition: Coroutine.h:375
+
CoroutineProfiler * mProfiler
Pointer to a profiler instance, either static or on the heap.
Definition: Coroutine.h:816
+
int runCoroutineWithProfiler()
This is a variant of runCoroutine() which measures the execution time of runCoroutine() and updates t...
Definition: Coroutine.h:344
void suspend()
Suspend the coroutine at the next scheduler iteration.
Definition: Coroutine.h:432
+
T_DELAY mDelayDuration
Delay time specified by COROUTINE_DELAY(), COROUTINE_DELAY_MICROS() or, COROUTINE_DELAY_SECONDS().
Definition: Coroutine.h:813
+
bool isTerminated() const
The coroutine was terminated by the scheduler with a call to setTerminated().
Definition: Coroutine.h:518
+
void printNameTo(Print &printer, uint8_t maxLen=0) const
Print name to the given Printer.
Definition: Coroutine.h:389
virtual int runCoroutine()=0
The body of the coroutine.
-
Base class of all coroutines.
Definition: Coroutine.h:292
-
void setupCoroutine(const char *) ACE_ROUTINE_DEPRECATED
Deprecated method that does nothing.
Definition: Coroutine.h:535
-
static unsigned long coroutineMillis()
Returns the current millisecond clock.
Definition: Coroutine.h:742
-
void setProfiler(CoroutineProfiler *profiler)
Set the profiler.
Definition: Coroutine.h:547
-
Status mStatus
Run-state of the coroutine.
Definition: Coroutine.h:799
void setName(const __FlashStringHelper *name)
Set the name of the coroutine to the given f-string.
Definition: Coroutine.h:369
- -
bool isDelayMicrosExpired() const
Check if delay micros time is over.
Definition: Coroutine.h:480
-
An interface class for profiling classes that can track the elapsed time consumed by Coroutine::runCo...
-
void setDelaying()
Set the kStatusDelaying state.
Definition: Coroutine.h:675
+
bool isDelaying() const
The coroutine returned using COROUTINE_DELAY().
Definition: Coroutine.h:500
+
bool isRunning() const
The coroutine is currently running.
Definition: Coroutine.h:503
+
T_DELAY mDelayStart
Start time provided by COROUTINE_DELAY(), COROUTINE_DELAY_MICROS(), or COROUTINE_DELAY_SECONDS().
Definition: Coroutine.h:806
const void * mName
Name of the coroutine, either (const char*) or (const __FlashStringHelper*).
Definition: Coroutine.h:793
-
void setDelayMillis(T_DELAY delayMillis)
Configure the delay timer for delayMillis.
Definition: Coroutine.h:699
-
bool isDelaySecondsExpired() const
Check if delay seconds time is over.
Definition: Coroutine.h:487
-
void resume()
Add a Suspended coroutine into the head of the scheduler linked list, and change the state to Yieldin...
Definition: Coroutine.h:443
-
static const Status kStatusSuspended
Coroutine has been suspended using suspend() and the scheduler should remove it from the queue upon t...
Definition: Coroutine.h:611
+
static const Status kStatusYielding
Coroutine returned using the COROUTINE_YIELD() statement.
Definition: Coroutine.h:614
+
void setDelaying()
Set the kStatusDelaying state.
Definition: Coroutine.h:675
+
~CoroutineTemplate()=default
Destructor.
uint8_t Status
The execution status of the coroutine, corresponding to the COROUTINE_YIELD(), COROUTINE_DELAY(),...
Definition: Coroutine.h:603
+
Status getStatus() const
Return the status of the coroutine.
Definition: Coroutine.h:648
+
Status mStatus
Run-state of the coroutine.
Definition: Coroutine.h:799
void setRunning()
Set the kStatusRunning state.
Definition: Coroutine.h:669
-
static const Status kStatusEnding
Coroutine executed the COROUTINE_END() statement.
Definition: Coroutine.h:623
-
static unsigned long coroutineSeconds()
Returns the current clock in unit of seconds, truncated to the lower 16-bits.
Definition: Coroutine.h:761
-
void reset()
Reset the coroutine to its initial state.
Definition: Coroutine.h:467
-
static const Status kStatusTerminated
Coroutine has ended and no longer in the scheduler queue.
Definition: Coroutine.h:626
-
bool isRunning() const
The coroutine is currently running.
Definition: Coroutine.h:503
-
T_DELAY mDelayStart
Start time provided by COROUTINE_DELAY(), COROUTINE_DELAY_MICROS(), or COROUTINE_DELAY_SECONDS().
Definition: Coroutine.h:806
-
const __FlashStringHelper * getFName() const
Get name of the coroutine assuming it's an f-string.
Definition: Coroutine.h:378
-
int runCoroutineWithProfiler()
This is a variant of runCoroutine() which measures the execution time of runCoroutine() and updates t...
Definition: Coroutine.h:344
+
bool isYielding() const
The coroutine returned using COROUTINE_YIELD().
Definition: Coroutine.h:497
+
bool isSuspended() const
The coroutine was suspended with a call to suspend().
Definition: Coroutine.h:494
+
static CoroutineTemplate ** getRoot()
Get the pointer to the root pointer.
Definition: Coroutine.h:557
+
void setupCoroutine(const __FlashStringHelper *) ACE_ROUTINE_DEPRECATED
Deprecated method that does nothing.
Definition: Coroutine.h:543
+
void setYielding()
Set the kStatusDelaying state.
Definition: Coroutine.h:672
+
void * mJumpPoint
Address of the label used by the computed-goto.
Definition: Coroutine.h:787
+
uint8_t mNameType
String type of the coroutine mName.
Definition: Coroutine.h:796
void setDelaySeconds(T_DELAY delaySeconds)
Configure the delay timer for delaySeconds.
Definition: Coroutine.h:727
+
void setEnding()
Set the kStatusEnding state.
Definition: Coroutine.h:678
+
static const uint8_t kNameTypeCString
Coroutine name is a const char* c-string.
Definition: Coroutine.h:299
virtual void setupCoroutine()
Perform coroutine initialization.
Definition: Coroutine.h:331
-
bool isDelayExpired() const
Check if delay millis time is over.
Definition: Coroutine.h:473
-
static unsigned long coroutineMicros()
Returns the current microseconds clock.
Definition: Coroutine.h:751
-
Class that manages instances of the Coroutine class, and executes them in a round-robin fashion.
Definition: Coroutine.h:274
-
T_DELAY mDelayDuration
Delay time specified by COROUTINE_DELAY(), COROUTINE_DELAY_MICROS() or, COROUTINE_DELAY_SECONDS().
Definition: Coroutine.h:813
-
CoroutineProfiler * mProfiler
Pointer to a profiler instance, either static or on the heap.
Definition: Coroutine.h:816
+
CoroutineProfiler * getProfiler() const
Get the profiler.
Definition: Coroutine.h:550
void setTerminated()
Set status to indicate that the Coroutine has been removed from the Scheduler queue.
Definition: Coroutine.h:684
-
bool isSuspended() const
The coroutine was suspended with a call to suspend().
Definition: Coroutine.h:494
-
bool isTerminated() const
The coroutine was terminated by the scheduler with a call to setTerminated().
Definition: Coroutine.h:518
+
bool isDelayMicrosExpired() const
Check if delay micros time is over.
Definition: Coroutine.h:480
+
static unsigned long coroutineMillis()
Returns the current millisecond clock.
Definition: Coroutine.h:742
+
bool isDone() const
The coroutine is either Ending or Terminated.
Definition: Coroutine.h:525
bool isEnding() const
The coroutine returned using COROUTINE_END().
Definition: Coroutine.h:510
-
void * mJumpPoint
Address of the label used by the computed-goto.
Definition: Coroutine.h:787
-
void setupCoroutine(const __FlashStringHelper *) ACE_ROUTINE_DEPRECATED
Deprecated method that does nothing.
Definition: Coroutine.h:543
-
#define ACE_ROUTINE_DEPRECATED
Macro that indicates a deprecation.
Definition: Coroutine.h:65
+
void setProfiler(CoroutineProfiler *profiler)
Set the profiler.
Definition: Coroutine.h:547
+
bool isDelayExpired() const
Check if delay millis time is over.
Definition: Coroutine.h:473
+
CoroutineTemplate * mNext
Pointer to the next coroutine in a singly-linked list.
Definition: Coroutine.h:784
+
const __FlashStringHelper * getFName() const
Get name of the coroutine assuming it's an f-string.
Definition: Coroutine.h:378
+
CoroutineTemplate()
Constructor.
Definition: Coroutine.h:629
+
static const Status kStatusTerminated
Coroutine has ended and no longer in the scheduler queue.
Definition: Coroutine.h:626
+
static unsigned long coroutineSeconds()
Returns the current clock in unit of seconds, truncated to the lower 16-bits.
Definition: Coroutine.h:761
+
static const Status kStatusRunning
Coroutine is currenly running.
Definition: Coroutine.h:620
+
static const uint8_t kNameTypeFString
Coroutine name is a const __FlashStringHelper* f-string.
Definition: Coroutine.h:302
+
static const Status kStatusSuspended
Coroutine has been suspended using suspend() and the scheduler should remove it from the queue upon t...
Definition: Coroutine.h:611
static const Status kStatusDelaying
Coroutine returned using the COROUTINE_DELAY() statement.
Definition: Coroutine.h:617
void statusPrintTo(Print &printer)
Print the human-readable string of the Status.
Definition: Coroutine.h:651
-
static const Status kStatusRunning
Coroutine is currenly running.
Definition: Coroutine.h:620
+
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+ diff --git a/docs/html/LogBinJsonRenderer_8h_source.html b/docs/html/LogBinJsonRenderer_8h_source.html index 7092e11..4b5307f 100644 --- a/docs/html/LogBinJsonRenderer_8h_source.html +++ b/docs/html/LogBinJsonRenderer_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/LogBinJsonRenderer.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -166,17 +166,15 @@
116 }
117 
118 #endif
- +
All coroutines are instances of the Coroutine base class.
Print the LogBinProfiler bins as a JSON array.
static void printTo(Print &printer, uint8_t startBin, uint8_t endBin, bool clear=true, bool rollup=true)
Loop over all coroutines and print the bin counts as JSON.
Class that maintains the frequency count of the elapsed time of runCoroutine() in an array of bins wh...
static const uint8_t kNumBins
Number of event counter bins used by this class.
- + diff --git a/docs/html/LogBinProfiler_8cpp_source.html b/docs/html/LogBinProfiler_8cpp_source.html index 8613739..a8ddd9d 100644 --- a/docs/html/LogBinProfiler_8cpp_source.html +++ b/docs/html/LogBinProfiler_8cpp_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/LogBinProfiler.cpp Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -137,9 +137,7 @@ diff --git a/docs/html/LogBinProfiler_8h_source.html b/docs/html/LogBinProfiler_8h_source.html index 075080e..f7c81d3 100644 --- a/docs/html/LogBinProfiler_8h_source.html +++ b/docs/html/LogBinProfiler_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/LogBinProfiler.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -184,23 +184,21 @@
165 }
166 
167 #endif
- -
void updateElapsedMicros(uint32_t micros) override
Update the count for the calculated elapsed time bin.
- +
All coroutines are instances of the Coroutine base class.
An interface class for profiling classes that can track the elapsed time consumed by Coroutine::runCo...
-
static void clearProfilers()
Clear counters for all profilers.
Class that maintains the frequency count of the elapsed time of runCoroutine() in an array of bins wh...
-
static const uint8_t kNumBins
Number of event counter bins used by this class.
+
static void clearProfilers()
Clear counters for all profilers.
+ +
uint16_t mBins[kNumBins]
Event count bins.
static void deleteProfilers()
Delete the profilers created by createProfilers().
+
void updateElapsedMicros(uint32_t micros) override
Update the count for the calculated elapsed time bin.
static void createProfilers()
Create a new profiler on the heap and attach it to each coroutine.
-
uint16_t mBins[kNumBins]
Event count bins.
- +
static const uint8_t kNumBins
Number of event counter bins used by this class.
+ diff --git a/docs/html/LogBinTableRenderer_8cpp_source.html b/docs/html/LogBinTableRenderer_8cpp_source.html index 186b26a..8e5b090 100644 --- a/docs/html/LogBinTableRenderer_8cpp_source.html +++ b/docs/html/LogBinTableRenderer_8cpp_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/LogBinTableRenderer.cpp Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -222,9 +222,7 @@ diff --git a/docs/html/LogBinTableRenderer_8h_source.html b/docs/html/LogBinTableRenderer_8h_source.html index e0c9101..ed59dfd 100644 --- a/docs/html/LogBinTableRenderer_8h_source.html +++ b/docs/html/LogBinTableRenderer_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/LogBinTableRenderer.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -188,17 +188,15 @@
180 } // namespace ace_routine
181 
182 #endif
- -
Print the information in the LogBinProfiler for each Coroutine in a human-readable table.
+
All coroutines are instances of the Coroutine base class.
Class that maintains the frequency count of the elapsed time of runCoroutine() in an array of bins wh...
-
static void printTo(Print &printer, uint8_t startBin, uint8_t endBin, bool clear=true, bool rollup=true)
Loop over all coroutines and print the ASCII version of the frequency distribution.
static const uint8_t kNumBins
Number of event counter bins used by this class.
- +
Print the information in the LogBinProfiler for each Coroutine in a human-readable table.
+
static void printTo(Print &printer, uint8_t startBin, uint8_t endBin, bool clear=true, bool rollup=true)
Loop over all coroutines and print the ASCII version of the frequency distribution.
+ diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 5b205ea..ddce6ac 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -3,7 +3,7 @@ - + AceRoutine: Class List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -72,9 +72,9 @@  Nace_routine  CChannelAn unbuffered synchronized channel  CClockInterfaceA utility class (all methods are static) that provides a layer of indirection to Arduino clock functions (millis() and micros()) - CCoroutineProfilerAn interface class for profiling classes that can track the elapsed time consumed by Coroutine::runCoroutine() - CCoroutineSchedulerTemplateClass that manages instances of the Coroutine class, and executes them in a round-robin fashion - CCoroutineTemplateBase class of all coroutines + CCoroutineSchedulerTemplateClass that manages instances of the Coroutine class, and executes them in a round-robin fashion + CCoroutineTemplateBase class of all coroutines + CCoroutineProfilerAn interface class for profiling classes that can track the elapsed time consumed by Coroutine::runCoroutine()  CLogBinJsonRendererTemplatePrint the LogBinProfiler bins as a JSON array  CLogBinProfilerTemplateClass that maintains the frequency count of the elapsed time of runCoroutine() in an array of bins where each bin is a log2() logarithm of the elapsed time in microseconds  CLogBinTableRendererTemplatePrint the information in the LogBinProfiler for each Coroutine in a human-readable table @@ -83,9 +83,7 @@ diff --git a/docs/html/classace__routine_1_1Channel-members.html b/docs/html/classace__routine_1_1Channel-members.html index 67afaf3..2d00d3f 100644 --- a/docs/html/classace__routine_1_1Channel-members.html +++ b/docs/html/classace__routine_1_1Channel-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -82,9 +82,7 @@ diff --git a/docs/html/classace__routine_1_1Channel.html b/docs/html/classace__routine_1_1Channel.html index 19308be..d33142b 100644 --- a/docs/html/classace__routine_1_1Channel.html +++ b/docs/html/classace__routine_1_1Channel.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::Channel< T > Class Template Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -190,9 +190,7 @@

diff --git a/docs/html/classace__routine_1_1ClockInterface-members.html b/docs/html/classace__routine_1_1ClockInterface-members.html index 4cf0729..2952903 100644 --- a/docs/html/classace__routine_1_1ClockInterface-members.html +++ b/docs/html/classace__routine_1_1ClockInterface-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -80,9 +80,7 @@ diff --git a/docs/html/classace__routine_1_1ClockInterface.html b/docs/html/classace__routine_1_1ClockInterface.html index 099a545..eca4f99 100644 --- a/docs/html/classace__routine_1_1ClockInterface.html +++ b/docs/html/classace__routine_1_1ClockInterface.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::ClockInterface Class Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -137,9 +137,7 @@

diff --git a/docs/html/classace__routine_1_1CoroutineProfiler-members.html b/docs/html/classace__routine_1_1CoroutineProfiler-members.html index 54b3acc..dbc08a2 100644 --- a/docs/html/classace__routine_1_1CoroutineProfiler-members.html +++ b/docs/html/classace__routine_1_1CoroutineProfiler-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -80,9 +80,7 @@ diff --git a/docs/html/classace__routine_1_1CoroutineProfiler.html b/docs/html/classace__routine_1_1CoroutineProfiler.html index 618f4f3..0c125ff 100644 --- a/docs/html/classace__routine_1_1CoroutineProfiler.html +++ b/docs/html/classace__routine_1_1CoroutineProfiler.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::CoroutineProfiler Class Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -82,8 +82,8 @@
Inheritance diagram for ace_routine::CoroutineProfiler:
-
Inheritance graph
- +
Inheritance graph
+ @@ -143,9 +143,7 @@

diff --git a/docs/html/classace__routine_1_1CoroutineSchedulerTemplate-members.html b/docs/html/classace__routine_1_1CoroutineSchedulerTemplate-members.html index bfe94d9..5de91e9 100644 --- a/docs/html/classace__routine_1_1CoroutineSchedulerTemplate-members.html +++ b/docs/html/classace__routine_1_1CoroutineSchedulerTemplate-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@

- + @@ -82,9 +82,7 @@ diff --git a/docs/html/classace__routine_1_1CoroutineSchedulerTemplate.html b/docs/html/classace__routine_1_1CoroutineSchedulerTemplate.html index 62f8d0d..c17b765 100644 --- a/docs/html/classace__routine_1_1CoroutineSchedulerTemplate.html +++ b/docs/html/classace__routine_1_1CoroutineSchedulerTemplate.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::CoroutineSchedulerTemplate< T_COROUTINE > Class Template Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -112,7 +112,7 @@

With its current functionality, the CoroutineSchedule does not need to be a singleton because the information that stores the singly-linked list of Coroutines is actually stored in the Coroutine class, not the CoroutineScheduler class. Because it does not need to be singleton, the getScheduler() method is not really required, and we could have just allowed the end-user to explicitly create an instance of CoroutineScheduler and use it like a normal object.

However, once the API of CoroutineScheduler with its static wrapper methods was released to the public, backwards compatibility meant that I could not remove this extra layer of indirection. Fortunately, the none of these methods are virtual, so the extra level of indirection consumes very little overhead, even on 8-bit AVR processors.

-

Definition at line 274 of file Coroutine.h.

+

Definition at line 82 of file CoroutineScheduler.h.

Member Function Documentation

◆ list()

@@ -250,9 +250,7 @@

diff --git a/docs/html/classace__routine_1_1CoroutineTemplate-members.html b/docs/html/classace__routine_1_1CoroutineTemplate-members.html index b77737f..83bee52 100644 --- a/docs/html/classace__routine_1_1CoroutineTemplate-members.html +++ b/docs/html/classace__routine_1_1CoroutineTemplate-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -142,9 +142,7 @@ diff --git a/docs/html/classace__routine_1_1CoroutineTemplate.html b/docs/html/classace__routine_1_1CoroutineTemplate.html index 9065b77..8c67cca 100644 --- a/docs/html/classace__routine_1_1CoroutineTemplate.html +++ b/docs/html/classace__routine_1_1CoroutineTemplate.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY > Class Template Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -90,8 +90,8 @@
Collaboration diagram for ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY >:
-
Collaboration graph
- +
Collaboration graph
+ @@ -1486,9 +1486,7 @@

diff --git a/docs/html/classace__routine_1_1LogBinJsonRendererTemplate-members.html b/docs/html/classace__routine_1_1LogBinJsonRendererTemplate-members.html index 1405e08..cd0313d 100644 --- a/docs/html/classace__routine_1_1LogBinJsonRendererTemplate-members.html +++ b/docs/html/classace__routine_1_1LogBinJsonRendererTemplate-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@

- + @@ -79,9 +79,7 @@ diff --git a/docs/html/classace__routine_1_1LogBinJsonRendererTemplate.html b/docs/html/classace__routine_1_1LogBinJsonRendererTemplate.html index 921afd5..4c76547 100644 --- a/docs/html/classace__routine_1_1LogBinJsonRendererTemplate.html +++ b/docs/html/classace__routine_1_1LogBinJsonRendererTemplate.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::LogBinJsonRendererTemplate< T_COROUTINE > Class Template Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -183,9 +183,7 @@

diff --git a/docs/html/classace__routine_1_1LogBinProfilerTemplate-members.html b/docs/html/classace__routine_1_1LogBinProfilerTemplate-members.html index 9e56510..2ce7aac 100644 --- a/docs/html/classace__routine_1_1LogBinProfilerTemplate-members.html +++ b/docs/html/classace__routine_1_1LogBinProfilerTemplate-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -87,9 +87,7 @@ diff --git a/docs/html/classace__routine_1_1LogBinProfilerTemplate.html b/docs/html/classace__routine_1_1LogBinProfilerTemplate.html index 55230b5..0bb9014 100644 --- a/docs/html/classace__routine_1_1LogBinProfilerTemplate.html +++ b/docs/html/classace__routine_1_1LogBinProfilerTemplate.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::LogBinProfilerTemplate< T_COROUTINE > Class Template Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -85,8 +85,8 @@
Inheritance diagram for ace_routine::LogBinProfilerTemplate< T_COROUTINE >:
-
Inheritance graph
- +
Inheritance graph
+ @@ -94,8 +94,8 @@
Collaboration diagram for ace_routine::LogBinProfilerTemplate< T_COROUTINE >:
-
Collaboration graph
- +
Collaboration graph
+ @@ -245,9 +245,7 @@

diff --git a/docs/html/classace__routine_1_1LogBinTableRendererTemplate-members.html b/docs/html/classace__routine_1_1LogBinTableRendererTemplate-members.html index 53dd85a..866ba2a 100644 --- a/docs/html/classace__routine_1_1LogBinTableRendererTemplate-members.html +++ b/docs/html/classace__routine_1_1LogBinTableRendererTemplate-members.html @@ -3,7 +3,7 @@ - + AceRoutine: Member List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@

- + @@ -79,9 +79,7 @@
diff --git a/docs/html/classace__routine_1_1LogBinTableRendererTemplate.html b/docs/html/classace__routine_1_1LogBinTableRendererTemplate.html index 46de381..4dc977b 100644 --- a/docs/html/classace__routine_1_1LogBinTableRendererTemplate.html +++ b/docs/html/classace__routine_1_1LogBinTableRendererTemplate.html @@ -3,7 +3,7 @@ - + AceRoutine: ace_routine::LogBinTableRendererTemplate< T_COROUTINE > Class Template Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -191,9 +191,7 @@

diff --git a/docs/html/classes.html b/docs/html/classes.html index 6eaaa1e..637c340 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Index @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -67,33 +67,19 @@
Class Index
-
c | l
- - - - - - - - - - - - - - - - -
  c  
-
ClockInterface (ace_routine)   CoroutineTemplate (ace_routine)   LogBinProfilerTemplate (ace_routine)   
CoroutineProfiler (ace_routine)   
  l  
-
LogBinTableRendererTemplate (ace_routine)   
Channel (ace_routine)   CoroutineSchedulerTemplate (ace_routine)   
LogBinJsonRendererTemplate (ace_routine)   
-
c | l
+
C | L
+
+
+
C
+
Channel (ace_routine)
ClockInterface (ace_routine)
CoroutineProfiler (ace_routine)
CoroutineSchedulerTemplate (ace_routine)
CoroutineTemplate (ace_routine)
+
+
L
+
LogBinJsonRendererTemplate (ace_routine)
LogBinProfilerTemplate (ace_routine)
LogBinTableRendererTemplate (ace_routine)
+
diff --git a/docs/html/compat_8h.html b/docs/html/compat_8h.html index ed6bc1f..18012f4 100644 --- a/docs/html/compat_8h.html +++ b/docs/html/compat_8h.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/compat.h File Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -73,24 +73,27 @@
compat.h File Reference
+ +

Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them. +More...

#include <avr/pgmspace.h>
Include dependency graph for compat.h:
-
- - +
+ +
This graph shows which files directly or indirectly include this file:
-
- - - +
+ + + @@ -112,7 +115,7 @@  

Detailed Description

-

Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them.

+

Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them.

Copied from AUnit/src/aunit/Flash.h and AceTime/src/ace_time/common/compat.h.

We support flash strings (F() macro) for AVR because those MCUs have very small static RAM (1-2kB). Prior to v1.0, we disabled F() for ESP8266 because those implementations were buggy. But it seems that recent ESP8266 cores (v2.5 and higher) seems to have fixed the problems with F(), so I have reactivated it. The F() is automatically a no-op for Teensy and ESP32.

The FPSTR() macro is a useful macro that was originally created on the ESP8266. But it was incorrectly implemented on the ESP32, until https://github.com/espressif/arduino-esp32/issues/1371 is fixed (hopefully by v1.0.3).

@@ -121,9 +124,7 @@
diff --git a/docs/html/compat_8h__dep__incl.map b/docs/html/compat_8h__dep__incl.map index 559e259..00a59c9 100644 --- a/docs/html/compat_8h__dep__incl.map +++ b/docs/html/compat_8h__dep__incl.map @@ -1,9 +1,9 @@ - - - - - + + + + + diff --git a/docs/html/compat_8h__dep__incl.md5 b/docs/html/compat_8h__dep__incl.md5 index 13aa89c..527f872 100644 --- a/docs/html/compat_8h__dep__incl.md5 +++ b/docs/html/compat_8h__dep__incl.md5 @@ -1 +1 @@ -c4a9ecf04b212348f0d6a78f994e694a \ No newline at end of file +b89915fc33bf2e0b58292fc03b1b5e31 \ No newline at end of file diff --git a/docs/html/compat_8h__dep__incl.png b/docs/html/compat_8h__dep__incl.png index 5fa8f774d3510e26834e419bf926ba6bed00a50c..55017b5535aecd48b6b71985cc197a4dc2917e68 100644 GIT binary patch literal 61954 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 literal 62175 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 diff --git a/docs/html/compat_8h__incl.map b/docs/html/compat_8h__incl.map index c73fd84..5636a7a 100644 --- a/docs/html/compat_8h__incl.map +++ b/docs/html/compat_8h__incl.map @@ -1,4 +1,4 @@ - + diff --git a/docs/html/compat_8h__incl.md5 b/docs/html/compat_8h__incl.md5 index d54f7dd..325cbd7 100644 --- a/docs/html/compat_8h__incl.md5 +++ b/docs/html/compat_8h__incl.md5 @@ -1 +1 @@ -4df8ae8b21fb79920526067ddaf39116 \ No newline at end of file +b7823e568804e6916aa045ef6bba8253 \ No newline at end of file diff --git a/docs/html/compat_8h_source.html b/docs/html/compat_8h_source.html index bfa854f..b55459e 100644 --- a/docs/html/compat_8h_source.html +++ b/docs/html/compat_8h_source.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine/compat.h Source File @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@
- + @@ -125,24 +125,25 @@
74 #elif defined(EPOXY_DUINO)
75  #include <pgmspace.h>
76 
-
77 #else
-
78  #warning Untested platform, AceRoutine may still work...
-
79 
-
80  #include <avr/pgmspace.h>
-
81  #ifndef FPSTR
-
82 
-
87  #define FPSTR(p) (reinterpret_cast<const __FlashStringHelper *>(p))
-
88  #endif
-
89 
-
90 #endif
-
91 
-
92 #endif
+
77 #elif defined(ARDUINO_NRF52_ADAFRUIT)
+
78  #include <avr/pgmspace.h>
+
79  #define FPSTR(p) (reinterpret_cast<const __FlashStringHelper *>(p))
+
80 
+
81 #else
+
82  #warning Untested platform, AceRoutine may still work...
+
83 
+
84  #include <avr/pgmspace.h>
+
85  #ifndef FPSTR
+
91  #define FPSTR(p) (reinterpret_cast<const __FlashStringHelper *>(p))
+
92  #endif
+
93 
+
94 #endif
+
95 
+
96 #endif
diff --git a/docs/html/dir_000000_000001.html b/docs/html/dir_000000_000001.html index 4382b63..31f9285 100644 --- a/docs/html/dir_000000_000001.html +++ b/docs/html/dir_000000_000001.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src -> ace_routine Relation @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -70,9 +70,7 @@

src → ace_routine Relation

File in srcIncludes file in src/ace_routine
AceRoutine.hCoroutine.h
diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 33b2fe7..37d1087 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src Directory Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -74,8 +74,8 @@
Directory dependency graph for src:
-
/home/brian/src/AceRoutine/src
- +
/home/brian/src/AceRoutine/src
+ @@ -88,9 +88,7 @@
diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 index 83746a6..54f3cd9 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -1 +1 @@ -1a624375a2bbe55619e001933d057bc9 \ No newline at end of file +f7691fc83e0cf60952f95563c0824066 \ No newline at end of file diff --git a/docs/html/dir_bbf1ec131ffa96b8d365d81f56025723.html b/docs/html/dir_bbf1ec131ffa96b8d365d81f56025723.html index 9dab594..44ac17b 100644 --- a/docs/html/dir_bbf1ec131ffa96b8d365d81f56025723.html +++ b/docs/html/dir_bbf1ec131ffa96b8d365d81f56025723.html @@ -3,7 +3,7 @@ - + AceRoutine: /home/brian/src/AceRoutine/src/ace_routine Directory Reference @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -75,16 +75,16 @@

Files

file  compat.h [code] + Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them.
  file  Coroutine.h [code] + All coroutines are instances of the Coroutine base class.
  diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css index 73ecbb2..ffbff02 100644 --- a/docs/html/doxygen.css +++ b/docs/html/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.8.17 */ +/* The standard CSS for doxygen 1.9.1 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; @@ -66,7 +66,7 @@ p.startli, p.startdd { margin-top: 2px; } -th p.starttd, p.intertd, p.endtd { +th p.starttd, th p.intertd, th p.endtd { font-size: 100%; font-weight: 700; } @@ -103,30 +103,96 @@ caption { } span.legend { - font-size: 70%; - text-align: center; + font-size: 70%; + text-align: center; } h3.version { - font-size: 90%; - text-align: center; + font-size: 90%; + text-align: center; } -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; } -div.qindex, div.navpath { +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; width: 100%; line-height: 140%; + font-size: 130%; + color: #A0A0A0; } -div.navtab { - margin-right: 15px; +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } } + /* @group Link Styling */ a { @@ -143,17 +209,6 @@ a:hover { text-decoration: underline; } -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #FFFFFF; - border: 1px double #869DCA; -} - .contents a.qindexHL:visited { color: #FFFFFF; } @@ -1358,10 +1413,12 @@ dl.citelist dt { font-weight:bold; margin-right:10px; padding:5px; + text-align:right; + width:52px; } dl.citelist dd { - margin:2px 0; + margin:2px 0 2px 72px; padding:5px 0; } @@ -1424,6 +1481,12 @@ div.toc li.level4 { margin-left: 45px; } +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + .PageDocRTL-title div.toc li.level1 { margin-left: 0 !important; margin-right: 0; @@ -1661,47 +1724,6 @@ tr.heading h2 { /* @group Markdown */ -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - table.markdownTable { border-collapse:collapse; margin-top: 4px; diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png deleted file mode 100644 index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/docs/html/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js index c8e84aa..88f2c27 100644 --- a/docs/html/dynsections.js +++ b/docs/html/dynsections.js @@ -1,25 +1,26 @@ /* - @licstart The following is the entire license notice for the - JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. - Copyright (C) 1997-2017 by Dimitri van Heesch + The MIT License (MIT) - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + Copyright (C) 1997-2020 by Dimitri van Heesch - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. - @licend The above is the entire license notice - for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { diff --git a/docs/html/files.html b/docs/html/files.html index caccbda..33519b8 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -3,7 +3,7 @@ - + AceRoutine: File List @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -73,9 +73,9 @@   ace_routine  Channel.h  ClockInterface.h - compat.h + compat.hVarious macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them  Coroutine.cpp - Coroutine.h + Coroutine.hAll coroutines are instances of the Coroutine base class  CoroutineProfiler.h  CoroutineScheduler.h  LogBinJsonRenderer.h @@ -89,9 +89,7 @@ diff --git a/docs/html/functions.html b/docs/html/functions.html index 08cf90f..5912e9a 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Members @@ -22,7 +22,7 @@
AceRoutine -  1.5.0 +  1.5.1
A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
@@ -31,10 +31,10 @@ - + @@ -321,7 +321,7 @@

- s -

    : ace_routine::CoroutineSchedulerTemplate< T_COROUTINE >
  • setupCoroutine() -: ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY > +: ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY >
  • setupCoroutines() : ace_routine::CoroutineSchedulerTemplate< T_COROUTINE > @@ -370,9 +370,7 @@

    - ~ -

      diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index 8e78736..e1a50af 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Members - Functions @@ -22,7 +22,7 @@
      AceRoutine -  1.5.0 +  1.5.1
      A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
      @@ -31,10 +31,10 @@ - + @@ -305,9 +305,7 @@

      - ~ -

        diff --git a/docs/html/functions_type.html b/docs/html/functions_type.html index 1149b68..aed63e7 100644 --- a/docs/html/functions_type.html +++ b/docs/html/functions_type.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Members - Typedefs @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -75,9 +75,7 @@ diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 3e336ad..86da8c2 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Members - Variables @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -122,9 +122,7 @@ diff --git a/docs/html/globals.html b/docs/html/globals.html index 34ee215..ba775a3 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -3,7 +3,7 @@ - + AceRoutine: File Members @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -125,9 +125,7 @@ diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html index 5240763..d696cc9 100644 --- a/docs/html/globals_defs.html +++ b/docs/html/globals_defs.html @@ -3,7 +3,7 @@ - + AceRoutine: File Members @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -125,9 +125,7 @@ diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html index 5fdbcc5..c892a4d 100644 --- a/docs/html/graph_legend.html +++ b/docs/html/graph_legend.html @@ -3,7 +3,7 @@ - + AceRoutine: Graph Legend @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -130,9 +130,7 @@ diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index 65dd0d8..3b519be 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Hierarchy @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -84,9 +84,7 @@ diff --git a/docs/html/index.html b/docs/html/index.html index fffb8ec..59a0990 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -3,7 +3,7 @@ - + AceRoutine: AceRoutine Library @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -67,16 +67,13 @@
        AceRoutine Library
        -

        This is the Doxygen documentation for the AceRoutine Library.

        -

        Click on the "Classes" menu above to see the list of classes.

        +

        This is the Doxygen documentation for the AceRoutine Library.Click on the "Classes" menu above to see the list of classes.

        Click on the "Files" menu above to see the list of header files.

        diff --git a/docs/html/inherits.html b/docs/html/inherits.html index d485f27..199e86c 100644 --- a/docs/html/inherits.html +++ b/docs/html/inherits.html @@ -3,7 +3,7 @@ - + AceRoutine: Class Hierarchy @@ -22,7 +22,7 @@
        AceRoutine -  1.5.0 +  1.5.1
        A low-memory, fast-switching, cooperative multitasking library using stackless coroutines on Arduino platforms.
        @@ -31,10 +31,10 @@ - + @@ -70,39 +70,39 @@ - - - - - - - @@ -110,9 +110,7 @@ diff --git a/docs/html/menu.js b/docs/html/menu.js index 433c15b..2fe2214 100644 --- a/docs/html/menu.js +++ b/docs/html/menu.js @@ -1,25 +1,26 @@ /* - @licstart The following is the entire license notice for the - JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. - Copyright (C) 1997-2017 by Dimitri van Heesch + The MIT License (MIT) - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + Copyright (C) 1997-2020 by Dimitri van Heesch - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. - @licend The above is the entire license notice - for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { @@ -40,9 +41,9 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); if (searchEnabled) { if (serverSide) { - $('#main-menu').append('
      • '); + $('#main-menu').append('
      • '); } else { - $('#main-menu').append('
      • '); + $('#main-menu').append('
      • '); } } $('#main-menu').smartmenus(); diff --git a/docs/html/menudata.js b/docs/html/menudata.js index af4f475..e9dd777 100644 --- a/docs/html/menudata.js +++ b/docs/html/menudata.js @@ -1,24 +1,26 @@ /* -@licstart The following is the entire license notice for the -JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. -Copyright (C) 1997-2019 by Dimitri van Heesch + The MIT License (MIT) -This program is free software; you can redistribute it and/or modify -it under the terms of version 2 of the GNU General Public License as published by -the Free Software Foundation + Copyright (C) 1997-2020 by Dimitri van Heesch -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. -@licend The above is the entire license notice -for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ var menudata={children:[ {text:"Main Page",url:"index.html"}, diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html index 26dd244..1ec5b2d 100644 --- a/docs/html/search/all_0.html +++ b/docs/html/search/all_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html index 8eb215b..9f80e90 100644 --- a/docs/html/search/all_1.html +++ b/docs/html/search/all_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js index 86e4b47..4f31300 100644 --- a/docs/html/search/all_1.js +++ b/docs/html/search/all_1.js @@ -5,24 +5,25 @@ var searchData= ['clearprofilers_4',['clearProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#a383e87c1dededb9205a5357001d832e9',1,'ace_routine::LogBinProfilerTemplate']]], ['clockinterface_5',['ClockInterface',['../classace__routine_1_1ClockInterface.html',1,'ace_routine']]], ['compat_2eh_6',['compat.h',['../compat_8h.html',1,'']]], - ['coroutine_7',['COROUTINE',['../Coroutine_8h.html#ab22e58ab24b1908a7280f13603248ce3',1,'COROUTINE(): Coroutine.h'],['../Coroutine_8h.html#a25a42d39c252ea6377c0845010a38c2b',1,'ace_routine::Coroutine()']]], - ['coroutine_2eh_8',['Coroutine.h',['../Coroutine_8h.html',1,'']]], - ['coroutine1_9',['COROUTINE1',['../Coroutine_8h.html#a8d8219c8fc07650dfcdffbf83d800574',1,'Coroutine.h']]], - ['coroutine2_10',['COROUTINE2',['../Coroutine_8h.html#a04a0fdcb7293e51ddda298e237264c51',1,'Coroutine.h']]], - ['coroutine_5fawait_11',['COROUTINE_AWAIT',['../Coroutine_8h.html#a9f6714d9752740b6173b6afc4d108fa8',1,'Coroutine.h']]], - ['coroutine_5fbegin_12',['COROUTINE_BEGIN',['../Coroutine_8h.html#a7b7dc05639a37cb3f51bf348c68db283',1,'Coroutine.h']]], - ['coroutine_5fdelay_13',['COROUTINE_DELAY',['../Coroutine_8h.html#a1391503960a4b0c48f8200f1ffa0e305',1,'Coroutine.h']]], - ['coroutine_5fdelay_5fmicros_14',['COROUTINE_DELAY_MICROS',['../Coroutine_8h.html#a4b620a90274d05b92509c1c5eb4666f2',1,'Coroutine.h']]], - ['coroutine_5fdelay_5fseconds_15',['COROUTINE_DELAY_SECONDS',['../Coroutine_8h.html#a80fbf69742a91980a58f719edc8920db',1,'Coroutine.h']]], - ['coroutine_5fend_16',['COROUTINE_END',['../Coroutine_8h.html#a7e326a8df652c46c42a8d713ddc67bd7',1,'Coroutine.h']]], - ['coroutine_5floop_17',['COROUTINE_LOOP',['../Coroutine_8h.html#adad73df0853c1d3040b88b3cd0a04c0e',1,'Coroutine.h']]], - ['coroutine_5fyield_18',['COROUTINE_YIELD',['../Coroutine_8h.html#a682abe1669f9fe28af63d11da5421cbf',1,'Coroutine.h']]], - ['coroutine_5fyield_5finternal_19',['COROUTINE_YIELD_INTERNAL',['../Coroutine_8h.html#a53efafb6fd212ea352f5ad52ea9bc393',1,'Coroutine.h']]], - ['coroutinemicros_20',['coroutineMicros',['../classace__routine_1_1CoroutineTemplate.html#a41acb66b780bc0153117915024811949',1,'ace_routine::CoroutineTemplate']]], - ['coroutinemillis_21',['coroutineMillis',['../classace__routine_1_1CoroutineTemplate.html#ad679cad7fc488bc15145d484b6e61364',1,'ace_routine::CoroutineTemplate']]], - ['coroutineprofiler_22',['CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html',1,'ace_routine::CoroutineProfiler'],['../classace__routine_1_1CoroutineProfiler.html#a91a16875699abfda9383b9f29e4f040f',1,'ace_routine::CoroutineProfiler::CoroutineProfiler()']]], - ['coroutineschedulertemplate_23',['CoroutineSchedulerTemplate',['../classace__routine_1_1CoroutineSchedulerTemplate.html',1,'ace_routine']]], - ['coroutineseconds_24',['coroutineSeconds',['../classace__routine_1_1CoroutineTemplate.html#af25c1de1f753912444725f899dfffcb3',1,'ace_routine::CoroutineTemplate']]], - ['coroutinetemplate_25',['CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html',1,'ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY >'],['../classace__routine_1_1CoroutineTemplate.html#aebb72dfa544cba3ebcdd5d7647ca8255',1,'ace_routine::CoroutineTemplate::CoroutineTemplate()']]], - ['createprofilers_26',['createProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#ae8a4228ae33f977c6fe3584eee71beec',1,'ace_routine::LogBinProfilerTemplate']]] + ['coroutine_7',['Coroutine',['../Coroutine_8h.html#a25a42d39c252ea6377c0845010a38c2b',1,'ace_routine']]], + ['coroutine_8',['COROUTINE',['../Coroutine_8h.html#ab22e58ab24b1908a7280f13603248ce3',1,'Coroutine.h']]], + ['coroutine_2eh_9',['Coroutine.h',['../Coroutine_8h.html',1,'']]], + ['coroutine1_10',['COROUTINE1',['../Coroutine_8h.html#a8d8219c8fc07650dfcdffbf83d800574',1,'Coroutine.h']]], + ['coroutine2_11',['COROUTINE2',['../Coroutine_8h.html#a04a0fdcb7293e51ddda298e237264c51',1,'Coroutine.h']]], + ['coroutine_5fawait_12',['COROUTINE_AWAIT',['../Coroutine_8h.html#a9f6714d9752740b6173b6afc4d108fa8',1,'Coroutine.h']]], + ['coroutine_5fbegin_13',['COROUTINE_BEGIN',['../Coroutine_8h.html#a7b7dc05639a37cb3f51bf348c68db283',1,'Coroutine.h']]], + ['coroutine_5fdelay_14',['COROUTINE_DELAY',['../Coroutine_8h.html#a1391503960a4b0c48f8200f1ffa0e305',1,'Coroutine.h']]], + ['coroutine_5fdelay_5fmicros_15',['COROUTINE_DELAY_MICROS',['../Coroutine_8h.html#a4b620a90274d05b92509c1c5eb4666f2',1,'Coroutine.h']]], + ['coroutine_5fdelay_5fseconds_16',['COROUTINE_DELAY_SECONDS',['../Coroutine_8h.html#a80fbf69742a91980a58f719edc8920db',1,'Coroutine.h']]], + ['coroutine_5fend_17',['COROUTINE_END',['../Coroutine_8h.html#a7e326a8df652c46c42a8d713ddc67bd7',1,'Coroutine.h']]], + ['coroutine_5floop_18',['COROUTINE_LOOP',['../Coroutine_8h.html#adad73df0853c1d3040b88b3cd0a04c0e',1,'Coroutine.h']]], + ['coroutine_5fyield_19',['COROUTINE_YIELD',['../Coroutine_8h.html#a682abe1669f9fe28af63d11da5421cbf',1,'Coroutine.h']]], + ['coroutine_5fyield_5finternal_20',['COROUTINE_YIELD_INTERNAL',['../Coroutine_8h.html#a53efafb6fd212ea352f5ad52ea9bc393',1,'Coroutine.h']]], + ['coroutinemicros_21',['coroutineMicros',['../classace__routine_1_1CoroutineTemplate.html#a41acb66b780bc0153117915024811949',1,'ace_routine::CoroutineTemplate']]], + ['coroutinemillis_22',['coroutineMillis',['../classace__routine_1_1CoroutineTemplate.html#ad679cad7fc488bc15145d484b6e61364',1,'ace_routine::CoroutineTemplate']]], + ['coroutineprofiler_23',['CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html',1,'ace_routine::CoroutineProfiler'],['../classace__routine_1_1CoroutineProfiler.html#a91a16875699abfda9383b9f29e4f040f',1,'ace_routine::CoroutineProfiler::CoroutineProfiler()']]], + ['coroutineschedulertemplate_24',['CoroutineSchedulerTemplate',['../classace__routine_1_1CoroutineSchedulerTemplate.html',1,'ace_routine']]], + ['coroutineseconds_25',['coroutineSeconds',['../classace__routine_1_1CoroutineTemplate.html#af25c1de1f753912444725f899dfffcb3',1,'ace_routine::CoroutineTemplate']]], + ['coroutinetemplate_26',['CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html',1,'ace_routine::CoroutineTemplate< T_CLOCK, T_DELAY >'],['../classace__routine_1_1CoroutineTemplate.html#aebb72dfa544cba3ebcdd5d7647ca8255',1,'ace_routine::CoroutineTemplate::CoroutineTemplate()']]], + ['createprofilers_27',['createProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#ae8a4228ae33f977c6fe3584eee71beec',1,'ace_routine::LogBinProfilerTemplate']]] ]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html index b26d916..02cfffc 100644 --- a/docs/html/search/all_2.html +++ b/docs/html/search/all_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js index 93b9a46..dd3ad11 100644 --- a/docs/html/search/all_2.js +++ b/docs/html/search/all_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['deleteprofilers_27',['deleteProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#aa17d5b61420362896fb96e03ed5195aa',1,'ace_routine::LogBinProfilerTemplate']]] + ['deleteprofilers_28',['deleteProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#aa17d5b61420362896fb96e03ed5195aa',1,'ace_routine::LogBinProfilerTemplate']]] ]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html index b61b96f..39767b8 100644 --- a/docs/html/search/all_3.html +++ b/docs/html/search/all_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js index bd1956d..a886200 100644 --- a/docs/html/search/all_3.js +++ b/docs/html/search/all_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['extern_5fcoroutine_28',['EXTERN_COROUTINE',['../Coroutine_8h.html#a79f1cf897012bbc4df5565f61adc3028',1,'Coroutine.h']]], - ['extern_5fcoroutine1_29',['EXTERN_COROUTINE1',['../Coroutine_8h.html#ab92199c3991124cbb6e5e48e27827dae',1,'Coroutine.h']]], - ['extern_5fcoroutine2_30',['EXTERN_COROUTINE2',['../Coroutine_8h.html#af52549e71d4a6f7bd18c4688042776b6',1,'Coroutine.h']]] + ['extern_5fcoroutine_29',['EXTERN_COROUTINE',['../Coroutine_8h.html#a79f1cf897012bbc4df5565f61adc3028',1,'Coroutine.h']]], + ['extern_5fcoroutine1_30',['EXTERN_COROUTINE1',['../Coroutine_8h.html#ab92199c3991124cbb6e5e48e27827dae',1,'Coroutine.h']]], + ['extern_5fcoroutine2_31',['EXTERN_COROUTINE2',['../Coroutine_8h.html#af52549e71d4a6f7bd18c4688042776b6',1,'Coroutine.h']]] ]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html index 06de155..fc40463 100644 --- a/docs/html/search/all_4.html +++ b/docs/html/search/all_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index 78bef2f..e510d53 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['fpstr_31',['FPSTR',['../compat_8h.html#aaa60649c7ffe7ed1fbe16dc20ed7e8c3',1,'compat.h']]] + ['fpstr_32',['FPSTR',['../compat_8h.html#aaa60649c7ffe7ed1fbe16dc20ed7e8c3',1,'compat.h']]] ]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html index 2544c4e..9dd9344 100644 --- a/docs/html/search/all_5.html +++ b/docs/html/search/all_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js index 07ef6d4..a5e7a50 100644 --- a/docs/html/search/all_5.js +++ b/docs/html/search/all_5.js @@ -1,13 +1,13 @@ var searchData= [ - ['get_5fcoroutine_32',['GET_COROUTINE',['../Coroutine_8h.html#a29e8a48695c9c365bdd589c061afba99',1,'Coroutine.h']]], - ['get_5fextern_5fcoroutine_33',['GET_EXTERN_COROUTINE',['../Coroutine_8h.html#ab7a5384c8d2a434781a52a7e9b45c24d',1,'Coroutine.h']]], - ['getcname_34',['getCName',['../classace__routine_1_1CoroutineTemplate.html#a537cd72830607b0d920fe11d5116ebee',1,'ace_routine::CoroutineTemplate']]], - ['getfname_35',['getFName',['../classace__routine_1_1CoroutineTemplate.html#aea353e510c0371ca5fe1d69da7a330af',1,'ace_routine::CoroutineTemplate']]], - ['getjump_36',['getJump',['../classace__routine_1_1CoroutineTemplate.html#a1e0862b2dd17cdf735e17af33dd1dfca',1,'ace_routine::CoroutineTemplate']]], - ['getnametype_37',['getNameType',['../classace__routine_1_1CoroutineTemplate.html#a4ec22d153b80d295de875cd75b641d20',1,'ace_routine::CoroutineTemplate']]], - ['getnext_38',['getNext',['../classace__routine_1_1CoroutineTemplate.html#a06d1cd713b79b1992cb8dff54f3c7f34',1,'ace_routine::CoroutineTemplate']]], - ['getprofiler_39',['getProfiler',['../classace__routine_1_1CoroutineTemplate.html#ac630c28cd2eb9c02b35747507e55838f',1,'ace_routine::CoroutineTemplate']]], - ['getroot_40',['getRoot',['../classace__routine_1_1CoroutineTemplate.html#aa920e51de2d6c1b7f070bb332f0cd2ba',1,'ace_routine::CoroutineTemplate']]], - ['getstatus_41',['getStatus',['../classace__routine_1_1CoroutineTemplate.html#a96117a7d8ef04593eff65a0df19ac5a4',1,'ace_routine::CoroutineTemplate']]] + ['get_5fcoroutine_33',['GET_COROUTINE',['../Coroutine_8h.html#a29e8a48695c9c365bdd589c061afba99',1,'Coroutine.h']]], + ['get_5fextern_5fcoroutine_34',['GET_EXTERN_COROUTINE',['../Coroutine_8h.html#ab7a5384c8d2a434781a52a7e9b45c24d',1,'Coroutine.h']]], + ['getcname_35',['getCName',['../classace__routine_1_1CoroutineTemplate.html#a537cd72830607b0d920fe11d5116ebee',1,'ace_routine::CoroutineTemplate']]], + ['getfname_36',['getFName',['../classace__routine_1_1CoroutineTemplate.html#aea353e510c0371ca5fe1d69da7a330af',1,'ace_routine::CoroutineTemplate']]], + ['getjump_37',['getJump',['../classace__routine_1_1CoroutineTemplate.html#a1e0862b2dd17cdf735e17af33dd1dfca',1,'ace_routine::CoroutineTemplate']]], + ['getnametype_38',['getNameType',['../classace__routine_1_1CoroutineTemplate.html#a4ec22d153b80d295de875cd75b641d20',1,'ace_routine::CoroutineTemplate']]], + ['getnext_39',['getNext',['../classace__routine_1_1CoroutineTemplate.html#a06d1cd713b79b1992cb8dff54f3c7f34',1,'ace_routine::CoroutineTemplate']]], + ['getprofiler_40',['getProfiler',['../classace__routine_1_1CoroutineTemplate.html#ac630c28cd2eb9c02b35747507e55838f',1,'ace_routine::CoroutineTemplate']]], + ['getroot_41',['getRoot',['../classace__routine_1_1CoroutineTemplate.html#aa920e51de2d6c1b7f070bb332f0cd2ba',1,'ace_routine::CoroutineTemplate']]], + ['getstatus_42',['getStatus',['../classace__routine_1_1CoroutineTemplate.html#a96117a7d8ef04593eff65a0df19ac5a4',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html index 43f14ea..f1e516d 100644 --- a/docs/html/search/all_6.html +++ b/docs/html/search/all_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js index 8bac89d..905b1d0 100644 --- a/docs/html/search/all_6.js +++ b/docs/html/search/all_6.js @@ -1,13 +1,13 @@ var searchData= [ - ['isdelayexpired_42',['isDelayExpired',['../classace__routine_1_1CoroutineTemplate.html#adab02ac8807017d168b0ba1c5cec3920',1,'ace_routine::CoroutineTemplate']]], - ['isdelaying_43',['isDelaying',['../classace__routine_1_1CoroutineTemplate.html#a731663b0141022c126e9368e1dfe3e17',1,'ace_routine::CoroutineTemplate']]], - ['isdelaymicrosexpired_44',['isDelayMicrosExpired',['../classace__routine_1_1CoroutineTemplate.html#acd7d7d1d81f507a04e7a9db8b8820381',1,'ace_routine::CoroutineTemplate']]], - ['isdelaysecondsexpired_45',['isDelaySecondsExpired',['../classace__routine_1_1CoroutineTemplate.html#a122e9d35f313975df73ac49afaaa3015',1,'ace_routine::CoroutineTemplate']]], - ['isdone_46',['isDone',['../classace__routine_1_1CoroutineTemplate.html#ad753c3b474c659fa6684bde0bd20919c',1,'ace_routine::CoroutineTemplate']]], - ['isending_47',['isEnding',['../classace__routine_1_1CoroutineTemplate.html#ad7d690556138014c63be958b0a125516',1,'ace_routine::CoroutineTemplate']]], - ['isrunning_48',['isRunning',['../classace__routine_1_1CoroutineTemplate.html#a733385866face30c4fc4223780c1b47e',1,'ace_routine::CoroutineTemplate']]], - ['issuspended_49',['isSuspended',['../classace__routine_1_1CoroutineTemplate.html#aa0f33aa5a6197aa143e86708d7f6fb15',1,'ace_routine::CoroutineTemplate']]], - ['isterminated_50',['isTerminated',['../classace__routine_1_1CoroutineTemplate.html#a5c74778815c76301895765e7485b4bf8',1,'ace_routine::CoroutineTemplate']]], - ['isyielding_51',['isYielding',['../classace__routine_1_1CoroutineTemplate.html#a9c07ae01d589335fa5728210de000755',1,'ace_routine::CoroutineTemplate']]] + ['isdelayexpired_43',['isDelayExpired',['../classace__routine_1_1CoroutineTemplate.html#adab02ac8807017d168b0ba1c5cec3920',1,'ace_routine::CoroutineTemplate']]], + ['isdelaying_44',['isDelaying',['../classace__routine_1_1CoroutineTemplate.html#a731663b0141022c126e9368e1dfe3e17',1,'ace_routine::CoroutineTemplate']]], + ['isdelaymicrosexpired_45',['isDelayMicrosExpired',['../classace__routine_1_1CoroutineTemplate.html#acd7d7d1d81f507a04e7a9db8b8820381',1,'ace_routine::CoroutineTemplate']]], + ['isdelaysecondsexpired_46',['isDelaySecondsExpired',['../classace__routine_1_1CoroutineTemplate.html#a122e9d35f313975df73ac49afaaa3015',1,'ace_routine::CoroutineTemplate']]], + ['isdone_47',['isDone',['../classace__routine_1_1CoroutineTemplate.html#ad753c3b474c659fa6684bde0bd20919c',1,'ace_routine::CoroutineTemplate']]], + ['isending_48',['isEnding',['../classace__routine_1_1CoroutineTemplate.html#ad7d690556138014c63be958b0a125516',1,'ace_routine::CoroutineTemplate']]], + ['isrunning_49',['isRunning',['../classace__routine_1_1CoroutineTemplate.html#a733385866face30c4fc4223780c1b47e',1,'ace_routine::CoroutineTemplate']]], + ['issuspended_50',['isSuspended',['../classace__routine_1_1CoroutineTemplate.html#aa0f33aa5a6197aa143e86708d7f6fb15',1,'ace_routine::CoroutineTemplate']]], + ['isterminated_51',['isTerminated',['../classace__routine_1_1CoroutineTemplate.html#a5c74778815c76301895765e7485b4bf8',1,'ace_routine::CoroutineTemplate']]], + ['isyielding_52',['isYielding',['../classace__routine_1_1CoroutineTemplate.html#a9c07ae01d589335fa5728210de000755',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html index af52f82..8ddbf6c 100644 --- a/docs/html/search/all_7.html +++ b/docs/html/search/all_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index d2f989d..e6da8fb 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -1,12 +1,12 @@ var searchData= [ - ['knametypecstring_52',['kNameTypeCString',['../classace__routine_1_1CoroutineTemplate.html#ac2c0bed6845b265a15d047f5fb9e1f2a',1,'ace_routine::CoroutineTemplate']]], - ['knametypefstring_53',['kNameTypeFString',['../classace__routine_1_1CoroutineTemplate.html#af5edcad4909c75a7dfe85f5b59135d1b',1,'ace_routine::CoroutineTemplate']]], - ['knumbins_54',['kNumBins',['../classace__routine_1_1LogBinProfilerTemplate.html#af25fa69ddc686411422f38a2e7a461ee',1,'ace_routine::LogBinProfilerTemplate']]], - ['kstatusdelaying_55',['kStatusDelaying',['../classace__routine_1_1CoroutineTemplate.html#affeba86cf0732cd88588732cc29e3fb3',1,'ace_routine::CoroutineTemplate']]], - ['kstatusending_56',['kStatusEnding',['../classace__routine_1_1CoroutineTemplate.html#a300f41394630bc6324b7749afbb8e583',1,'ace_routine::CoroutineTemplate']]], - ['kstatusrunning_57',['kStatusRunning',['../classace__routine_1_1CoroutineTemplate.html#af35a3db36cc75dce8aa9196ff3d4068b',1,'ace_routine::CoroutineTemplate']]], - ['kstatussuspended_58',['kStatusSuspended',['../classace__routine_1_1CoroutineTemplate.html#af9b629c958610313eb1c0dc2d63cf047',1,'ace_routine::CoroutineTemplate']]], - ['kstatusterminated_59',['kStatusTerminated',['../classace__routine_1_1CoroutineTemplate.html#aee76b758eb2c683b1823f05433bc13ee',1,'ace_routine::CoroutineTemplate']]], - ['kstatusyielding_60',['kStatusYielding',['../classace__routine_1_1CoroutineTemplate.html#a803df9549b871e9071eb48b5a896cea7',1,'ace_routine::CoroutineTemplate']]] + ['knametypecstring_53',['kNameTypeCString',['../classace__routine_1_1CoroutineTemplate.html#ac2c0bed6845b265a15d047f5fb9e1f2a',1,'ace_routine::CoroutineTemplate']]], + ['knametypefstring_54',['kNameTypeFString',['../classace__routine_1_1CoroutineTemplate.html#af5edcad4909c75a7dfe85f5b59135d1b',1,'ace_routine::CoroutineTemplate']]], + ['knumbins_55',['kNumBins',['../classace__routine_1_1LogBinProfilerTemplate.html#af25fa69ddc686411422f38a2e7a461ee',1,'ace_routine::LogBinProfilerTemplate']]], + ['kstatusdelaying_56',['kStatusDelaying',['../classace__routine_1_1CoroutineTemplate.html#affeba86cf0732cd88588732cc29e3fb3',1,'ace_routine::CoroutineTemplate']]], + ['kstatusending_57',['kStatusEnding',['../classace__routine_1_1CoroutineTemplate.html#a300f41394630bc6324b7749afbb8e583',1,'ace_routine::CoroutineTemplate']]], + ['kstatusrunning_58',['kStatusRunning',['../classace__routine_1_1CoroutineTemplate.html#af35a3db36cc75dce8aa9196ff3d4068b',1,'ace_routine::CoroutineTemplate']]], + ['kstatussuspended_59',['kStatusSuspended',['../classace__routine_1_1CoroutineTemplate.html#af9b629c958610313eb1c0dc2d63cf047',1,'ace_routine::CoroutineTemplate']]], + ['kstatusterminated_60',['kStatusTerminated',['../classace__routine_1_1CoroutineTemplate.html#aee76b758eb2c683b1823f05433bc13ee',1,'ace_routine::CoroutineTemplate']]], + ['kstatusyielding_61',['kStatusYielding',['../classace__routine_1_1CoroutineTemplate.html#a803df9549b871e9071eb48b5a896cea7',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html index cf2b5df..83c55ae 100644 --- a/docs/html/search/all_8.html +++ b/docs/html/search/all_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js index 281fb6f..65ff8f2 100644 --- a/docs/html/search/all_8.js +++ b/docs/html/search/all_8.js @@ -1,9 +1,9 @@ var searchData= [ - ['list_61',['list',['../classace__routine_1_1CoroutineSchedulerTemplate.html#adfe184942d2691e1b4c8774623722d8e',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['logbinjsonrenderertemplate_62',['LogBinJsonRendererTemplate',['../classace__routine_1_1LogBinJsonRendererTemplate.html',1,'ace_routine']]], - ['logbinprofilertemplate_63',['LogBinProfilerTemplate',['../classace__routine_1_1LogBinProfilerTemplate.html',1,'ace_routine::LogBinProfilerTemplate< T_COROUTINE >'],['../classace__routine_1_1LogBinProfilerTemplate.html#a761a35277eac30dcd74c5ba5957df7df',1,'ace_routine::LogBinProfilerTemplate::LogBinProfilerTemplate()']]], - ['logbintablerenderertemplate_64',['LogBinTableRendererTemplate',['../classace__routine_1_1LogBinTableRendererTemplate.html',1,'ace_routine']]], - ['loop_65',['loop',['../classace__routine_1_1CoroutineSchedulerTemplate.html#abf192f6066f9a7cc80219461966cba2f',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['loopwithprofiler_66',['loopWithProfiler',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a63c906ac67be3feb9cf6b64efef1c866',1,'ace_routine::CoroutineSchedulerTemplate']]] + ['list_62',['list',['../classace__routine_1_1CoroutineSchedulerTemplate.html#adfe184942d2691e1b4c8774623722d8e',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['logbinjsonrenderertemplate_63',['LogBinJsonRendererTemplate',['../classace__routine_1_1LogBinJsonRendererTemplate.html',1,'ace_routine']]], + ['logbinprofilertemplate_64',['LogBinProfilerTemplate',['../classace__routine_1_1LogBinProfilerTemplate.html',1,'ace_routine::LogBinProfilerTemplate< T_COROUTINE >'],['../classace__routine_1_1LogBinProfilerTemplate.html#a761a35277eac30dcd74c5ba5957df7df',1,'ace_routine::LogBinProfilerTemplate::LogBinProfilerTemplate()']]], + ['logbintablerenderertemplate_65',['LogBinTableRendererTemplate',['../classace__routine_1_1LogBinTableRendererTemplate.html',1,'ace_routine']]], + ['loop_66',['loop',['../classace__routine_1_1CoroutineSchedulerTemplate.html#abf192f6066f9a7cc80219461966cba2f',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['loopwithprofiler_67',['loopWithProfiler',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a63c906ac67be3feb9cf6b64efef1c866',1,'ace_routine::CoroutineSchedulerTemplate']]] ]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html index 690785a..1e263c1 100644 --- a/docs/html/search/all_9.html +++ b/docs/html/search/all_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index b2db4df..999f9e9 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -1,14 +1,14 @@ var searchData= [ - ['mbins_67',['mBins',['../classace__routine_1_1LogBinProfilerTemplate.html#a9872d0ca3028086423c2014352394f68',1,'ace_routine::LogBinProfilerTemplate']]], - ['mdelayduration_68',['mDelayDuration',['../classace__routine_1_1CoroutineTemplate.html#a5648aae7d2c2d922a4719e5d7eeddd8a',1,'ace_routine::CoroutineTemplate']]], - ['mdelaystart_69',['mDelayStart',['../classace__routine_1_1CoroutineTemplate.html#a7c48e60b623fa01ed6b45efe95822fd0',1,'ace_routine::CoroutineTemplate']]], - ['micros_70',['micros',['../classace__routine_1_1ClockInterface.html#ab8963dc53edb04d3ab800eac7c3b358e',1,'ace_routine::ClockInterface']]], - ['millis_71',['millis',['../classace__routine_1_1ClockInterface.html#aeb6701bd63ee8fb7dbb81efaf0ac02bf',1,'ace_routine::ClockInterface']]], - ['mjumppoint_72',['mJumpPoint',['../classace__routine_1_1CoroutineTemplate.html#aaebc2fa42fd65b6dbf87d305fd57595a',1,'ace_routine::CoroutineTemplate']]], - ['mname_73',['mName',['../classace__routine_1_1CoroutineTemplate.html#a8008de77ec60f569fff0a392317b1a22',1,'ace_routine::CoroutineTemplate']]], - ['mnametype_74',['mNameType',['../classace__routine_1_1CoroutineTemplate.html#aaf7ab2306cfb11e2e99b1027233ce706',1,'ace_routine::CoroutineTemplate']]], - ['mnext_75',['mNext',['../classace__routine_1_1CoroutineTemplate.html#ae91d27950ff42e3aac63e47c5889caeb',1,'ace_routine::CoroutineTemplate']]], - ['mprofiler_76',['mProfiler',['../classace__routine_1_1CoroutineTemplate.html#a541efc6473dd13e1174a683ba0173cce',1,'ace_routine::CoroutineTemplate']]], - ['mstatus_77',['mStatus',['../classace__routine_1_1CoroutineTemplate.html#a989fa3e73aef42e475a7f034d9407bd2',1,'ace_routine::CoroutineTemplate']]] + ['mbins_68',['mBins',['../classace__routine_1_1LogBinProfilerTemplate.html#a9872d0ca3028086423c2014352394f68',1,'ace_routine::LogBinProfilerTemplate']]], + ['mdelayduration_69',['mDelayDuration',['../classace__routine_1_1CoroutineTemplate.html#a5648aae7d2c2d922a4719e5d7eeddd8a',1,'ace_routine::CoroutineTemplate']]], + ['mdelaystart_70',['mDelayStart',['../classace__routine_1_1CoroutineTemplate.html#a7c48e60b623fa01ed6b45efe95822fd0',1,'ace_routine::CoroutineTemplate']]], + ['micros_71',['micros',['../classace__routine_1_1ClockInterface.html#ab8963dc53edb04d3ab800eac7c3b358e',1,'ace_routine::ClockInterface']]], + ['millis_72',['millis',['../classace__routine_1_1ClockInterface.html#aeb6701bd63ee8fb7dbb81efaf0ac02bf',1,'ace_routine::ClockInterface']]], + ['mjumppoint_73',['mJumpPoint',['../classace__routine_1_1CoroutineTemplate.html#aaebc2fa42fd65b6dbf87d305fd57595a',1,'ace_routine::CoroutineTemplate']]], + ['mname_74',['mName',['../classace__routine_1_1CoroutineTemplate.html#a8008de77ec60f569fff0a392317b1a22',1,'ace_routine::CoroutineTemplate']]], + ['mnametype_75',['mNameType',['../classace__routine_1_1CoroutineTemplate.html#aaf7ab2306cfb11e2e99b1027233ce706',1,'ace_routine::CoroutineTemplate']]], + ['mnext_76',['mNext',['../classace__routine_1_1CoroutineTemplate.html#ae91d27950ff42e3aac63e47c5889caeb',1,'ace_routine::CoroutineTemplate']]], + ['mprofiler_77',['mProfiler',['../classace__routine_1_1CoroutineTemplate.html#a541efc6473dd13e1174a683ba0173cce',1,'ace_routine::CoroutineTemplate']]], + ['mstatus_78',['mStatus',['../classace__routine_1_1CoroutineTemplate.html#a989fa3e73aef42e475a7f034d9407bd2',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html index f2f3d3a..3a6cac1 100644 --- a/docs/html/search/all_a.html +++ b/docs/html/search/all_a.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js index 12e8212..6c63612 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,6 +1,6 @@ var searchData= [ - ['printnameto_78',['printNameTo',['../classace__routine_1_1CoroutineTemplate.html#a62cbb1e87f55ffb06a5ecbc60b3cf361',1,'ace_routine::CoroutineTemplate']]], - ['printto_79',['printTo',['../classace__routine_1_1LogBinJsonRendererTemplate.html#aec5865839acf21c5460042b4d2c4aa1e',1,'ace_routine::LogBinJsonRendererTemplate::printTo()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a1e047b82a91c015425ef4453a863b5c3',1,'ace_routine::LogBinTableRendererTemplate::printTo()']]], - ['profiler_80',['Profiler',['../classace__routine_1_1LogBinJsonRendererTemplate.html#ab5d0a981189b55dbc175adc487570283',1,'ace_routine::LogBinJsonRendererTemplate::Profiler()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a0db94e7cfc0b34dd12f012b7b7959e35',1,'ace_routine::LogBinTableRendererTemplate::Profiler()']]] + ['printnameto_79',['printNameTo',['../classace__routine_1_1CoroutineTemplate.html#a62cbb1e87f55ffb06a5ecbc60b3cf361',1,'ace_routine::CoroutineTemplate']]], + ['printto_80',['printTo',['../classace__routine_1_1LogBinJsonRendererTemplate.html#aec5865839acf21c5460042b4d2c4aa1e',1,'ace_routine::LogBinJsonRendererTemplate::printTo()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a1e047b82a91c015425ef4453a863b5c3',1,'ace_routine::LogBinTableRendererTemplate::printTo()']]], + ['profiler_81',['Profiler',['../classace__routine_1_1LogBinJsonRendererTemplate.html#ab5d0a981189b55dbc175adc487570283',1,'ace_routine::LogBinJsonRendererTemplate::Profiler()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a0db94e7cfc0b34dd12f012b7b7959e35',1,'ace_routine::LogBinTableRendererTemplate::Profiler()']]] ]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html index 14f3403..130deb4 100644 --- a/docs/html/search/all_b.html +++ b/docs/html/search/all_b.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index 42255b6..e62f5db 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,8 +1,8 @@ var searchData= [ - ['read_81',['read',['../classace__routine_1_1Channel.html#a931ce2344667a4b36e76bb4f8f3b70a0',1,'ace_routine::Channel']]], - ['reset_82',['reset',['../classace__routine_1_1CoroutineTemplate.html#a1adcb8c720aa9c452fcbd10274325380',1,'ace_routine::CoroutineTemplate']]], - ['resume_83',['resume',['../classace__routine_1_1CoroutineTemplate.html#a148bb40a4b373e322ea1ed5bad0fadc1',1,'ace_routine::CoroutineTemplate']]], - ['runcoroutine_84',['runCoroutine',['../classace__routine_1_1CoroutineTemplate.html#a6c03c8f778f5cf38f25a07de8186ea1e',1,'ace_routine::CoroutineTemplate']]], - ['runcoroutinewithprofiler_85',['runCoroutineWithProfiler',['../classace__routine_1_1CoroutineTemplate.html#a544e4c65d0e309eb18eb4a60cb5c069f',1,'ace_routine::CoroutineTemplate']]] + ['read_82',['read',['../classace__routine_1_1Channel.html#a931ce2344667a4b36e76bb4f8f3b70a0',1,'ace_routine::Channel']]], + ['reset_83',['reset',['../classace__routine_1_1CoroutineTemplate.html#a1adcb8c720aa9c452fcbd10274325380',1,'ace_routine::CoroutineTemplate']]], + ['resume_84',['resume',['../classace__routine_1_1CoroutineTemplate.html#a148bb40a4b373e322ea1ed5bad0fadc1',1,'ace_routine::CoroutineTemplate']]], + ['runcoroutine_85',['runCoroutine',['../classace__routine_1_1CoroutineTemplate.html#a6c03c8f778f5cf38f25a07de8186ea1e',1,'ace_routine::CoroutineTemplate']]], + ['runcoroutinewithprofiler_86',['runCoroutineWithProfiler',['../classace__routine_1_1CoroutineTemplate.html#a544e4c65d0e309eb18eb4a60cb5c069f',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html index da60ab8..3dd5af0 100644 --- a/docs/html/search/all_c.html +++ b/docs/html/search/all_c.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index 0d2f558..bb43606 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,22 +1,22 @@ var searchData= [ - ['seconds_86',['seconds',['../classace__routine_1_1ClockInterface.html#a03c0d39e0167f8a8e7c41f09d19d2861',1,'ace_routine::ClockInterface']]], - ['setdelaying_87',['setDelaying',['../classace__routine_1_1CoroutineTemplate.html#a8385fb083c393f7a75519e044e34c24e',1,'ace_routine::CoroutineTemplate']]], - ['setdelaymicros_88',['setDelayMicros',['../classace__routine_1_1CoroutineTemplate.html#a1d86ec7546a240864dda1246a71e769f',1,'ace_routine::CoroutineTemplate']]], - ['setdelaymillis_89',['setDelayMillis',['../classace__routine_1_1CoroutineTemplate.html#a1e529439de0abbeebec6e435718dc11d',1,'ace_routine::CoroutineTemplate']]], - ['setdelayseconds_90',['setDelaySeconds',['../classace__routine_1_1CoroutineTemplate.html#ab9e8a2e33791b28bec4ebfd77da11964',1,'ace_routine::CoroutineTemplate']]], - ['setending_91',['setEnding',['../classace__routine_1_1CoroutineTemplate.html#abab3b941fcc45839a5bf293668be9f98',1,'ace_routine::CoroutineTemplate']]], - ['setjump_92',['setJump',['../classace__routine_1_1CoroutineTemplate.html#a4b38c16e0c2452257b3e4214877012e8',1,'ace_routine::CoroutineTemplate']]], - ['setname_93',['setName',['../classace__routine_1_1CoroutineTemplate.html#a0f7388cc07f020d22a83b35eb40ec683',1,'ace_routine::CoroutineTemplate::setName(const char *name)'],['../classace__routine_1_1CoroutineTemplate.html#a712fee99519863c145630f9d218402f8',1,'ace_routine::CoroutineTemplate::setName(const __FlashStringHelper *name)']]], - ['setprofiler_94',['setProfiler',['../classace__routine_1_1CoroutineTemplate.html#ad8c240de1ddbf42bdf4a8f4501b82b23',1,'ace_routine::CoroutineTemplate']]], - ['setrunning_95',['setRunning',['../classace__routine_1_1CoroutineTemplate.html#a99f1300b9bee0e72d05498b26141a352',1,'ace_routine::CoroutineTemplate']]], - ['setterminated_96',['setTerminated',['../classace__routine_1_1CoroutineTemplate.html#ac85d1306aa5a7e5f5650102e452807b3',1,'ace_routine::CoroutineTemplate']]], - ['setup_97',['setup',['../classace__routine_1_1CoroutineSchedulerTemplate.html#ac792080cdec6db9f6539a446d7af587c',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['setupcoroutine_98',['setupCoroutine',['../classace__routine_1_1CoroutineTemplate.html#ac58fe49c8cad0803c88862210b0f033d',1,'ace_routine::CoroutineTemplate::setupCoroutine()'],['../classace__routine_1_1CoroutineTemplate.html#a4ea28bb329a82952991efbcfd10d1d0f',1,'ace_routine::CoroutineTemplate::setupCoroutine(const char *) ACE_ROUTINE_DEPRECATED'],['../classace__routine_1_1CoroutineTemplate.html#aae5a4ce06c6590690b5ae94be777f451',1,'ace_routine::CoroutineTemplate::setupCoroutine(const __FlashStringHelper *) ACE_ROUTINE_DEPRECATED']]], - ['setupcoroutines_99',['setupCoroutines',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a86ebd507e675b913301f92af0a34abde',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['setvalue_100',['setValue',['../classace__routine_1_1Channel.html#ab950ccdf77fdfaeea67ac19031733229',1,'ace_routine::Channel']]], - ['setyielding_101',['setYielding',['../classace__routine_1_1CoroutineTemplate.html#aae7d3ddffa9fcc843984808ac3664dac',1,'ace_routine::CoroutineTemplate']]], - ['status_102',['Status',['../classace__routine_1_1CoroutineTemplate.html#a8dab8bf9ee0a90bf3cb89714d09509a5',1,'ace_routine::CoroutineTemplate']]], - ['statusprintto_103',['statusPrintTo',['../classace__routine_1_1CoroutineTemplate.html#afff00a9882832e76485982560262f441',1,'ace_routine::CoroutineTemplate']]], - ['suspend_104',['suspend',['../classace__routine_1_1CoroutineTemplate.html#a546f751274bbd9658a9106399dec1a00',1,'ace_routine::CoroutineTemplate']]] + ['seconds_87',['seconds',['../classace__routine_1_1ClockInterface.html#a03c0d39e0167f8a8e7c41f09d19d2861',1,'ace_routine::ClockInterface']]], + ['setdelaying_88',['setDelaying',['../classace__routine_1_1CoroutineTemplate.html#a8385fb083c393f7a75519e044e34c24e',1,'ace_routine::CoroutineTemplate']]], + ['setdelaymicros_89',['setDelayMicros',['../classace__routine_1_1CoroutineTemplate.html#a1d86ec7546a240864dda1246a71e769f',1,'ace_routine::CoroutineTemplate']]], + ['setdelaymillis_90',['setDelayMillis',['../classace__routine_1_1CoroutineTemplate.html#a1e529439de0abbeebec6e435718dc11d',1,'ace_routine::CoroutineTemplate']]], + ['setdelayseconds_91',['setDelaySeconds',['../classace__routine_1_1CoroutineTemplate.html#ab9e8a2e33791b28bec4ebfd77da11964',1,'ace_routine::CoroutineTemplate']]], + ['setending_92',['setEnding',['../classace__routine_1_1CoroutineTemplate.html#abab3b941fcc45839a5bf293668be9f98',1,'ace_routine::CoroutineTemplate']]], + ['setjump_93',['setJump',['../classace__routine_1_1CoroutineTemplate.html#a4b38c16e0c2452257b3e4214877012e8',1,'ace_routine::CoroutineTemplate']]], + ['setname_94',['setName',['../classace__routine_1_1CoroutineTemplate.html#a0f7388cc07f020d22a83b35eb40ec683',1,'ace_routine::CoroutineTemplate::setName(const char *name)'],['../classace__routine_1_1CoroutineTemplate.html#a712fee99519863c145630f9d218402f8',1,'ace_routine::CoroutineTemplate::setName(const __FlashStringHelper *name)']]], + ['setprofiler_95',['setProfiler',['../classace__routine_1_1CoroutineTemplate.html#ad8c240de1ddbf42bdf4a8f4501b82b23',1,'ace_routine::CoroutineTemplate']]], + ['setrunning_96',['setRunning',['../classace__routine_1_1CoroutineTemplate.html#a99f1300b9bee0e72d05498b26141a352',1,'ace_routine::CoroutineTemplate']]], + ['setterminated_97',['setTerminated',['../classace__routine_1_1CoroutineTemplate.html#ac85d1306aa5a7e5f5650102e452807b3',1,'ace_routine::CoroutineTemplate']]], + ['setup_98',['setup',['../classace__routine_1_1CoroutineSchedulerTemplate.html#ac792080cdec6db9f6539a446d7af587c',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['setupcoroutine_99',['setupCoroutine',['../classace__routine_1_1CoroutineTemplate.html#ac58fe49c8cad0803c88862210b0f033d',1,'ace_routine::CoroutineTemplate::setupCoroutine()'],['../classace__routine_1_1CoroutineTemplate.html#a4ea28bb329a82952991efbcfd10d1d0f',1,'ace_routine::CoroutineTemplate::setupCoroutine(const char *) ACE_ROUTINE_DEPRECATED'],['../classace__routine_1_1CoroutineTemplate.html#aae5a4ce06c6590690b5ae94be777f451',1,'ace_routine::CoroutineTemplate::setupCoroutine(const __FlashStringHelper *) ACE_ROUTINE_DEPRECATED']]], + ['setupcoroutines_100',['setupCoroutines',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a86ebd507e675b913301f92af0a34abde',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['setvalue_101',['setValue',['../classace__routine_1_1Channel.html#ab950ccdf77fdfaeea67ac19031733229',1,'ace_routine::Channel']]], + ['setyielding_102',['setYielding',['../classace__routine_1_1CoroutineTemplate.html#aae7d3ddffa9fcc843984808ac3664dac',1,'ace_routine::CoroutineTemplate']]], + ['status_103',['Status',['../classace__routine_1_1CoroutineTemplate.html#a8dab8bf9ee0a90bf3cb89714d09509a5',1,'ace_routine::CoroutineTemplate']]], + ['statusprintto_104',['statusPrintTo',['../classace__routine_1_1CoroutineTemplate.html#afff00a9882832e76485982560262f441',1,'ace_routine::CoroutineTemplate']]], + ['suspend_105',['suspend',['../classace__routine_1_1CoroutineTemplate.html#a546f751274bbd9658a9106399dec1a00',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html index bc376fe..af7f2f0 100644 --- a/docs/html/search/all_d.html +++ b/docs/html/search/all_d.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js index 0cc3742..9798640 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,4 +1,4 @@ var searchData= [ - ['updateelapsedmicros_105',['updateElapsedMicros',['../classace__routine_1_1CoroutineProfiler.html#a914fde78366e0572b9b307020e3729c9',1,'ace_routine::CoroutineProfiler::updateElapsedMicros()'],['../classace__routine_1_1LogBinProfilerTemplate.html#abc696834db7c1c9dcee2c9b070d0a13a',1,'ace_routine::LogBinProfilerTemplate::updateElapsedMicros()']]] + ['updateelapsedmicros_106',['updateElapsedMicros',['../classace__routine_1_1CoroutineProfiler.html#a914fde78366e0572b9b307020e3729c9',1,'ace_routine::CoroutineProfiler::updateElapsedMicros()'],['../classace__routine_1_1LogBinProfilerTemplate.html#abc696834db7c1c9dcee2c9b070d0a13a',1,'ace_routine::LogBinProfilerTemplate::updateElapsedMicros()']]] ]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html index 2e3c74d..e25df42 100644 --- a/docs/html/search/all_e.html +++ b/docs/html/search/all_e.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js index 3fec57a..50cb70a 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,4 +1,4 @@ var searchData= [ - ['write_106',['write',['../classace__routine_1_1Channel.html#ad7fa46d27162b4ec9ffa257f3881931d',1,'ace_routine::Channel::write()'],['../classace__routine_1_1Channel.html#a1134e9c905c7c0bb7255f208534355d8',1,'ace_routine::Channel::write(const T &value)']]] + ['write_107',['write',['../classace__routine_1_1Channel.html#ad7fa46d27162b4ec9ffa257f3881931d',1,'ace_routine::Channel::write()'],['../classace__routine_1_1Channel.html#a1134e9c905c7c0bb7255f208534355d8',1,'ace_routine::Channel::write(const T &value)']]] ]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html index 246f8ab..b23da6c 100644 --- a/docs/html/search/all_f.html +++ b/docs/html/search/all_f.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js index c63c6d6..9f4632e 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -1,5 +1,5 @@ var searchData= [ - ['_7ecoroutineprofiler_107',['~CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html#a8c8284bebc06998787f99cc48d7036b3',1,'ace_routine::CoroutineProfiler']]], - ['_7ecoroutinetemplate_108',['~CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html#a8a568b194cd7748b1ea40dfaf6a8fde4',1,'ace_routine::CoroutineTemplate']]] + ['_7ecoroutineprofiler_108',['~CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html#a8c8284bebc06998787f99cc48d7036b3',1,'ace_routine::CoroutineProfiler']]], + ['_7ecoroutinetemplate_109',['~CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html#a8a568b194cd7748b1ea40dfaf6a8fde4',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html index f7e4c14..af8159e 100644 --- a/docs/html/search/classes_0.html +++ b/docs/html/search/classes_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js index a1ecf33..05530a0 100644 --- a/docs/html/search/classes_0.js +++ b/docs/html/search/classes_0.js @@ -1,8 +1,8 @@ var searchData= [ - ['channel_109',['Channel',['../classace__routine_1_1Channel.html',1,'ace_routine']]], - ['clockinterface_110',['ClockInterface',['../classace__routine_1_1ClockInterface.html',1,'ace_routine']]], - ['coroutineprofiler_111',['CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html',1,'ace_routine']]], - ['coroutineschedulertemplate_112',['CoroutineSchedulerTemplate',['../classace__routine_1_1CoroutineSchedulerTemplate.html',1,'ace_routine']]], - ['coroutinetemplate_113',['CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html',1,'ace_routine']]] + ['channel_110',['Channel',['../classace__routine_1_1Channel.html',1,'ace_routine']]], + ['clockinterface_111',['ClockInterface',['../classace__routine_1_1ClockInterface.html',1,'ace_routine']]], + ['coroutineprofiler_112',['CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html',1,'ace_routine']]], + ['coroutineschedulertemplate_113',['CoroutineSchedulerTemplate',['../classace__routine_1_1CoroutineSchedulerTemplate.html',1,'ace_routine']]], + ['coroutinetemplate_114',['CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html',1,'ace_routine']]] ]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html index c7ff4b3..576e916 100644 --- a/docs/html/search/classes_1.html +++ b/docs/html/search/classes_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js index 66c6524..05a20f9 100644 --- a/docs/html/search/classes_1.js +++ b/docs/html/search/classes_1.js @@ -1,6 +1,6 @@ var searchData= [ - ['logbinjsonrenderertemplate_114',['LogBinJsonRendererTemplate',['../classace__routine_1_1LogBinJsonRendererTemplate.html',1,'ace_routine']]], - ['logbinprofilertemplate_115',['LogBinProfilerTemplate',['../classace__routine_1_1LogBinProfilerTemplate.html',1,'ace_routine']]], - ['logbintablerenderertemplate_116',['LogBinTableRendererTemplate',['../classace__routine_1_1LogBinTableRendererTemplate.html',1,'ace_routine']]] + ['logbinjsonrenderertemplate_115',['LogBinJsonRendererTemplate',['../classace__routine_1_1LogBinJsonRendererTemplate.html',1,'ace_routine']]], + ['logbinprofilertemplate_116',['LogBinProfilerTemplate',['../classace__routine_1_1LogBinProfilerTemplate.html',1,'ace_routine']]], + ['logbintablerenderertemplate_117',['LogBinTableRendererTemplate',['../classace__routine_1_1LogBinTableRendererTemplate.html',1,'ace_routine']]] ]; diff --git a/docs/html/search/close.png b/docs/html/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/docs/html/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html index 2deb369..15cc3de 100644 --- a/docs/html/search/defines_0.html +++ b/docs/html/search/defines_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js index f48b6d4..b92f9d1 100644 --- a/docs/html/search/defines_0.js +++ b/docs/html/search/defines_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['ace_5froutine_5fdeprecated_203',['ACE_ROUTINE_DEPRECATED',['../Coroutine_8h.html#aa4ab589f43432a7c08a770e4c6f9b239',1,'Coroutine.h']]] + ['ace_5froutine_5fdeprecated_204',['ACE_ROUTINE_DEPRECATED',['../Coroutine_8h.html#aa4ab589f43432a7c08a770e4c6f9b239',1,'Coroutine.h']]] ]; diff --git a/docs/html/search/defines_1.html b/docs/html/search/defines_1.html index e0d0b6d..c49009c 100644 --- a/docs/html/search/defines_1.html +++ b/docs/html/search/defines_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/defines_1.js b/docs/html/search/defines_1.js index b7b6bba..69d87e9 100644 --- a/docs/html/search/defines_1.js +++ b/docs/html/search/defines_1.js @@ -1,15 +1,15 @@ var searchData= [ - ['coroutine_204',['COROUTINE',['../Coroutine_8h.html#ab22e58ab24b1908a7280f13603248ce3',1,'Coroutine.h']]], - ['coroutine1_205',['COROUTINE1',['../Coroutine_8h.html#a8d8219c8fc07650dfcdffbf83d800574',1,'Coroutine.h']]], - ['coroutine2_206',['COROUTINE2',['../Coroutine_8h.html#a04a0fdcb7293e51ddda298e237264c51',1,'Coroutine.h']]], - ['coroutine_5fawait_207',['COROUTINE_AWAIT',['../Coroutine_8h.html#a9f6714d9752740b6173b6afc4d108fa8',1,'Coroutine.h']]], - ['coroutine_5fbegin_208',['COROUTINE_BEGIN',['../Coroutine_8h.html#a7b7dc05639a37cb3f51bf348c68db283',1,'Coroutine.h']]], - ['coroutine_5fdelay_209',['COROUTINE_DELAY',['../Coroutine_8h.html#a1391503960a4b0c48f8200f1ffa0e305',1,'Coroutine.h']]], - ['coroutine_5fdelay_5fmicros_210',['COROUTINE_DELAY_MICROS',['../Coroutine_8h.html#a4b620a90274d05b92509c1c5eb4666f2',1,'Coroutine.h']]], - ['coroutine_5fdelay_5fseconds_211',['COROUTINE_DELAY_SECONDS',['../Coroutine_8h.html#a80fbf69742a91980a58f719edc8920db',1,'Coroutine.h']]], - ['coroutine_5fend_212',['COROUTINE_END',['../Coroutine_8h.html#a7e326a8df652c46c42a8d713ddc67bd7',1,'Coroutine.h']]], - ['coroutine_5floop_213',['COROUTINE_LOOP',['../Coroutine_8h.html#adad73df0853c1d3040b88b3cd0a04c0e',1,'Coroutine.h']]], - ['coroutine_5fyield_214',['COROUTINE_YIELD',['../Coroutine_8h.html#a682abe1669f9fe28af63d11da5421cbf',1,'Coroutine.h']]], - ['coroutine_5fyield_5finternal_215',['COROUTINE_YIELD_INTERNAL',['../Coroutine_8h.html#a53efafb6fd212ea352f5ad52ea9bc393',1,'Coroutine.h']]] + ['coroutine_205',['COROUTINE',['../Coroutine_8h.html#ab22e58ab24b1908a7280f13603248ce3',1,'Coroutine.h']]], + ['coroutine1_206',['COROUTINE1',['../Coroutine_8h.html#a8d8219c8fc07650dfcdffbf83d800574',1,'Coroutine.h']]], + ['coroutine2_207',['COROUTINE2',['../Coroutine_8h.html#a04a0fdcb7293e51ddda298e237264c51',1,'Coroutine.h']]], + ['coroutine_5fawait_208',['COROUTINE_AWAIT',['../Coroutine_8h.html#a9f6714d9752740b6173b6afc4d108fa8',1,'Coroutine.h']]], + ['coroutine_5fbegin_209',['COROUTINE_BEGIN',['../Coroutine_8h.html#a7b7dc05639a37cb3f51bf348c68db283',1,'Coroutine.h']]], + ['coroutine_5fdelay_210',['COROUTINE_DELAY',['../Coroutine_8h.html#a1391503960a4b0c48f8200f1ffa0e305',1,'Coroutine.h']]], + ['coroutine_5fdelay_5fmicros_211',['COROUTINE_DELAY_MICROS',['../Coroutine_8h.html#a4b620a90274d05b92509c1c5eb4666f2',1,'Coroutine.h']]], + ['coroutine_5fdelay_5fseconds_212',['COROUTINE_DELAY_SECONDS',['../Coroutine_8h.html#a80fbf69742a91980a58f719edc8920db',1,'Coroutine.h']]], + ['coroutine_5fend_213',['COROUTINE_END',['../Coroutine_8h.html#a7e326a8df652c46c42a8d713ddc67bd7',1,'Coroutine.h']]], + ['coroutine_5floop_214',['COROUTINE_LOOP',['../Coroutine_8h.html#adad73df0853c1d3040b88b3cd0a04c0e',1,'Coroutine.h']]], + ['coroutine_5fyield_215',['COROUTINE_YIELD',['../Coroutine_8h.html#a682abe1669f9fe28af63d11da5421cbf',1,'Coroutine.h']]], + ['coroutine_5fyield_5finternal_216',['COROUTINE_YIELD_INTERNAL',['../Coroutine_8h.html#a53efafb6fd212ea352f5ad52ea9bc393',1,'Coroutine.h']]] ]; diff --git a/docs/html/search/defines_2.html b/docs/html/search/defines_2.html index 707f942..c551011 100644 --- a/docs/html/search/defines_2.html +++ b/docs/html/search/defines_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/defines_2.js b/docs/html/search/defines_2.js index b54c3c9..3faf52c 100644 --- a/docs/html/search/defines_2.js +++ b/docs/html/search/defines_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['extern_5fcoroutine_216',['EXTERN_COROUTINE',['../Coroutine_8h.html#a79f1cf897012bbc4df5565f61adc3028',1,'Coroutine.h']]], - ['extern_5fcoroutine1_217',['EXTERN_COROUTINE1',['../Coroutine_8h.html#ab92199c3991124cbb6e5e48e27827dae',1,'Coroutine.h']]], - ['extern_5fcoroutine2_218',['EXTERN_COROUTINE2',['../Coroutine_8h.html#af52549e71d4a6f7bd18c4688042776b6',1,'Coroutine.h']]] + ['extern_5fcoroutine_217',['EXTERN_COROUTINE',['../Coroutine_8h.html#a79f1cf897012bbc4df5565f61adc3028',1,'Coroutine.h']]], + ['extern_5fcoroutine1_218',['EXTERN_COROUTINE1',['../Coroutine_8h.html#ab92199c3991124cbb6e5e48e27827dae',1,'Coroutine.h']]], + ['extern_5fcoroutine2_219',['EXTERN_COROUTINE2',['../Coroutine_8h.html#af52549e71d4a6f7bd18c4688042776b6',1,'Coroutine.h']]] ]; diff --git a/docs/html/search/defines_3.html b/docs/html/search/defines_3.html index f30be10..8c6d215 100644 --- a/docs/html/search/defines_3.html +++ b/docs/html/search/defines_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/defines_3.js b/docs/html/search/defines_3.js index 21990fa..d137abc 100644 --- a/docs/html/search/defines_3.js +++ b/docs/html/search/defines_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['fpstr_219',['FPSTR',['../compat_8h.html#aaa60649c7ffe7ed1fbe16dc20ed7e8c3',1,'compat.h']]] + ['fpstr_220',['FPSTR',['../compat_8h.html#aaa60649c7ffe7ed1fbe16dc20ed7e8c3',1,'compat.h']]] ]; diff --git a/docs/html/search/defines_4.html b/docs/html/search/defines_4.html index 046ad4a..f4afac1 100644 --- a/docs/html/search/defines_4.html +++ b/docs/html/search/defines_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/defines_4.js b/docs/html/search/defines_4.js index e4d39e2..b42f5cd 100644 --- a/docs/html/search/defines_4.js +++ b/docs/html/search/defines_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['get_5fcoroutine_220',['GET_COROUTINE',['../Coroutine_8h.html#a29e8a48695c9c365bdd589c061afba99',1,'Coroutine.h']]], - ['get_5fextern_5fcoroutine_221',['GET_EXTERN_COROUTINE',['../Coroutine_8h.html#ab7a5384c8d2a434781a52a7e9b45c24d',1,'Coroutine.h']]] + ['get_5fcoroutine_221',['GET_COROUTINE',['../Coroutine_8h.html#a29e8a48695c9c365bdd589c061afba99',1,'Coroutine.h']]], + ['get_5fextern_5fcoroutine_222',['GET_EXTERN_COROUTINE',['../Coroutine_8h.html#ab7a5384c8d2a434781a52a7e9b45c24d',1,'Coroutine.h']]] ]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html index 737608e..9498842 100644 --- a/docs/html/search/files_0.html +++ b/docs/html/search/files_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js index cf64d8e..87fecff 100644 --- a/docs/html/search/files_0.js +++ b/docs/html/search/files_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['compat_2eh_117',['compat.h',['../compat_8h.html',1,'']]], - ['coroutine_2eh_118',['Coroutine.h',['../Coroutine_8h.html',1,'']]] + ['compat_2eh_118',['compat.h',['../compat_8h.html',1,'']]], + ['coroutine_2eh_119',['Coroutine.h',['../Coroutine_8h.html',1,'']]] ]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html index e17c711..eb4c501 100644 --- a/docs/html/search/functions_0.html +++ b/docs/html/search/functions_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js index 740c61c..8afe126 100644 --- a/docs/html/search/functions_0.js +++ b/docs/html/search/functions_0.js @@ -1,12 +1,12 @@ var searchData= [ - ['channel_119',['Channel',['../classace__routine_1_1Channel.html#ae004356c45d9017d0e375d4468b094e2',1,'ace_routine::Channel']]], - ['clear_120',['clear',['../classace__routine_1_1LogBinProfilerTemplate.html#a2f2cf3f7602ff62ffd813650f5711673',1,'ace_routine::LogBinProfilerTemplate']]], - ['clearprofilers_121',['clearProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#a383e87c1dededb9205a5357001d832e9',1,'ace_routine::LogBinProfilerTemplate']]], - ['coroutinemicros_122',['coroutineMicros',['../classace__routine_1_1CoroutineTemplate.html#a41acb66b780bc0153117915024811949',1,'ace_routine::CoroutineTemplate']]], - ['coroutinemillis_123',['coroutineMillis',['../classace__routine_1_1CoroutineTemplate.html#ad679cad7fc488bc15145d484b6e61364',1,'ace_routine::CoroutineTemplate']]], - ['coroutineprofiler_124',['CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html#a91a16875699abfda9383b9f29e4f040f',1,'ace_routine::CoroutineProfiler']]], - ['coroutineseconds_125',['coroutineSeconds',['../classace__routine_1_1CoroutineTemplate.html#af25c1de1f753912444725f899dfffcb3',1,'ace_routine::CoroutineTemplate']]], - ['coroutinetemplate_126',['CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html#aebb72dfa544cba3ebcdd5d7647ca8255',1,'ace_routine::CoroutineTemplate']]], - ['createprofilers_127',['createProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#ae8a4228ae33f977c6fe3584eee71beec',1,'ace_routine::LogBinProfilerTemplate']]] + ['channel_120',['Channel',['../classace__routine_1_1Channel.html#ae004356c45d9017d0e375d4468b094e2',1,'ace_routine::Channel']]], + ['clear_121',['clear',['../classace__routine_1_1LogBinProfilerTemplate.html#a2f2cf3f7602ff62ffd813650f5711673',1,'ace_routine::LogBinProfilerTemplate']]], + ['clearprofilers_122',['clearProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#a383e87c1dededb9205a5357001d832e9',1,'ace_routine::LogBinProfilerTemplate']]], + ['coroutinemicros_123',['coroutineMicros',['../classace__routine_1_1CoroutineTemplate.html#a41acb66b780bc0153117915024811949',1,'ace_routine::CoroutineTemplate']]], + ['coroutinemillis_124',['coroutineMillis',['../classace__routine_1_1CoroutineTemplate.html#ad679cad7fc488bc15145d484b6e61364',1,'ace_routine::CoroutineTemplate']]], + ['coroutineprofiler_125',['CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html#a91a16875699abfda9383b9f29e4f040f',1,'ace_routine::CoroutineProfiler']]], + ['coroutineseconds_126',['coroutineSeconds',['../classace__routine_1_1CoroutineTemplate.html#af25c1de1f753912444725f899dfffcb3',1,'ace_routine::CoroutineTemplate']]], + ['coroutinetemplate_127',['CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html#aebb72dfa544cba3ebcdd5d7647ca8255',1,'ace_routine::CoroutineTemplate']]], + ['createprofilers_128',['createProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#ae8a4228ae33f977c6fe3584eee71beec',1,'ace_routine::LogBinProfilerTemplate']]] ]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html index 0ddac0a..ef4088b 100644 --- a/docs/html/search/functions_1.html +++ b/docs/html/search/functions_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js index e1d4dbc..b60c6b6 100644 --- a/docs/html/search/functions_1.js +++ b/docs/html/search/functions_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['deleteprofilers_128',['deleteProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#aa17d5b61420362896fb96e03ed5195aa',1,'ace_routine::LogBinProfilerTemplate']]] + ['deleteprofilers_129',['deleteProfilers',['../classace__routine_1_1LogBinProfilerTemplate.html#aa17d5b61420362896fb96e03ed5195aa',1,'ace_routine::LogBinProfilerTemplate']]] ]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html index 2737c5a..ca5aa10 100644 --- a/docs/html/search/functions_2.html +++ b/docs/html/search/functions_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js index 51cbe9e..5833801 100644 --- a/docs/html/search/functions_2.js +++ b/docs/html/search/functions_2.js @@ -1,11 +1,11 @@ var searchData= [ - ['getcname_129',['getCName',['../classace__routine_1_1CoroutineTemplate.html#a537cd72830607b0d920fe11d5116ebee',1,'ace_routine::CoroutineTemplate']]], - ['getfname_130',['getFName',['../classace__routine_1_1CoroutineTemplate.html#aea353e510c0371ca5fe1d69da7a330af',1,'ace_routine::CoroutineTemplate']]], - ['getjump_131',['getJump',['../classace__routine_1_1CoroutineTemplate.html#a1e0862b2dd17cdf735e17af33dd1dfca',1,'ace_routine::CoroutineTemplate']]], - ['getnametype_132',['getNameType',['../classace__routine_1_1CoroutineTemplate.html#a4ec22d153b80d295de875cd75b641d20',1,'ace_routine::CoroutineTemplate']]], - ['getnext_133',['getNext',['../classace__routine_1_1CoroutineTemplate.html#a06d1cd713b79b1992cb8dff54f3c7f34',1,'ace_routine::CoroutineTemplate']]], - ['getprofiler_134',['getProfiler',['../classace__routine_1_1CoroutineTemplate.html#ac630c28cd2eb9c02b35747507e55838f',1,'ace_routine::CoroutineTemplate']]], - ['getroot_135',['getRoot',['../classace__routine_1_1CoroutineTemplate.html#aa920e51de2d6c1b7f070bb332f0cd2ba',1,'ace_routine::CoroutineTemplate']]], - ['getstatus_136',['getStatus',['../classace__routine_1_1CoroutineTemplate.html#a96117a7d8ef04593eff65a0df19ac5a4',1,'ace_routine::CoroutineTemplate']]] + ['getcname_130',['getCName',['../classace__routine_1_1CoroutineTemplate.html#a537cd72830607b0d920fe11d5116ebee',1,'ace_routine::CoroutineTemplate']]], + ['getfname_131',['getFName',['../classace__routine_1_1CoroutineTemplate.html#aea353e510c0371ca5fe1d69da7a330af',1,'ace_routine::CoroutineTemplate']]], + ['getjump_132',['getJump',['../classace__routine_1_1CoroutineTemplate.html#a1e0862b2dd17cdf735e17af33dd1dfca',1,'ace_routine::CoroutineTemplate']]], + ['getnametype_133',['getNameType',['../classace__routine_1_1CoroutineTemplate.html#a4ec22d153b80d295de875cd75b641d20',1,'ace_routine::CoroutineTemplate']]], + ['getnext_134',['getNext',['../classace__routine_1_1CoroutineTemplate.html#a06d1cd713b79b1992cb8dff54f3c7f34',1,'ace_routine::CoroutineTemplate']]], + ['getprofiler_135',['getProfiler',['../classace__routine_1_1CoroutineTemplate.html#ac630c28cd2eb9c02b35747507e55838f',1,'ace_routine::CoroutineTemplate']]], + ['getroot_136',['getRoot',['../classace__routine_1_1CoroutineTemplate.html#aa920e51de2d6c1b7f070bb332f0cd2ba',1,'ace_routine::CoroutineTemplate']]], + ['getstatus_137',['getStatus',['../classace__routine_1_1CoroutineTemplate.html#a96117a7d8ef04593eff65a0df19ac5a4',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html index 6da86e7..d79f55b 100644 --- a/docs/html/search/functions_3.html +++ b/docs/html/search/functions_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js index ddf8f09..7f7fa4a 100644 --- a/docs/html/search/functions_3.js +++ b/docs/html/search/functions_3.js @@ -1,13 +1,13 @@ var searchData= [ - ['isdelayexpired_137',['isDelayExpired',['../classace__routine_1_1CoroutineTemplate.html#adab02ac8807017d168b0ba1c5cec3920',1,'ace_routine::CoroutineTemplate']]], - ['isdelaying_138',['isDelaying',['../classace__routine_1_1CoroutineTemplate.html#a731663b0141022c126e9368e1dfe3e17',1,'ace_routine::CoroutineTemplate']]], - ['isdelaymicrosexpired_139',['isDelayMicrosExpired',['../classace__routine_1_1CoroutineTemplate.html#acd7d7d1d81f507a04e7a9db8b8820381',1,'ace_routine::CoroutineTemplate']]], - ['isdelaysecondsexpired_140',['isDelaySecondsExpired',['../classace__routine_1_1CoroutineTemplate.html#a122e9d35f313975df73ac49afaaa3015',1,'ace_routine::CoroutineTemplate']]], - ['isdone_141',['isDone',['../classace__routine_1_1CoroutineTemplate.html#ad753c3b474c659fa6684bde0bd20919c',1,'ace_routine::CoroutineTemplate']]], - ['isending_142',['isEnding',['../classace__routine_1_1CoroutineTemplate.html#ad7d690556138014c63be958b0a125516',1,'ace_routine::CoroutineTemplate']]], - ['isrunning_143',['isRunning',['../classace__routine_1_1CoroutineTemplate.html#a733385866face30c4fc4223780c1b47e',1,'ace_routine::CoroutineTemplate']]], - ['issuspended_144',['isSuspended',['../classace__routine_1_1CoroutineTemplate.html#aa0f33aa5a6197aa143e86708d7f6fb15',1,'ace_routine::CoroutineTemplate']]], - ['isterminated_145',['isTerminated',['../classace__routine_1_1CoroutineTemplate.html#a5c74778815c76301895765e7485b4bf8',1,'ace_routine::CoroutineTemplate']]], - ['isyielding_146',['isYielding',['../classace__routine_1_1CoroutineTemplate.html#a9c07ae01d589335fa5728210de000755',1,'ace_routine::CoroutineTemplate']]] + ['isdelayexpired_138',['isDelayExpired',['../classace__routine_1_1CoroutineTemplate.html#adab02ac8807017d168b0ba1c5cec3920',1,'ace_routine::CoroutineTemplate']]], + ['isdelaying_139',['isDelaying',['../classace__routine_1_1CoroutineTemplate.html#a731663b0141022c126e9368e1dfe3e17',1,'ace_routine::CoroutineTemplate']]], + ['isdelaymicrosexpired_140',['isDelayMicrosExpired',['../classace__routine_1_1CoroutineTemplate.html#acd7d7d1d81f507a04e7a9db8b8820381',1,'ace_routine::CoroutineTemplate']]], + ['isdelaysecondsexpired_141',['isDelaySecondsExpired',['../classace__routine_1_1CoroutineTemplate.html#a122e9d35f313975df73ac49afaaa3015',1,'ace_routine::CoroutineTemplate']]], + ['isdone_142',['isDone',['../classace__routine_1_1CoroutineTemplate.html#ad753c3b474c659fa6684bde0bd20919c',1,'ace_routine::CoroutineTemplate']]], + ['isending_143',['isEnding',['../classace__routine_1_1CoroutineTemplate.html#ad7d690556138014c63be958b0a125516',1,'ace_routine::CoroutineTemplate']]], + ['isrunning_144',['isRunning',['../classace__routine_1_1CoroutineTemplate.html#a733385866face30c4fc4223780c1b47e',1,'ace_routine::CoroutineTemplate']]], + ['issuspended_145',['isSuspended',['../classace__routine_1_1CoroutineTemplate.html#aa0f33aa5a6197aa143e86708d7f6fb15',1,'ace_routine::CoroutineTemplate']]], + ['isterminated_146',['isTerminated',['../classace__routine_1_1CoroutineTemplate.html#a5c74778815c76301895765e7485b4bf8',1,'ace_routine::CoroutineTemplate']]], + ['isyielding_147',['isYielding',['../classace__routine_1_1CoroutineTemplate.html#a9c07ae01d589335fa5728210de000755',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html index 911304e..1657cad 100644 --- a/docs/html/search/functions_4.html +++ b/docs/html/search/functions_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js index 5c2de71..6013ec3 100644 --- a/docs/html/search/functions_4.js +++ b/docs/html/search/functions_4.js @@ -1,7 +1,7 @@ var searchData= [ - ['list_147',['list',['../classace__routine_1_1CoroutineSchedulerTemplate.html#adfe184942d2691e1b4c8774623722d8e',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['logbinprofilertemplate_148',['LogBinProfilerTemplate',['../classace__routine_1_1LogBinProfilerTemplate.html#a761a35277eac30dcd74c5ba5957df7df',1,'ace_routine::LogBinProfilerTemplate']]], - ['loop_149',['loop',['../classace__routine_1_1CoroutineSchedulerTemplate.html#abf192f6066f9a7cc80219461966cba2f',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['loopwithprofiler_150',['loopWithProfiler',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a63c906ac67be3feb9cf6b64efef1c866',1,'ace_routine::CoroutineSchedulerTemplate']]] + ['list_148',['list',['../classace__routine_1_1CoroutineSchedulerTemplate.html#adfe184942d2691e1b4c8774623722d8e',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['logbinprofilertemplate_149',['LogBinProfilerTemplate',['../classace__routine_1_1LogBinProfilerTemplate.html#a761a35277eac30dcd74c5ba5957df7df',1,'ace_routine::LogBinProfilerTemplate']]], + ['loop_150',['loop',['../classace__routine_1_1CoroutineSchedulerTemplate.html#abf192f6066f9a7cc80219461966cba2f',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['loopwithprofiler_151',['loopWithProfiler',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a63c906ac67be3feb9cf6b64efef1c866',1,'ace_routine::CoroutineSchedulerTemplate']]] ]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html index 61b920d..9301d6b 100644 --- a/docs/html/search/functions_5.html +++ b/docs/html/search/functions_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js index a443244..4ba5b03 100644 --- a/docs/html/search/functions_5.js +++ b/docs/html/search/functions_5.js @@ -1,5 +1,5 @@ var searchData= [ - ['micros_151',['micros',['../classace__routine_1_1ClockInterface.html#ab8963dc53edb04d3ab800eac7c3b358e',1,'ace_routine::ClockInterface']]], - ['millis_152',['millis',['../classace__routine_1_1ClockInterface.html#aeb6701bd63ee8fb7dbb81efaf0ac02bf',1,'ace_routine::ClockInterface']]] + ['micros_152',['micros',['../classace__routine_1_1ClockInterface.html#ab8963dc53edb04d3ab800eac7c3b358e',1,'ace_routine::ClockInterface']]], + ['millis_153',['millis',['../classace__routine_1_1ClockInterface.html#aeb6701bd63ee8fb7dbb81efaf0ac02bf',1,'ace_routine::ClockInterface']]] ]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html index dc70a4a..9c4f5fc 100644 --- a/docs/html/search/functions_6.html +++ b/docs/html/search/functions_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js index fb51879..2e1da64 100644 --- a/docs/html/search/functions_6.js +++ b/docs/html/search/functions_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['printnameto_153',['printNameTo',['../classace__routine_1_1CoroutineTemplate.html#a62cbb1e87f55ffb06a5ecbc60b3cf361',1,'ace_routine::CoroutineTemplate']]], - ['printto_154',['printTo',['../classace__routine_1_1LogBinJsonRendererTemplate.html#aec5865839acf21c5460042b4d2c4aa1e',1,'ace_routine::LogBinJsonRendererTemplate::printTo()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a1e047b82a91c015425ef4453a863b5c3',1,'ace_routine::LogBinTableRendererTemplate::printTo()']]] + ['printnameto_154',['printNameTo',['../classace__routine_1_1CoroutineTemplate.html#a62cbb1e87f55ffb06a5ecbc60b3cf361',1,'ace_routine::CoroutineTemplate']]], + ['printto_155',['printTo',['../classace__routine_1_1LogBinJsonRendererTemplate.html#aec5865839acf21c5460042b4d2c4aa1e',1,'ace_routine::LogBinJsonRendererTemplate::printTo()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a1e047b82a91c015425ef4453a863b5c3',1,'ace_routine::LogBinTableRendererTemplate::printTo()']]] ]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html index 7de3106..46b5c0f 100644 --- a/docs/html/search/functions_7.html +++ b/docs/html/search/functions_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js index 516be5e..3c0047f 100644 --- a/docs/html/search/functions_7.js +++ b/docs/html/search/functions_7.js @@ -1,8 +1,8 @@ var searchData= [ - ['read_155',['read',['../classace__routine_1_1Channel.html#a931ce2344667a4b36e76bb4f8f3b70a0',1,'ace_routine::Channel']]], - ['reset_156',['reset',['../classace__routine_1_1CoroutineTemplate.html#a1adcb8c720aa9c452fcbd10274325380',1,'ace_routine::CoroutineTemplate']]], - ['resume_157',['resume',['../classace__routine_1_1CoroutineTemplate.html#a148bb40a4b373e322ea1ed5bad0fadc1',1,'ace_routine::CoroutineTemplate']]], - ['runcoroutine_158',['runCoroutine',['../classace__routine_1_1CoroutineTemplate.html#a6c03c8f778f5cf38f25a07de8186ea1e',1,'ace_routine::CoroutineTemplate']]], - ['runcoroutinewithprofiler_159',['runCoroutineWithProfiler',['../classace__routine_1_1CoroutineTemplate.html#a544e4c65d0e309eb18eb4a60cb5c069f',1,'ace_routine::CoroutineTemplate']]] + ['read_156',['read',['../classace__routine_1_1Channel.html#a931ce2344667a4b36e76bb4f8f3b70a0',1,'ace_routine::Channel']]], + ['reset_157',['reset',['../classace__routine_1_1CoroutineTemplate.html#a1adcb8c720aa9c452fcbd10274325380',1,'ace_routine::CoroutineTemplate']]], + ['resume_158',['resume',['../classace__routine_1_1CoroutineTemplate.html#a148bb40a4b373e322ea1ed5bad0fadc1',1,'ace_routine::CoroutineTemplate']]], + ['runcoroutine_159',['runCoroutine',['../classace__routine_1_1CoroutineTemplate.html#a6c03c8f778f5cf38f25a07de8186ea1e',1,'ace_routine::CoroutineTemplate']]], + ['runcoroutinewithprofiler_160',['runCoroutineWithProfiler',['../classace__routine_1_1CoroutineTemplate.html#a544e4c65d0e309eb18eb4a60cb5c069f',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html index 7422be2..31a1d95 100644 --- a/docs/html/search/functions_8.html +++ b/docs/html/search/functions_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js index 988fb95..4a0d5f5 100644 --- a/docs/html/search/functions_8.js +++ b/docs/html/search/functions_8.js @@ -1,21 +1,21 @@ var searchData= [ - ['seconds_160',['seconds',['../classace__routine_1_1ClockInterface.html#a03c0d39e0167f8a8e7c41f09d19d2861',1,'ace_routine::ClockInterface']]], - ['setdelaying_161',['setDelaying',['../classace__routine_1_1CoroutineTemplate.html#a8385fb083c393f7a75519e044e34c24e',1,'ace_routine::CoroutineTemplate']]], - ['setdelaymicros_162',['setDelayMicros',['../classace__routine_1_1CoroutineTemplate.html#a1d86ec7546a240864dda1246a71e769f',1,'ace_routine::CoroutineTemplate']]], - ['setdelaymillis_163',['setDelayMillis',['../classace__routine_1_1CoroutineTemplate.html#a1e529439de0abbeebec6e435718dc11d',1,'ace_routine::CoroutineTemplate']]], - ['setdelayseconds_164',['setDelaySeconds',['../classace__routine_1_1CoroutineTemplate.html#ab9e8a2e33791b28bec4ebfd77da11964',1,'ace_routine::CoroutineTemplate']]], - ['setending_165',['setEnding',['../classace__routine_1_1CoroutineTemplate.html#abab3b941fcc45839a5bf293668be9f98',1,'ace_routine::CoroutineTemplate']]], - ['setjump_166',['setJump',['../classace__routine_1_1CoroutineTemplate.html#a4b38c16e0c2452257b3e4214877012e8',1,'ace_routine::CoroutineTemplate']]], - ['setname_167',['setName',['../classace__routine_1_1CoroutineTemplate.html#a0f7388cc07f020d22a83b35eb40ec683',1,'ace_routine::CoroutineTemplate::setName(const char *name)'],['../classace__routine_1_1CoroutineTemplate.html#a712fee99519863c145630f9d218402f8',1,'ace_routine::CoroutineTemplate::setName(const __FlashStringHelper *name)']]], - ['setprofiler_168',['setProfiler',['../classace__routine_1_1CoroutineTemplate.html#ad8c240de1ddbf42bdf4a8f4501b82b23',1,'ace_routine::CoroutineTemplate']]], - ['setrunning_169',['setRunning',['../classace__routine_1_1CoroutineTemplate.html#a99f1300b9bee0e72d05498b26141a352',1,'ace_routine::CoroutineTemplate']]], - ['setterminated_170',['setTerminated',['../classace__routine_1_1CoroutineTemplate.html#ac85d1306aa5a7e5f5650102e452807b3',1,'ace_routine::CoroutineTemplate']]], - ['setup_171',['setup',['../classace__routine_1_1CoroutineSchedulerTemplate.html#ac792080cdec6db9f6539a446d7af587c',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['setupcoroutine_172',['setupCoroutine',['../classace__routine_1_1CoroutineTemplate.html#ac58fe49c8cad0803c88862210b0f033d',1,'ace_routine::CoroutineTemplate::setupCoroutine()'],['../classace__routine_1_1CoroutineTemplate.html#a4ea28bb329a82952991efbcfd10d1d0f',1,'ace_routine::CoroutineTemplate::setupCoroutine(const char *) ACE_ROUTINE_DEPRECATED'],['../classace__routine_1_1CoroutineTemplate.html#aae5a4ce06c6590690b5ae94be777f451',1,'ace_routine::CoroutineTemplate::setupCoroutine(const __FlashStringHelper *) ACE_ROUTINE_DEPRECATED']]], - ['setupcoroutines_173',['setupCoroutines',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a86ebd507e675b913301f92af0a34abde',1,'ace_routine::CoroutineSchedulerTemplate']]], - ['setvalue_174',['setValue',['../classace__routine_1_1Channel.html#ab950ccdf77fdfaeea67ac19031733229',1,'ace_routine::Channel']]], - ['setyielding_175',['setYielding',['../classace__routine_1_1CoroutineTemplate.html#aae7d3ddffa9fcc843984808ac3664dac',1,'ace_routine::CoroutineTemplate']]], - ['statusprintto_176',['statusPrintTo',['../classace__routine_1_1CoroutineTemplate.html#afff00a9882832e76485982560262f441',1,'ace_routine::CoroutineTemplate']]], - ['suspend_177',['suspend',['../classace__routine_1_1CoroutineTemplate.html#a546f751274bbd9658a9106399dec1a00',1,'ace_routine::CoroutineTemplate']]] + ['seconds_161',['seconds',['../classace__routine_1_1ClockInterface.html#a03c0d39e0167f8a8e7c41f09d19d2861',1,'ace_routine::ClockInterface']]], + ['setdelaying_162',['setDelaying',['../classace__routine_1_1CoroutineTemplate.html#a8385fb083c393f7a75519e044e34c24e',1,'ace_routine::CoroutineTemplate']]], + ['setdelaymicros_163',['setDelayMicros',['../classace__routine_1_1CoroutineTemplate.html#a1d86ec7546a240864dda1246a71e769f',1,'ace_routine::CoroutineTemplate']]], + ['setdelaymillis_164',['setDelayMillis',['../classace__routine_1_1CoroutineTemplate.html#a1e529439de0abbeebec6e435718dc11d',1,'ace_routine::CoroutineTemplate']]], + ['setdelayseconds_165',['setDelaySeconds',['../classace__routine_1_1CoroutineTemplate.html#ab9e8a2e33791b28bec4ebfd77da11964',1,'ace_routine::CoroutineTemplate']]], + ['setending_166',['setEnding',['../classace__routine_1_1CoroutineTemplate.html#abab3b941fcc45839a5bf293668be9f98',1,'ace_routine::CoroutineTemplate']]], + ['setjump_167',['setJump',['../classace__routine_1_1CoroutineTemplate.html#a4b38c16e0c2452257b3e4214877012e8',1,'ace_routine::CoroutineTemplate']]], + ['setname_168',['setName',['../classace__routine_1_1CoroutineTemplate.html#a0f7388cc07f020d22a83b35eb40ec683',1,'ace_routine::CoroutineTemplate::setName(const char *name)'],['../classace__routine_1_1CoroutineTemplate.html#a712fee99519863c145630f9d218402f8',1,'ace_routine::CoroutineTemplate::setName(const __FlashStringHelper *name)']]], + ['setprofiler_169',['setProfiler',['../classace__routine_1_1CoroutineTemplate.html#ad8c240de1ddbf42bdf4a8f4501b82b23',1,'ace_routine::CoroutineTemplate']]], + ['setrunning_170',['setRunning',['../classace__routine_1_1CoroutineTemplate.html#a99f1300b9bee0e72d05498b26141a352',1,'ace_routine::CoroutineTemplate']]], + ['setterminated_171',['setTerminated',['../classace__routine_1_1CoroutineTemplate.html#ac85d1306aa5a7e5f5650102e452807b3',1,'ace_routine::CoroutineTemplate']]], + ['setup_172',['setup',['../classace__routine_1_1CoroutineSchedulerTemplate.html#ac792080cdec6db9f6539a446d7af587c',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['setupcoroutine_173',['setupCoroutine',['../classace__routine_1_1CoroutineTemplate.html#ac58fe49c8cad0803c88862210b0f033d',1,'ace_routine::CoroutineTemplate::setupCoroutine()'],['../classace__routine_1_1CoroutineTemplate.html#a4ea28bb329a82952991efbcfd10d1d0f',1,'ace_routine::CoroutineTemplate::setupCoroutine(const char *) ACE_ROUTINE_DEPRECATED'],['../classace__routine_1_1CoroutineTemplate.html#aae5a4ce06c6590690b5ae94be777f451',1,'ace_routine::CoroutineTemplate::setupCoroutine(const __FlashStringHelper *) ACE_ROUTINE_DEPRECATED']]], + ['setupcoroutines_174',['setupCoroutines',['../classace__routine_1_1CoroutineSchedulerTemplate.html#a86ebd507e675b913301f92af0a34abde',1,'ace_routine::CoroutineSchedulerTemplate']]], + ['setvalue_175',['setValue',['../classace__routine_1_1Channel.html#ab950ccdf77fdfaeea67ac19031733229',1,'ace_routine::Channel']]], + ['setyielding_176',['setYielding',['../classace__routine_1_1CoroutineTemplate.html#aae7d3ddffa9fcc843984808ac3664dac',1,'ace_routine::CoroutineTemplate']]], + ['statusprintto_177',['statusPrintTo',['../classace__routine_1_1CoroutineTemplate.html#afff00a9882832e76485982560262f441',1,'ace_routine::CoroutineTemplate']]], + ['suspend_178',['suspend',['../classace__routine_1_1CoroutineTemplate.html#a546f751274bbd9658a9106399dec1a00',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html index befd4fa..9a8e429 100644 --- a/docs/html/search/functions_9.html +++ b/docs/html/search/functions_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js index 21b98ce..6f6de06 100644 --- a/docs/html/search/functions_9.js +++ b/docs/html/search/functions_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['updateelapsedmicros_178',['updateElapsedMicros',['../classace__routine_1_1CoroutineProfiler.html#a914fde78366e0572b9b307020e3729c9',1,'ace_routine::CoroutineProfiler::updateElapsedMicros()'],['../classace__routine_1_1LogBinProfilerTemplate.html#abc696834db7c1c9dcee2c9b070d0a13a',1,'ace_routine::LogBinProfilerTemplate::updateElapsedMicros()']]] + ['updateelapsedmicros_179',['updateElapsedMicros',['../classace__routine_1_1CoroutineProfiler.html#a914fde78366e0572b9b307020e3729c9',1,'ace_routine::CoroutineProfiler::updateElapsedMicros()'],['../classace__routine_1_1LogBinProfilerTemplate.html#abc696834db7c1c9dcee2c9b070d0a13a',1,'ace_routine::LogBinProfilerTemplate::updateElapsedMicros()']]] ]; diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html index a81e963..5ecc152 100644 --- a/docs/html/search/functions_a.html +++ b/docs/html/search/functions_a.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js index 0a6ef07..20ab4c6 100644 --- a/docs/html/search/functions_a.js +++ b/docs/html/search/functions_a.js @@ -1,4 +1,4 @@ var searchData= [ - ['write_179',['write',['../classace__routine_1_1Channel.html#ad7fa46d27162b4ec9ffa257f3881931d',1,'ace_routine::Channel::write()'],['../classace__routine_1_1Channel.html#a1134e9c905c7c0bb7255f208534355d8',1,'ace_routine::Channel::write(const T &value)']]] + ['write_180',['write',['../classace__routine_1_1Channel.html#ad7fa46d27162b4ec9ffa257f3881931d',1,'ace_routine::Channel::write()'],['../classace__routine_1_1Channel.html#a1134e9c905c7c0bb7255f208534355d8',1,'ace_routine::Channel::write(const T &value)']]] ]; diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html index 345265d..e301fed 100644 --- a/docs/html/search/functions_b.html +++ b/docs/html/search/functions_b.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js index 3143c78..34a6312 100644 --- a/docs/html/search/functions_b.js +++ b/docs/html/search/functions_b.js @@ -1,5 +1,5 @@ var searchData= [ - ['_7ecoroutineprofiler_180',['~CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html#a8c8284bebc06998787f99cc48d7036b3',1,'ace_routine::CoroutineProfiler']]], - ['_7ecoroutinetemplate_181',['~CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html#a8a568b194cd7748b1ea40dfaf6a8fde4',1,'ace_routine::CoroutineTemplate']]] + ['_7ecoroutineprofiler_181',['~CoroutineProfiler',['../classace__routine_1_1CoroutineProfiler.html#a8c8284bebc06998787f99cc48d7036b3',1,'ace_routine::CoroutineProfiler']]], + ['_7ecoroutinetemplate_182',['~CoroutineTemplate',['../classace__routine_1_1CoroutineTemplate.html#a8a568b194cd7748b1ea40dfaf6a8fde4',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png deleted file mode 100644 index 39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo zd+1zHor@dYLod2Y{ z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cbw(gxJHzu zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu RoetE%;OXk;vd$@?2>>CYplSdB diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/docs/html/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html index 4377320..2b9360b 100644 --- a/docs/html/search/nomatches.html +++ b/docs/html/search/nomatches.html @@ -1,5 +1,6 @@ - + + diff --git a/docs/html/search/pages_0.html b/docs/html/search/pages_0.html index 9a6a29a..8517b48 100644 --- a/docs/html/search/pages_0.html +++ b/docs/html/search/pages_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js index 0d642a8..69aa777 100644 --- a/docs/html/search/pages_0.js +++ b/docs/html/search/pages_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['aceroutine_20library_222',['AceRoutine Library',['../index.html',1,'']]] + ['aceroutine_20library_223',['AceRoutine Library',['../index.html',1,'']]] ]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css index 3cf9df9..9074198 100644 --- a/docs/html/search/search.css +++ b/docs/html/search/search.css @@ -1,98 +1,82 @@ /*---------------- Search Box */ -#FSearchBox { - float: left; -} - #MSearchBox { white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; z-index: 102; } -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; } #MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; } #MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; border:none; - width:115px; - margin-left:20px; - padding-left:4px; color: #909090; outline: none; - font: 9pt Arial, Verdana, sans-serif; + font-family: Arial, Verdana, sans-serif; -webkit-border-radius: 0px; + border-radius: 0px; + background: none; } -#FSearchBox #MSearchField { - margin-left:15px; -} #MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; } #MSearchClose { display: none; - position: absolute; - top: 4px; + font-size: inherit; background : none; border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; + margin: 0; + padding: 0; outline: none; -} -.left #MSearchClose { - left: 6px; } -.right #MSearchClose { - right: 2px; +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; } .MSearchBoxActive #MSearchField { color: #000000; } +#main-menu > li:last-child { + /* This
      • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + /*---------------- Search filter selection */ #MSearchSelectWindow { @@ -220,19 +204,21 @@ a.SRScope:focus, a.SRScope:active { span.SRScope { padding-left: 4px; + font-family: Arial, Verdana, sans-serif; } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; + font-family: Arial, Verdana, sans-serif; } .SRResult { display: none; } -DIV.searchresults { +div.searchresults { margin-left: 10px; margin-right: 10px; } diff --git a/docs/html/search/search.js b/docs/html/search/search.js index a554ab9..fb226f7 100644 --- a/docs/html/search/search.js +++ b/docs/html/search/search.js @@ -1,25 +1,26 @@ /* - @licstart The following is the entire license notice for the - JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. - Copyright (C) 1997-2017 by Dimitri van Heesch + The MIT License (MIT) - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + Copyright (C) 1997-2020 by Dimitri van Heesch - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. - @licend The above is the entire license notice - for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ function convertToId(search) { @@ -79,9 +80,10 @@ function getYPos(item) storing this instance. Is needed to be able to set timeouts. resultPath - path to use for external files */ -function SearchBox(name, resultsPath, inFrame, label) +function SearchBox(name, resultsPath, inFrame, label, extension) { if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } // ---------- Instance variables this.name = name; @@ -96,6 +98,7 @@ function SearchBox(name, resultsPath, inFrame, label) this.searchActive = false; this.insideFrame = inFrame; this.searchLabel = label; + this.extension = extension; // ----------- DOM Elements @@ -200,10 +203,9 @@ function SearchBox(name, resultsPath, inFrame, label) } return; } - else if (window.frames.MSearchResults.searchResults) + else { - var elem = window.frames.MSearchResults.searchResults.NavNext(0); - if (elem) elem.focus(); + window.frames.MSearchResults.postMessage("take_focus", "*"); } } else if (e.keyCode==27) // Escape out of the search field @@ -347,13 +349,13 @@ function SearchBox(name, resultsPath, inFrame, label) if (idx!=-1) { var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { - resultsPage = this.resultsPath + '/nomatches.html'; + resultsPage = this.resultsPath + '/nomatches' + this.extension; resultsPageWithSearch = resultsPage; hasResultsPage = false; } @@ -364,7 +366,7 @@ function SearchBox(name, resultsPath, inFrame, label) if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; + this.DOMSearchClose().style.display = 'inline-block'; if (this.insideFrame) { var domPopupSearchResults = this.DOMPopupSearchResults(); @@ -439,12 +441,12 @@ function SearchResults(name) while (element && element!=parentElement) { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { return element; } - if (element.nodeName == 'DIV' && element.hasChildNodes()) + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { element = element.firstChild; } diff --git a/docs/html/search/typedefs_0.html b/docs/html/search/typedefs_0.html index 376db47..a4684c4 100644 --- a/docs/html/search/typedefs_0.html +++ b/docs/html/search/typedefs_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js index 9a532ea..83df50c 100644 --- a/docs/html/search/typedefs_0.js +++ b/docs/html/search/typedefs_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['coroutine_200',['Coroutine',['../Coroutine_8h.html#a25a42d39c252ea6377c0845010a38c2b',1,'ace_routine']]] + ['coroutine_201',['Coroutine',['../Coroutine_8h.html#a25a42d39c252ea6377c0845010a38c2b',1,'ace_routine']]] ]; diff --git a/docs/html/search/typedefs_1.html b/docs/html/search/typedefs_1.html index 9b8bf72..46cf01e 100644 --- a/docs/html/search/typedefs_1.html +++ b/docs/html/search/typedefs_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/typedefs_1.js b/docs/html/search/typedefs_1.js index dc9b97f..070ece1 100644 --- a/docs/html/search/typedefs_1.js +++ b/docs/html/search/typedefs_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['profiler_201',['Profiler',['../classace__routine_1_1LogBinJsonRendererTemplate.html#ab5d0a981189b55dbc175adc487570283',1,'ace_routine::LogBinJsonRendererTemplate::Profiler()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a0db94e7cfc0b34dd12f012b7b7959e35',1,'ace_routine::LogBinTableRendererTemplate::Profiler()']]] + ['profiler_202',['Profiler',['../classace__routine_1_1LogBinJsonRendererTemplate.html#ab5d0a981189b55dbc175adc487570283',1,'ace_routine::LogBinJsonRendererTemplate::Profiler()'],['../classace__routine_1_1LogBinTableRendererTemplate.html#a0db94e7cfc0b34dd12f012b7b7959e35',1,'ace_routine::LogBinTableRendererTemplate::Profiler()']]] ]; diff --git a/docs/html/search/typedefs_2.html b/docs/html/search/typedefs_2.html index d18982f..6835ee6 100644 --- a/docs/html/search/typedefs_2.html +++ b/docs/html/search/typedefs_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/typedefs_2.js b/docs/html/search/typedefs_2.js index 36cba7b..e925148 100644 --- a/docs/html/search/typedefs_2.js +++ b/docs/html/search/typedefs_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['status_202',['Status',['../classace__routine_1_1CoroutineTemplate.html#a8dab8bf9ee0a90bf3cb89714d09509a5',1,'ace_routine::CoroutineTemplate']]] + ['status_203',['Status',['../classace__routine_1_1CoroutineTemplate.html#a8dab8bf9ee0a90bf3cb89714d09509a5',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html index bf3eba5..1e477c0 100644 --- a/docs/html/search/variables_0.html +++ b/docs/html/search/variables_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js index 234e1e9..1df0378 100644 --- a/docs/html/search/variables_0.js +++ b/docs/html/search/variables_0.js @@ -1,12 +1,12 @@ var searchData= [ - ['knametypecstring_182',['kNameTypeCString',['../classace__routine_1_1CoroutineTemplate.html#ac2c0bed6845b265a15d047f5fb9e1f2a',1,'ace_routine::CoroutineTemplate']]], - ['knametypefstring_183',['kNameTypeFString',['../classace__routine_1_1CoroutineTemplate.html#af5edcad4909c75a7dfe85f5b59135d1b',1,'ace_routine::CoroutineTemplate']]], - ['knumbins_184',['kNumBins',['../classace__routine_1_1LogBinProfilerTemplate.html#af25fa69ddc686411422f38a2e7a461ee',1,'ace_routine::LogBinProfilerTemplate']]], - ['kstatusdelaying_185',['kStatusDelaying',['../classace__routine_1_1CoroutineTemplate.html#affeba86cf0732cd88588732cc29e3fb3',1,'ace_routine::CoroutineTemplate']]], - ['kstatusending_186',['kStatusEnding',['../classace__routine_1_1CoroutineTemplate.html#a300f41394630bc6324b7749afbb8e583',1,'ace_routine::CoroutineTemplate']]], - ['kstatusrunning_187',['kStatusRunning',['../classace__routine_1_1CoroutineTemplate.html#af35a3db36cc75dce8aa9196ff3d4068b',1,'ace_routine::CoroutineTemplate']]], - ['kstatussuspended_188',['kStatusSuspended',['../classace__routine_1_1CoroutineTemplate.html#af9b629c958610313eb1c0dc2d63cf047',1,'ace_routine::CoroutineTemplate']]], - ['kstatusterminated_189',['kStatusTerminated',['../classace__routine_1_1CoroutineTemplate.html#aee76b758eb2c683b1823f05433bc13ee',1,'ace_routine::CoroutineTemplate']]], - ['kstatusyielding_190',['kStatusYielding',['../classace__routine_1_1CoroutineTemplate.html#a803df9549b871e9071eb48b5a896cea7',1,'ace_routine::CoroutineTemplate']]] + ['knametypecstring_183',['kNameTypeCString',['../classace__routine_1_1CoroutineTemplate.html#ac2c0bed6845b265a15d047f5fb9e1f2a',1,'ace_routine::CoroutineTemplate']]], + ['knametypefstring_184',['kNameTypeFString',['../classace__routine_1_1CoroutineTemplate.html#af5edcad4909c75a7dfe85f5b59135d1b',1,'ace_routine::CoroutineTemplate']]], + ['knumbins_185',['kNumBins',['../classace__routine_1_1LogBinProfilerTemplate.html#af25fa69ddc686411422f38a2e7a461ee',1,'ace_routine::LogBinProfilerTemplate']]], + ['kstatusdelaying_186',['kStatusDelaying',['../classace__routine_1_1CoroutineTemplate.html#affeba86cf0732cd88588732cc29e3fb3',1,'ace_routine::CoroutineTemplate']]], + ['kstatusending_187',['kStatusEnding',['../classace__routine_1_1CoroutineTemplate.html#a300f41394630bc6324b7749afbb8e583',1,'ace_routine::CoroutineTemplate']]], + ['kstatusrunning_188',['kStatusRunning',['../classace__routine_1_1CoroutineTemplate.html#af35a3db36cc75dce8aa9196ff3d4068b',1,'ace_routine::CoroutineTemplate']]], + ['kstatussuspended_189',['kStatusSuspended',['../classace__routine_1_1CoroutineTemplate.html#af9b629c958610313eb1c0dc2d63cf047',1,'ace_routine::CoroutineTemplate']]], + ['kstatusterminated_190',['kStatusTerminated',['../classace__routine_1_1CoroutineTemplate.html#aee76b758eb2c683b1823f05433bc13ee',1,'ace_routine::CoroutineTemplate']]], + ['kstatusyielding_191',['kStatusYielding',['../classace__routine_1_1CoroutineTemplate.html#a803df9549b871e9071eb48b5a896cea7',1,'ace_routine::CoroutineTemplate']]] ]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html index 49fe59a..ea73d9a 100644 --- a/docs/html/search/variables_1.html +++ b/docs/html/search/variables_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
        Loading...
        - +
        Searching...
        No Matches
        - +
        diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js index e0f5e55..2e34823 100644 --- a/docs/html/search/variables_1.js +++ b/docs/html/search/variables_1.js @@ -1,12 +1,12 @@ var searchData= [ - ['mbins_191',['mBins',['../classace__routine_1_1LogBinProfilerTemplate.html#a9872d0ca3028086423c2014352394f68',1,'ace_routine::LogBinProfilerTemplate']]], - ['mdelayduration_192',['mDelayDuration',['../classace__routine_1_1CoroutineTemplate.html#a5648aae7d2c2d922a4719e5d7eeddd8a',1,'ace_routine::CoroutineTemplate']]], - ['mdelaystart_193',['mDelayStart',['../classace__routine_1_1CoroutineTemplate.html#a7c48e60b623fa01ed6b45efe95822fd0',1,'ace_routine::CoroutineTemplate']]], - ['mjumppoint_194',['mJumpPoint',['../classace__routine_1_1CoroutineTemplate.html#aaebc2fa42fd65b6dbf87d305fd57595a',1,'ace_routine::CoroutineTemplate']]], - ['mname_195',['mName',['../classace__routine_1_1CoroutineTemplate.html#a8008de77ec60f569fff0a392317b1a22',1,'ace_routine::CoroutineTemplate']]], - ['mnametype_196',['mNameType',['../classace__routine_1_1CoroutineTemplate.html#aaf7ab2306cfb11e2e99b1027233ce706',1,'ace_routine::CoroutineTemplate']]], - ['mnext_197',['mNext',['../classace__routine_1_1CoroutineTemplate.html#ae91d27950ff42e3aac63e47c5889caeb',1,'ace_routine::CoroutineTemplate']]], - ['mprofiler_198',['mProfiler',['../classace__routine_1_1CoroutineTemplate.html#a541efc6473dd13e1174a683ba0173cce',1,'ace_routine::CoroutineTemplate']]], - ['mstatus_199',['mStatus',['../classace__routine_1_1CoroutineTemplate.html#a989fa3e73aef42e475a7f034d9407bd2',1,'ace_routine::CoroutineTemplate']]] + ['mbins_192',['mBins',['../classace__routine_1_1LogBinProfilerTemplate.html#a9872d0ca3028086423c2014352394f68',1,'ace_routine::LogBinProfilerTemplate']]], + ['mdelayduration_193',['mDelayDuration',['../classace__routine_1_1CoroutineTemplate.html#a5648aae7d2c2d922a4719e5d7eeddd8a',1,'ace_routine::CoroutineTemplate']]], + ['mdelaystart_194',['mDelayStart',['../classace__routine_1_1CoroutineTemplate.html#a7c48e60b623fa01ed6b45efe95822fd0',1,'ace_routine::CoroutineTemplate']]], + ['mjumppoint_195',['mJumpPoint',['../classace__routine_1_1CoroutineTemplate.html#aaebc2fa42fd65b6dbf87d305fd57595a',1,'ace_routine::CoroutineTemplate']]], + ['mname_196',['mName',['../classace__routine_1_1CoroutineTemplate.html#a8008de77ec60f569fff0a392317b1a22',1,'ace_routine::CoroutineTemplate']]], + ['mnametype_197',['mNameType',['../classace__routine_1_1CoroutineTemplate.html#aaf7ab2306cfb11e2e99b1027233ce706',1,'ace_routine::CoroutineTemplate']]], + ['mnext_198',['mNext',['../classace__routine_1_1CoroutineTemplate.html#ae91d27950ff42e3aac63e47c5889caeb',1,'ace_routine::CoroutineTemplate']]], + ['mprofiler_199',['mProfiler',['../classace__routine_1_1CoroutineTemplate.html#a541efc6473dd13e1174a683ba0173cce',1,'ace_routine::CoroutineTemplate']]], + ['mstatus_200',['mStatus',['../classace__routine_1_1CoroutineTemplate.html#a989fa3e73aef42e475a7f034d9407bd2',1,'ace_routine::CoroutineTemplate']]] ];
      • - +
        +
        - +
        +
        - +
        +
        - +
        +
        - +
        +
        - +
        +
        - +
        +