esp8266-hal 0.5.1

HAL for ESP8266 microcontrollers
Documentation
#![no_std]
#![no_main]

use core::fmt::Write;
use esp8266_hal::flash::SPI0Ext;
use esp8266_hal::prelude::*;
use esp8266_hal::target::Peripherals;
use panic_halt as _;

#[entry]
fn main() -> ! {
    let dp = Peripherals::take().unwrap();
    let pins = dp.GPIO.split();
    let mut led = pins.gpio2.into_push_pull_output();
    let (mut timer1, _) = dp.TIMER.timers();
    let mut serial = dp
        .UART0
        .serial(pins.gpio1.into_uart(), pins.gpio3.into_uart());

    led.set_high().unwrap();

    let mut flash = dp.SPI0.flash();

    const ADDR: u32 = 0x7E000;

    timer1.delay_ms(1000);

    let mut buff = [0u8; 8];

    flash.read(ADDR, &mut buff).unwrap();

    buff[0] += 1;

    flash.erase_sectors(ADDR, 1).unwrap();

    flash.write_bytes(ADDR, &buff).unwrap();

    write!(serial, "\r\ncounter {}:\r\n", buff[0]).unwrap();
    write!(serial, "press '0' to reset:\r\n").unwrap();

    loop {
        let byte = nb::block!(serial.read()).unwrap();

        if byte == b'0' {
            buff[0] = 0;

            flash.erase_sectors(ADDR, 1).unwrap();

            flash.write_bytes(ADDR, &mut buff).unwrap();
        }
    }
}