Releases: bxparks/AceRoutine
Releases · bxparks/AceRoutine
v1.2.1 - add DEVLOPER.md notes
- 1.2.1 (2020-11-12)
- Add
DEVELOPER.mdnotes to myself. - Add python script to generate the README.md in
examples/MemoryBenchmarks to automatically
regenerate the embedded ascii tables. Regenerate README.md for v1.2. - No functional change in this release.
- Add
v1.2 - fix reset(), suspend(), resume()
- 1.2 (2020-11-10)
- Fix an infinite loop in the internal singly-linked list of coroutines when
resume()is called immediately aftersuspend(), without waiting for
CoroutineScheduler::loop()to actually remove the coroutine from the
list. The fix no longer removes suspended coroutine from the linked list,
simplifying the code considerably. Fixes Issue
#19. - Fix incorrect status set by
Coroutine::reset()which prevented it from
actually working. Fixes Issue
#20. - Potentially Breaking: The internal linked list of coroutines is now
considered to be a private implementation detail that may change in the
future. The ordering of the list of coroutines is now undefined. The
Coroutine::getRoot()andCoroutine::getNext()public methods are now
private. The newsetupCoroutineOrderedByName()methods replicate the old
behavior, but these are exposed only for testing purposes. - Fix documentation bug in README.md to say that
suspend()andresume()
should not be called within the coroutine itself. They can only be
called from outside the coroutine. They are no-ops inside a coroutine. - Extract lengthy Usage section of
README.mdintoUSER_GUIDE.md. Add
table of contents to help navigate the long document. Rewrite and update
content to be more useful and more clear hopefully.
- Fix an infinite loop in the internal singly-linked list of coroutines when
v1.1 - add Cooutine::reset(); move common code to AceCommon, utility to AceUtils
- 1.1 (2020-11-01)
- Add a
Coroutine::reset()method that causes the Coroutine to restart
from the beginning of the coroutine upon the next iteration. (Fixes #13
and #14). - Potentially Breaking: AceRoutine now depends on the AceCommon
(https://github.com/bxparks/AceCommon) library to avoid maintaining
multiple versions of low-level common code. The externally exposed API has
not changed. The AceCommon library can be installed through the Arduino
IDE Library Manager, as explained in Installation section of the
README.md. - Potentially Breaking: Move the CommandLineInterface package from
src/ace_routine/clito the AceUtils library
(https://github.com/bxparks/AceUtils). The AceUtils library is a better
home for this higher-level package that depends on AceRoutine.
- Add a
1.0.1 - simplify and expand examples, elevate Manual Coroutine over Custom Coroutine
- 1.0.1 (2020-09-18)
- Add continuous integration using GitHub Actions.
- Add more documentation and examples of Manual Coroutines in README.md.
Manual Coroutines are often more useful than Custom Coroutines, which I
have found useful only for unit testing. - Simplify the HelloCoroutine and HelloScheduler examples.
1.0 - graduate out of beta
- 1.0 (2019-09-04)
- Support UnixHostDuino in all sketches under
examples/. - Rename
Flash.h' tocompat.h. ReenableF()` strings for ESP8266. - Fix various programs in
examples/to work using clang++ (using
UnixHostDuio) which automatically fixes them on MacOS. - Graduate out of beta to v1.0.
- Support UnixHostDuino in all sketches under
0.3 - implement COROUTINE_DELAY_MICROS(); update COROUTINE_DELAY_SECONDS()
- 0.3 (2019-08-26)
- Update
AutoBenchmark/README.mdbenchmark numbers. - Use a
do-whileloopCOROUTINE_AWAIT()so that it is guaranteed to call
COROUTINE_YIELD()at least once. Previously, if theconditionof the
await was already (or always) true, thewhile-loopcaused the coroutine
to hog the control flow without yielding. - Use a
do-whileloop inCOROUTINE_DELAY()so thatCOROUTINE_YIELD()
is guaranteed to be called at least once, even if the delay is 0. - Add
COROUTINE_DELAY_MICROS(delayMicros)which is similar to the
existingCOROUTINE_DELAY(delayMillis)macro. The actual delay time may
be inaccurate on slow processors (e.g. 16 MHz AVR processors) and become
more accurate for faster processors (e.g. ESP32). (#9) - Breaking: The
COROUTINE_DELAY_SECONDS(delaySeconds)macro now takes
only one parmeter instead of 2 parameters. An externalloopCounter
variable no longer needs to be provided by the caller, which simplifies
the API. - Add
examples/Delay/Delay.inoprogram to validate the various
COROUTINE_DELAY*()macros. - The
sizeof(Coroutine)increases from 14 bytes to 15 bytes on an 8-bit
processor. No change on 32-bit (still 28 bytes).
- Update
0.2.2 - improve cli library; migrate to UnixHostDuino; add SAMD21 and ATmega2560 boards
- 0.2.2 (2019-07-31)
- Add
SHIFT_ARGC_ARGV()macro for easy token shifting,
andisArgEqual()method for easy comparison against flash string
in the CLI library. - Verify library on SAMD21 (e.g. Arduino Zero) and ATmega2560 boards.
- Update unit test Makefiles to use
UnixHostDuino. - Fix clang++ error in
clilibrary due to localcvariable inside
aCOROUTINE_LOOPmacro.
- Add
0.2.1 - fix broken compiles for ESP8266 and ESP32 and fix documentation typos
- 0.2.1 (2019-07-01)
- Fix various typos in README.md.
- Fix broken compile of ESP32 and ESP8266 boards by fixing fqbn.
- Add missing
pinMode()in some examples. - Add
ACE_ROUTINE_VERSION_STRINGfor easier display for version number.
0.2 - add unbuffered synchronized Channel
- 0.2 (2018-10-02)
- Add
COROUTINE_DELAY_SECONDS()to support delays longer than
32767 millis. - Update
auniter.iniandJenkinsfilefor compatibility with
AUniter v1.7. - Coroutine Status
- Remove
kStatusAwaitingstate used byCOROUTINE_AWAIT()which
wasn't being used for anything, collapse into existing
kStatusYielding. - Print human-readable strings of the Coroutine status from
CoroutineScheduler::list().
- Remove
- Channels
- Add a synchronized unbuffered Channel, similar to Go Lang channels.
- Add
COROUTINE_CHANNEL_READ()andCOROUTINE_CHANNEL_WRITE()
convenience macros. - Write
ChannelBenchmarkto determine the CPU overhead of using
channels.
- CLI library
- Update
clilibrary to use channels to read from serial port
asynchronously. - Convert
CommandHandlerfrom a pointer to function to a full
class to allow dependency injection and better code reuse.
- Update
- Manual and custom Coroutines
- Rename
Coroutine::run()toCoroutine::runCoroutine()for clarity. - Rename
Coroutine::init()toCoroutine::setupCoroutine()to make
it easier to use mix-in classes.
- Rename
- Add
0.1 - initial beta release
Merge pull request #2 from bxparks/develop 0.1 - initial merge into master for beta release