However, I can call yield() on my Nano or ESP8266 without including
the Scheduler lib
The yield()
function is also implemented inside the ESP8266 libraries:
Yielding
This is one of the most critical differences between the ESP8266 and a
more classical Arduino microcontroller. The ESP8266 runs a lot of
utility functions in the background – keeping WiFi connected, managing
the TCP/IP stack, and performing other duties. Blocking these
functions from running can cause the ESP8266 to crash and reset
itself. To avoid these mysterious resets, avoid long, blocking loops
in your sketch.
The amazing creators of the ESP8266 Arduino libraries also implemented
a yield() function, which calls on the background functions to allow
them to do their things.
That's why you can call yield()
from within your main program where the ESP8266 header is included.
See ESP8266 Thing Hookup Guide.
Update:
yield()
is defined in Arduino.h as:
void yield(void);
yield()
is also declared in hooks.h
as follows:
/**
* Empty yield() hook.
*
* This function is intended to be used by library writers to build
* libraries or sketches that supports cooperative threads.
*
* Its defined as a weak symbol and it can be redefined to implement a
* real cooperative scheduler.
*/
static void __empty() {
// Empty
}
void yield(void) __attribute__ ((weak, alias("__empty")));
So, on the Nano
, it probably does nothing (unless you have other libraries #included
).
Scheduler.h
? – Nigritude