/* Part of the DEBUG MODULE Copyright (C) 2016-2019 by Xose PĂ©rez Copyright (C) 2019-2020 by Maxim Prokhorov */ // ----------------------------------------------------------------------------- // Save crash info // Original code by @krzychb // https://github.com/krzychb/EspSaveCrash // ----------------------------------------------------------------------------- #pragma once #include "espurna.h" #include #include /** * Structure of the single crash data set * * 1. Crash time * 2. Restart reason * 3. Exception cause * 4. epc1 * 5. epc2 * 6. epc3 * 7. excvaddr * 8. depc * 9. adress of stack start * 10. adress of stack end * 11. stack trace size * 12. stack trace bytes * ... */ #define SAVE_CRASH_CRASH_TIME 0x00 // 4 bytes #define SAVE_CRASH_RESTART_REASON 0x04 // 1 byte #define SAVE_CRASH_EXCEPTION_CAUSE 0x05 // 1 byte #define SAVE_CRASH_EPC1 0x06 // 4 bytes #define SAVE_CRASH_EPC2 0x0A // 4 bytes #define SAVE_CRASH_EPC3 0x0E // 4 bytes #define SAVE_CRASH_EXCVADDR 0x12 // 4 bytes #define SAVE_CRASH_DEPC 0x16 // 4 bytes #define SAVE_CRASH_STACK_START 0x1A // 4 bytes #define SAVE_CRASH_STACK_END 0x1E // 4 bytes #define SAVE_CRASH_STACK_SIZE 0x22 // 2 bytes #define SAVE_CRASH_STACK_TRACE 0x24 // variable, 4 bytes per value constexpr int EepromCrashBegin = EepromReservedSize; constexpr int EepromCrashEnd = 256; constexpr size_t CrashReservedSize = EepromCrashEnd - EepromCrashBegin; constexpr size_t CrashTraceReservedSize = CrashReservedSize - SAVE_CRASH_STACK_TRACE; size_t crashReservedSize(); void crashForceDump(Print&); void crashDump(Print&); void crashClear(); void crashSetup();