NodeMCU Exception 28 - прерывистая проблема

Я ИНОГДА получаю исключение 28 при запуске веб-загрузки (по очень нестабильному каналу CPE в сельской местности — Wi-Fi работает нормально, но подача данных то включается, то отключается):

Decoding stack results
0x40213b8c: dns_gethostbyname at core/dns.c line 1472
0x40204d95: ESP8266WiFiGenericClass::hostByName(char const*, IPAddress&, unsigned int) at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp line 468
0x40208d7c: HardwareSerial::write(unsigned char const*, unsigned int) at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/HardwareSerial.h line 159
0x4020519c: WiFiClient::connect(char const*, unsigned short) at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/libraries/ESP8266WiFi/src/WiFiClient.cpp line 98
0x40208fe0: Print::println(char const*) at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/Print.cpp line 190
0x402040c4: uploadAgrigis(char const*) at /home/tony/Arduino/sketches/tempo1_vs12b_Master_NodeMCU_Rain_Wind/tempo1_vs12b_Master_NodeMCU_Rain_Wind.ino line 360
0x40208f41: Print::write(char const*) at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/Print.h line 60
0x40208f6c: Print::println() at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/Print.cpp line 178
0x40204a2b: loop() at /home/tony/Arduino/sketches/tempo1_vs12b_Master_NodeMCU_Rain_Wind/tempo1_vs12b_Master_NodeMCU_Rain_Wind.ino line 258
0x402074f0: TwoWire::endTransmission() at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/libraries/Wire/Wire.cpp line 151
0x40203a04: BH1750_Init(int) at /home/tony/Arduino/sketches/tempo1_vs12b_Master_NodeMCU_Rain_Wind/tempo1_vs12b_Master_NodeMCU_Rain_Wind.ino line 1121
0x40209d3c: loop_wrapper() at /home/tony/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/core_esp8266_main.cpp line 125

Мой код в строке 360

if (client.connect(serverName,80)) { 

Моя текущая стратегия заключается в том, чтобы постоянно поддерживать соединение Wi-Fi. Должен ли я проверить подключение перед попыткой подключения к серверу?

, 👍0


1 ответ


1

Исключение 28, согласно документу со списком исключений:

Доступ к неверному адресу

Наиболее распространенная причина — попытка чтения или записи из/в указатель NULL.

Это может быть связано с тем, что у вас включена отладка, и эта отладка пытается напечатать что-то, что не было возвращено должным образом из другого вызова функции (вызов не удался). имя хоста (hostByName()) из-за непостоянного подключения к Интернету.

Это может показаться нелогичным, но попробуйте отключить отладку, чтобы увидеть, поможет ли это уменьшить количество сбоев.

,

контринтуитивно имеет смысл. дайте мне пару дней на бенчмаркинг, и я вернусь. ПРОГОЛОСОВАНО, ожидается ПРИНЯТИЕ., @tony gil

не решил проблему. попытка изменить уровень lwIP на 1.4 согласно https://github.com/esp8266/Arduino/issues/4078, @tony gil

тоже не помогло... в тупике, @tony gil

@tonygil Вы должны сократить свою программу до абсолютного минимума и добавлять разные части, пока она не начнет давать сбой., @Majenko

спасибо Сделаю. будут работать отдельные риги с разным уровнем сложности., @tony gil