Closed
Description
Board
ESP32-WROOM-32UE
Device Description
Custom hardware
Hardware Configuration
NA
Version
v2.0.7
IDE Name
PIO
Operating System
Win11
Flash frequency
40
PSRAM enabled
yes
Upload speed
460800
Description
Unexpected crash in WiFiGeneric.cpp with debug level 3 (info). I expect the WiFi module to print debug messages without crashing.
Crashed on WiFiGeneric WIFI_REASON_UNSPECIFIED
line 953: log_w("Reason: %u - %s", reason, reason2str(reason));
.
#define reason2str(r) ((r>176)?system_event_reasons[r-176]:system_event_reasons[r-1])
const char * system_event_reasons[] = { "UNSPECIFIED", "AUTH_EXPIRE", "AUTH_LEAVE", "ASSOC_EXPIRE", "ASSOC_TOOMANY", "NOT_AUTHED", "NOT_ASSOCED", "ASSOC_LEAVE", "ASSOC_NOT_AUTHED", "DISASSOC_PWRCAP_BAD", "DISASSOC_SUPCHAN_BAD", "UNSPECIFIED", "IE_INVALID", "MIC_FAILURE", "4WAY_HANDSHAKE_TIMEOUT", "GROUP_KEY_UPDATE_TIMEOUT", "IE_IN_4WAY_DIFFERS", "GROUP_CIPHER_INVALID", "PAIRWISE_CIPHER_INVALID", "AKMP_INVALID", "UNSUPP_RSN_IE_VERSION", "INVALID_RSN_IE_CAP", "802_1X_AUTH_FAILED", "CIPHER_SUITE_REJECTED", "BEACON_TIMEOUT", "NO_AP_FOUND", "AUTH_FAIL", "ASSOC_FAIL", "HANDSHAKE_TIMEOUT", "CONNECTION_FAIL" };
Not sure why it crashed. I think system_event_reasons[] is being indexed correctly.
Likely related to #7414. If we continue getting crashes on define reason2str
then I recommend converting it to a function.
This is how I print WiFi errors in my code:
const char* wifiErrToString(wifi_err_reason_t reason);
/**
* @brief Convert a wifi_err_reason_t code to a string.
* @param [in] reason The error code to be converted.
* @return A string representation of the error code.
* @note: wifi_err_reason_t values as of Mar 2023 are: (1-39, 46-51, 67-68, 200-208) and are defined in /tools/sdk/esp32/include/esp_wifi/include/esp_wifi_types.h.
*/
const char* wifiErrToString(wifi_err_reason_t reason) {
switch(reason) {
case WIFI_REASON_UNSPECIFIED: return "WIFI_REASON_UNSPECIFIED";
case WIFI_REASON_AUTH_EXPIRE: return "WIFI_REASON_AUTH_EXPIRE";
case WIFI_REASON_AUTH_LEAVE: return "WIFI_REASON_AUTH_LEAVE";
case WIFI_REASON_ASSOC_EXPIRE: return "WIFI_REASON_ASSOC_EXPIRE";
case WIFI_REASON_ASSOC_TOOMANY: return "WIFI_REASON_ASSOC_TOOMANY";
case WIFI_REASON_NOT_AUTHED: return "WIFI_REASON_NOT_AUTHED";
case WIFI_REASON_NOT_ASSOCED: return "WIFI_REASON_NOT_ASSOCED";
case WIFI_REASON_ASSOC_LEAVE: return "WIFI_REASON_ASSOC_LEAVE";
case WIFI_REASON_ASSOC_NOT_AUTHED: return "WIFI_REASON_ASSOC_NOT_AUTHED";
case WIFI_REASON_DISASSOC_PWRCAP_BAD: return "WIFI_REASON_DISASSOC_PWRCAP_BAD";
case WIFI_REASON_DISASSOC_SUPCHAN_BAD: return "WIFI_REASON_DISASSOC_SUPCHAN_BAD";
case WIFI_REASON_BSS_TRANSITION_DISASSOC: return "WIFI_REASON_BSS_TRANSITION_DISASSOC";
case WIFI_REASON_IE_INVALID: return "WIFI_REASON_IE_INVALID";
case WIFI_REASON_MIC_FAILURE: return "WIFI_REASON_MIC_FAILURE";
case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: return "WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT";
case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: return "WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT";
case WIFI_REASON_IE_IN_4WAY_DIFFERS: return "WIFI_REASON_IE_IN_4WAY_DIFFERS";
case WIFI_REASON_GROUP_CIPHER_INVALID: return "WIFI_REASON_GROUP_CIPHER_INVALID";
case WIFI_REASON_PAIRWISE_CIPHER_INVALID: return "WIFI_REASON_PAIRWISE_CIPHER_INVALID";
case WIFI_REASON_AKMP_INVALID: return "WIFI_REASON_AKMP_INVALID";
case WIFI_REASON_UNSUPP_RSN_IE_VERSION: return "WIFI_REASON_UNSUPP_RSN_IE_VERSION";
case WIFI_REASON_INVALID_RSN_IE_CAP: return "WIFI_REASON_INVALID_RSN_IE_CAP";
case WIFI_REASON_802_1X_AUTH_FAILED: return "WIFI_REASON_802_1X_AUTH_FAILED";
case WIFI_REASON_CIPHER_SUITE_REJECTED: return "WIFI_REASON_CIPHER_SUITE_REJECTED";
case WIFI_REASON_TDLS_PEER_UNREACHABLE: return "WIFI_REASON_TDLS_PEER_UNREACHABLE";
case WIFI_REASON_TDLS_UNSPECIFIED: return "WIFI_REASON_TDLS_UNSPECIFIED";
case WIFI_REASON_SSP_REQUESTED_DISASSOC: return "WIFI_REASON_SSP_REQUESTED_DISASSOC";
case WIFI_REASON_NO_SSP_ROAMING_AGREEMENT: return "WIFI_REASON_NO_SSP_ROAMING_AGREEMENT";
case WIFI_REASON_BAD_CIPHER_OR_AKM: return "WIFI_REASON_BAD_CIPHER_OR_AKM";
case WIFI_REASON_NOT_AUTHORIZED_THIS_LOCATION: return "WIFI_REASON_NOT_AUTHORIZED_THIS_LOCATION";
case WIFI_REASON_SERVICE_CHANGE_PERCLUDES_TS: return "WIFI_REASON_SERVICE_CHANGE_PERCLUDES_TS";
case WIFI_REASON_UNSPECIFIED_QOS: return "WIFI_REASON_UNSPECIFIED_QOS";
case WIFI_REASON_NOT_ENOUGH_BANDWIDTH: return "WIFI_REASON_NOT_ENOUGH_BANDWIDTH";
case WIFI_REASON_MISSING_ACKS: return "WIFI_REASON_MISSING_ACKS";
case WIFI_REASON_EXCEEDED_TXOP: return "WIFI_REASON_EXCEEDED_TXOP";
case WIFI_REASON_STA_LEAVING: return "WIFI_REASON_STA_LEAVING";
case WIFI_REASON_END_BA: return "WIFI_REASON_END_BA";
case WIFI_REASON_UNKNOWN_BA: return "WIFI_REASON_UNKNOWN_BA";
case WIFI_REASON_TIMEOUT: return "WIFI_REASON_TIMEOUT";
case WIFI_REASON_PEER_INITIATED: return "WIFI_REASON_PEER_INITIATED";
case WIFI_REASON_AP_INITIATED: return "WIFI_REASON_AP_INITIATED";
case WIFI_REASON_INVALID_FT_ACTION_FRAME_COUNT: return "WIFI_REASON_INVALID_FT_ACTION_FRAME_COUNT";
case WIFI_REASON_INVALID_PMKID: return "WIFI_REASON_INVALID_PMKID";
case WIFI_REASON_INVALID_MDE: return "WIFI_REASON_INVALID_MDE";
case WIFI_REASON_INVALID_FTE: return "WIFI_REASON_INVALID_FTE";
case WIFI_REASON_TRANSMISSION_LINK_ESTABLISH_FAILED: return "WIFI_REASON_TRANSMISSION_LINK_ESTABLISH_FAILED";
case WIFI_REASON_ALTERATIVE_CHANNEL_OCCUPIED: return "WIFI_REASON_ALTERATIVE_CHANNEL_OCCUPIED";
case WIFI_REASON_BEACON_TIMEOUT: return "WIFI_REASON_BEACON_TIMEOUT";
case WIFI_REASON_NO_AP_FOUND: return "WIFI_REASON_NO_AP_FOUND";
case WIFI_REASON_AUTH_FAIL: return "WIFI_REASON_AUTH_FAIL";
case WIFI_REASON_ASSOC_FAIL: return "WIFI_REASON_ASSOC_FAIL";
case WIFI_REASON_HANDSHAKE_TIMEOUT: return "WIFI_REASON_HANDSHAKE_TIMEOUT";
case WIFI_REASON_CONNECTION_FAIL: return "WIFI_REASON_CONNECTION_FAIL";
case WIFI_REASON_AP_TSF_RESET: return "WIFI_REASON_AP_TSF_RESET";
case WIFI_REASON_ROAMING: return "WIFI_REASON_ROAMING";
case WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG: return "WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG";
default: return nullptr;
}
}
const char *errmsg = wifiErrToString((wifi_err_reason_t)WiFiCtrl.WiFiDisconnectedReason); //Usage in my code. WiFiCtrl adds on to WiFi.h.
Sketch
Unavailable
Debug Message
09:47:44.205 > Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
09:47:44.337 >
09:47:44.337 > Core 1 register dump:
09:47:44.337 > PC : 0x4008999c PS : 0x00060030 A0 : 0x8016f289 A1 : 0x3ffbb880
=> 0x4008999c: memchr at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/string/memchr.c:120
09:47:44.337 > A2 : 0x000000ff A3 : 0x00000000 A4 : 0x000000fe A5 : 0x00000002
09:47:44.337 > A6 : 0x401732a4 A7 : 0x00000000 A8 : 0x00000000 A9 : 0x3ffbb850
=> 0x401732a4: __ssputs_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/nano-vfprintf.c:179
09:47:44.337 > A10 : 0x00000000 A11 : 0x3ffbb921 A12 : 0x00000000 A13 : 0x00000000
09:47:44.337 > A14 : 0x3ffbb8f9 A15 : 0x00000000 SAR : 0x0000000a EXCCAUSE: 0x0000001c
09:47:44.337 > EXCVADDR: 0x000000ff LBEG : 0x40084b7d LEND : 0x40084b85 LCOUNT : 0x00000027
=> 0x40084b7d: esp_timer_impl_get_counter_reg at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_timer/src/esp_timer_impl_lac.c:118 (discriminator 2)
=> 0x40084b85: esp_timer_impl_get_counter_reg at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_timer/src/esp_timer_impl_lac.c:128 (discriminator 1)
09:47:44.337 >
09:47:44.337 >
09:47:44.337 > Backtrace: 0x40089999:0x3ffbb880 0x4016f286:0x3ffbb8a0 0x401736ed:0x3ffbb8e0 0x40171356:0x3ffbb990 0x40171392:0x3ffbba20 0x400dd4a4:0x3ffbba60 0x400dd511:0x3ffbbaa0 0x40160015:0x3ffbbaf0 0x40160275:0x3ffbbc80
=> 0x40089999: memchr at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/string/memchr.c:118
=> 0x4016f286: _printf_i at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/nano-vfprintf_i.c:219
=> 0x401736ed: _svfprintf_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/nano-vfprintf.c:636
=> 0x40171356: _vsnprintf_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vsnprintf.c:70 (discriminator 4)
=> 0x40171392: vsnprintf at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vsnprintf.c:40
=> 0x400dd4a4: log_printfv at C:/Users/UserName/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-uart.c:543
=> 0x400dd511: log_printf at C:/Users/UserName/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-uart.c:576
=> 0x40160015: WiFiGenericClass::_eventCallback(arduino_event_t*) at C:/Users/UserName/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src/WiFiGeneric.cpp:953 (discriminator 4)
=> 0x40160275: _arduino_event_task(void*) at C:/Users/UserName/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src/WiFiGeneric.cpp:303
Other Steps to Reproduce
Have not reproduced the initial crash yet
I have checked existing issues, online documentation and the Troubleshooting Guide
- I confirm I have checked existing issues, online documentation and Troubleshooting guide.