* Prevent divide by zero error causing code to crash
As per the issue at #2491, there is a divide by error issue resulting from the specification of 0 as the frequency. This does not appear to affect the AVR implementation, but it crashes on ESP8266s. I have merely removed the division if the frequency is zero, which appears to be giving the expected results (no tone), without any code crashes.
To test, simply load the toneMelody sketch included with the Arduino IDE (Examples -> 02. Digital -> toneMelody) and change the piezo to something else if you need to. On the Witty module used to test this, I could also tell by the wifi led blinking every time the code crashed as the ESP8266 immediately rebooted.
* Use noTone when frequency is zero
When a frequency of zero is given to tone(), instead call noTone() and exit. Placed after some of the initialisation stuff to ensure the pin is mapped as a output, etc. Tested as functional against a Node MCU 1.0 board and the toneMelody example sketch, using GPIO5 (pin D1).
* Errant tab in formatting
* Rest of tabs that crept in from web editor
Defaulted to tabs and 8 indent :sigh:
gettimeofday used to return timestamps which had tv_sec 1000 times smaller than the correct value.
s_bootTime is in seconds, so no need to divide it by 1000.
* Fix analogWrite
Move to NMI interrupt
Rework the whole ISR to take less and more constant cycles
Current defaults run 10bits/1KHz@160MHz and 9bit/1KHz@80MHz (soft
mapped)
* astyle and remove STORE_ATTR
This will allow using the String library in a ranged for loop:
```C++
String s("Hi, this is a test");
for (const char& ch : s) {
Serial.print(ch);
}
```
and even modify
```C++
String s("Hi, this is another test");
for (char& ch : s) {
ch++;
}
Serial.println(s);
```
* Use newlib libc library
This change adds libcmin.a, which is created from newlib libc by selectively removing some of the object files (mostly related to heap management).
The list of files is available in tools/sdk/lib/make_libcmin.sh. Files which are not needed are commented out.
This change adds support for various functions which were missing, like sscanf, strftime, etc.
* Fix some of the time functions
* Redirect stdout to serial
* Implement __putc_r
* Switch to custom newlib build
Built from https://github.com/igrr/newlib-xtensa using:
./configure --with-newlib --enable-multilib --disable-newlib-io-c99-formats --enable-newlib-supplied-syscalls --enable-target-optspace --program-transform-name="s&^&xtensa-lx106-elf-&" --disable-option-checking --with-target-subdir=xtensa-lx106-elf --target=xtensa-lx106-elf --enable-newlib-nano-formatted-io --enable-newlib-reent-small --prefix=path-to-arduino-core/tools/sdk/libc
CROSS_CFLAGS="-DMALLOC_PROVIDED -DSIGNAL_PROVIDED -DABORT_PROVIDED" make
make install
* Update tests
* Changed WifInfo settings and WeMos board name
* Added board name to have in sketch and MDNS/OTA
* board naming convention
https://github.com/esp8266/Arduino/pull/2054
* Added Serial.baudRate() to get current baud rate
* Added more description
- Added note about Software Serial Implementation
- Indicate this will works on ESP8266 boards only
I2C slave might stil have something to send when ESP826 starts I2C, thus
keeping the bus stuck.
Happens e.g. when power failure/reset during transmission.
Thanks to work of drmpf there is a solution.
Implemented as separate method so as not to interfere with existing.
Usage:
Wire.begin();
if (Wire.status() != I2C_OK) Serial.writeln("Something wrong with I2C
bus that cannot be recovered. Perform power cycle or search for other
masters on bus.";
The change in 297bb17 enabled RF after deep sleep, even if deep sleep was done with RF_DISABLED option (thanks @vlast3k for pointing this out).
Now we check the value returned by __get_rf_mode, and only call system_phy_set_rfoption if RF_MODE override was provided by user.