Reset reasons on ESP8266


On ESP32 it is possible to get the reset reason by inserting the following C-code line:
esp_reset_reason_t resetReason = esp_reset_reason();
Is something similar possible on the ESP8266, too?

Thanks for help!


Sure. That’s what I’m using:

#include <user_interface.h>

#include "common/cs_dbg.h"

#if 0
enum rst_reason {
    REASON_DEFAULT_RST      = 0,    /* normal startup by power on */
    REASON_WDT_RST          = 1,    /* hardware watch dog reset */
    REASON_EXCEPTION_RST    = 2,    /* exception reset, GPIO status won’t change */
    REASON_SOFT_WDT_RST     = 3,    /* software watch dog reset, GPIO status won’t change */
    REASON_SOFT_RESTART     = 4,    /* software restart ,system_restart , GPIO status won’t change */
    REASON_DEEP_SLEEP_AWAKE = 5,    /* wake up from deep-sleep */
    REASON_EXT_SYS_RST      = 6     /* external system reset */

struct rst_info *rtc_info = system_get_rst_info();

struct reason_as_string {
  enum rst_reason reason;
  const char *string;

static struct reason_as_string reasons[] = {

static const char *esp_reset_reason_stringify(enum rst_reason reset_reason) {
  const struct reason_as_string *p = reasons;
  for (size_t i = 0; i < sizeof(reasons) / sizeof(reasons[0]); ++i, ++p) {
    if (reset_reason == p->reason) {
      return p->string;
  return "N/A";

const char *mgos_get_reset_reason_string(void) {
  struct rst_info *rst_info = system_get_rst_info();
  return esp_reset_reason_stringify(rst_info->reason);
1 Like

Hi nliviu,

Thanks for this information. But - unfortunately - I cannot link this code, because ‘system_get_rst_info’ results in an ‘undefined reference’.
What library I have to take?

Kind regards,


#include <user_interface.h> It’s in the snippet above.


I already had this include in my code, but this did not help. I still get ‘… undefined reference to `system_get_rst_info()’…’.
It seems to be a linker problem and this include just helps for the compiler, but not for the linker.
We had this discussion lately: I have problems to find out, what libraries are taken by the build server. So do I in this case.

By the way: The build server is extremely slow since yesterday morning. One compiler run takes several minutes …


No library needed. system_get_rst_info is used in the MongooseOS code too.

It looks like you are compiling C++ code. In this case, you need to add the __cplusplus guard:

#ifdef __cplusplus
extern "C" {
#include <user_interface.h>
#ifdef __cplusplus

This solves the problem! Thanks a lot for your help!