Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Вопрос Возможно ли узнать причину предыдущей перезагрузки?

Тема в разделе "Общие вопросы по esp8266", создана пользователем remrum, 22 янв 2019.

  1. remrum

    remrum Читатель

    Сообщения:
    34
    Симпатии:
    5
    Интересует возможность при запуске программы узнать причину перезагрузки ESP8266.
    Например сброс по входу Reset, подача питания или перезагрузка по watchdog.
    Может есть какой-то регистр?
     
  2. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.198
    Симпатии:
    227
  3. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.053
    Симпатии:
    175
    при перезагрузке на serial (74880 бод) можно увидеть: "rst cause:цифра" эта цифра и есть причина перезагрузки.
    В принципе в Ардуино это тоже можно получить, вот код из Ардуино для esp8266:
    Код (Text):
    1.  
    2. enum rst_reason {
    3.  REASON_DEFAULT_RST = 0, /* normal startup by power on */
    4.  REASON_WDT_RST = 1, /* hardware watch dog reset */
    5.  REASON_EXCEPTION_RST = 2, /* exception reset, GPIO status won't change */
    6.  REASON_SOFT_WDT_RST   = 3, /* software watch dog reset, GPIO status won't change */
    7.  REASON_SOFT_RESTART = 4, /* software restart ,system_restart , GPIO status won't change */
    8.  REASON_DEEP_SLEEP_AWAKE = 5, /* wake up from deep-sleep */
    9.  REASON_EXT_SYS_RST      = 6 /* external system reset */
    10. };
    11.  
    12. String EspClass::getResetReason(void) {
    13.     char buff[32];
    14.     if (resetInfo.reason == REASON_DEFAULT_RST) { // normal startup by power on
    15.       strcpy_P(buff, PSTR("Power on"));
    16.     } else if (resetInfo.reason == REASON_WDT_RST) { // hardware watch dog reset
    17.       strcpy_P(buff, PSTR("Hardware Watchdog"));
    18.     } else if (resetInfo.reason == REASON_EXCEPTION_RST) { // exception reset, GPIO status won’t change
    19.       strcpy_P(buff, PSTR("Exception"));
    20.     } else if (resetInfo.reason == REASON_SOFT_WDT_RST) { // software watch dog reset, GPIO status won’t change
    21.       strcpy_P(buff, PSTR("Software Watchdog"));
    22.     } else if (resetInfo.reason == REASON_SOFT_RESTART) { // software restart ,system_restart , GPIO status won’t change
    23.       strcpy_P(buff, PSTR("Software/System restart"));
    24.     } else if (resetInfo.reason == REASON_DEEP_SLEEP_AWAKE) { // wake up from deep-sleep
    25.       strcpy_P(buff, PSTR("Deep-Sleep Wake"));
    26.     } else if (resetInfo.reason == REASON_EXT_SYS_RST) { // external system reset
    27.       strcpy_P(buff, PSTR("External System"));
    28.     } else {
    29.       strcpy_P(buff, PSTR("Unknown"));
    30.     }
    31.     return String(buff);
    32. }
    33.  
    34. String EspClass::getResetInfo(void) {
    35.     if(resetInfo.reason != 0) {
    36.         char buff[200];
    37.         sprintf(&buff[0], "Fatal exception:%d flag:%d (%s) epc1:0x%08x epc2:0x%08x epc3:0x%08x excvaddr:0x%08x depc:0x%08x", resetInfo.exccause, resetInfo.reason, (resetInfo.reason == 0 ? "DEFAULT" : resetInfo.reason == 1 ? "WDT" : resetInfo.reason == 2 ? "EXCEPTION" : resetInfo.reason == 3 ? "SOFT_WDT" : resetInfo.reason == 4 ? "SOFT_RESTART" : resetInfo.reason == 5 ? "DEEP_SLEEP_AWAKE" : resetInfo.reason == 6 ? "EXT_SYS_RST" : "???"), resetInfo.epc1, resetInfo.epc2, resetInfo.epc3, resetInfo.excvaddr, resetInfo.depc);
    38.         return String(buff);
    39.     }
    40.     return String("flag: 0");
    41. }
    Отсюда понятно какая цифра в rst cause чего означает и позволяет при нужде самостоятельно получить информацию из программы...
     
    enjoynering и remrum нравится это.
  4. remrum

    remrum Читатель

    Сообщения:
    34
    Симпатии:
    5
    Проверил, это работает.
    Пример Exception:
    getResetReason() -> Exception
    getResetInfo() -> Fatal exception:28 flag:2 (EXCEPTION) epc1:0x4021143c epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000
     

Поделиться этой страницей