GyverLibs/GyverPortal

Проблемы после обновления (3.5.3 => 3.6.3)

Oleg-Perevyshin opened this issue · 3 comments

Обновил библиотеку с версии 3.5.3 до 3.6.3
На старой версии все работало отлично, сейчас при нажатии на любую кнопку интерфейса ESP32 перезагружается с паникой.

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core  1 register dump:
PC      : 0x40171697  PS      : 0x00060d30  A0      : 0x800e82ef  A1      : 0x3ffb2050  
A2      : 0x00000000  A3      : 0x3ffd6ce0  A4      : 0x00000000  A5      : 0x00000004  
A6      : 0x3ffd76c4  A7      : 0x00000032  A8      : 0x800e7ad0  A9      : 0x3ffb2010  
A10     : 0x3ffb205c  A11     : 0x3ffe3bc4  A12     : 0x2a2d4b79  A13     : 0x3ffd73b0  
A14     : 0x00000000  A15     : 0x3ffe2d20  SAR     : 0x0000001d  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x0000000f  LBEG    : 0x40089414  LEND    : 0x4008941f  LCOUNT  : 0xffffffff  

Backtrace: 0x40171694:0x3ffb2050 0x400e82ec:0x3ffb2070 0x400d53c1:0x3ffb2090 0x400db3ae:0x3ffb20b0 0x400dc38b:0x3ffb2100 0x400dc975:0x3ffb2180 0x400e5be6:0x3ffb21a0 0x400e5d55:0x3ffb21c0 0x400e5ea5:0x3ffb2220 0x400dd6f4:0x3ffb2270 0x400e7711:0x3ffb2290

Пример кода

/* Конструктор страниц */
void build(void) {
  GP.BUILD_BEGIN(700);
  if (!strcmp(config.webui_theme, WEBUI_THEME_DARK)) GP.THEME(GP_DARK);
  else if (!strcmp(config.webui_theme, WEBUI_THEME_LIGHT)) GP.THEME(GP_LIGHT);
  else GP.THEME(GP_DARK);
  GP.NAV_TABS_LINKS("/settings", "НАСТРОЙКИ");
  constructor_settings();
  GP.BUILD_END();
}

/** Инициализация Web интерфейса */
void web_init(void) {
  if (strcmp(config.wifi_mode, WIFI_OFF_MODE)) {
    ui.attachBuild(build);
    ui.attach(action);
    ui.start(config.dev_name);
    ui.enableOTA();
    update_webui_vars();
  }
}

/* Обработчик событий */
void action(void) {
  if (ui.form("/settings")) {
    webui_wifi_mode = ui.getInt("webui_wifi_mode");
    if (webui_wifi_mode == 0) strncpy(config.wifi_mode, WIFI_OFF_MODE, sizeof(config.wifi_mode) - 1);
    if (webui_wifi_mode == 1) strncpy(config.wifi_mode, WIFI_AP_MODE, sizeof(config.wifi_mode) - 1);
    if (webui_wifi_mode == 2) strncpy(config.wifi_mode, WIFI_STA_MODE, sizeof(config.wifi_mode) - 1);

    webui_theme = ui.getBool("webui_theme");
    webui_theme == 0 ? strncpy(config.webui_theme, WEBUI_THEME_DARK, sizeof(config.webui_theme) - 1) :
      strncpy(config.webui_theme, WEBUI_THEME_LIGHT, sizeof(config.webui_theme) - 1);

    webui_sta_ssid = ui.getString("webui_sta_ssid");
    strncpy(config.sta_ssid, webui_sta_ssid.c_str(), sizeof(config.sta_ssid) - 1);
    webui_sta_psk = ui.getString("webui_sta_psk");
    strncpy(config.sta_psk, webui_sta_psk.c_str(), sizeof(config.sta_psk) - 1);
    save_config();
  }
  /* Глобальные элементы управления */
  if (ui.click("webui_restart")) wifi_restart();
  if (ui.click("webui_factory_reset")) flag_file_system = FS_CONFIG_CREATE;
}

/* Конструктор страницы НАСТРОЙКИ */
void constructor_settings(void) {  
  GP.FORM_BEGIN("/settings");
    M_BLOCK_TAB(
    "Режим работы WiFi",
      GP.RADIO("webui_wifi_mode", 0, webui_wifi_mode); GP.LABEL("Выключить (OFF)", "webui_wifi_mode", GP_RED_B); GP.BREAK();
      GP.HR();
      GP.RADIO("webui_wifi_mode", 1, webui_wifi_mode); GP.LABEL("Точка доступа (AP)", "webui_wifi_mode");
      GP.RADIO("webui_wifi_mode", 2, webui_wifi_mode); GP.LABEL("Станция (STA)", "webui_wifi_mode");
    );
    M_BLOCK_TAB(
    "Тема оформления",
      M_BOX(GP.LABEL("Темная"); GP.SWITCH("webui_theme", webui_theme); GP.LABEL("Светлая"););
    );
    M_BLOCK_TAB(
    "Сетевые настройки",
      M_BOX(GP.LABEL("Параметры режима STA", "", "", NULL, 1););
      M_BOX(GP.LABEL("SSID"); GP.TEXT("webui_sta_ssid", "", webui_sta_ssid, "50%"););
      M_BOX(GP.LABEL("Пароль"); GP.TEXT("webui_sta_psk", "", webui_sta_psk, "50%"););
    );
    GP.SUBMIT("Сохранить", GP_GREEN);
  GP.FORM_END();
  GP.HR();
  M_BOX(
    GP.BUTTON("webui_restart", "Перезагрузка", "", GP_RED, "40%"); GP.BUTTON("webui_factory_reset", "Сброс настроек", "", GP_RED, "40%");
  );
}

уф, опять esp32 =(

  • Какая версия ядра? Не могу повторить баг у себя
  • Нужно определиться с минимальным кодом, который приводит к сбою
  • Пример условно actionClick работает?
  • Если обернуть опрос обоих кликов в if (ui.click()) {} - перестанет паниковать?

Ни с того ни с сего заработала...

где то строка переполнилась 100%. Кстати необязательно дублировать строки стрингами. Портал может записать текст сразу в массив