Dříve, nebo později se s tím setká každý, kdo tvoří aplikace na mikrokontroléry – skvělá, téměř hotová aplikace občas spadne. Ne tak často, aby se pád dal zachytit debuggerem (pokud se dá k hardware vůbec připojit), ale příliš často na to, aby bylo možné pády ignorovat. Stává se to i při programování ESP8266 a to častěji, než by se mohlo zdát (ti, kdo používají intenzívně komunikující sériový port pomocí knihovny SoftwareSerial o tom zcela nepochybně ví své). Ladění těchto situací bývá velmi obtížné a zdlouhavé, ale naštěstí pro nás existuje v případě ESP8266 cesta, jak si práci usnadnit. SDK, poskytované přímo od Espressif obsahuje možnost, jak při pádu aplikace zavolat uživatelskou funkci, která se jmenuje custom_crash_callback(…). Funkce je volaná z postmortem stavu přímo z jádra (weak alias je definovaný v core_esp8266_postmortem.c ). Její použití ale má nějaká úskalí – nesmí se použít dynamická alokace, blokovací funkce (serial, network, delay, …) a vykonání funkce nesmí trvat příliš dlouho, protože HW watchdog stále běží. Nápad tedy spočívá v tom, že se do EEPROM uloží informace o pádu, které se dají použít pro následnou analýzu. Tento nápad mělo přede mnou už více vývojářů, takže vznikla knihovna EspSaveCrash, která ale bohužel ignoruje zapovězení dynamické alokace, takže pokud vznikl pád aplikace z důvodu problému na heapu, EspSaveCrash nebude fungovat správně. Napsal jsem tedy vlastní variantu, která vychází z uvedené knihovny, ale netrpí tímto neduhem a kterou používám již řadu měsíců.
Pokračování textu Z notýsku vývojáře – Jak zachytit občasný pád aplikace v ESP8266