Более месяца мучился с проблемой спонтанной перезагрузки ESP8266 (ESP-07 с 1МБ памяти и ESP-12E с 4МБ памяти). Скетч обкатывался на 10 модулях и характер перезагрузки был одинаков - модули работали около 3 часов, потом происходила перезагрузка. И так по кругу. Причем объем свободной оперативной памяти не уменьшался и был всегда в пределах 18-20МБ.
Сам скетч не буду приводить, он довольно большой, его структура имеет вид:
Причем как показывали маяки, перезагрузка всегда происходила после моего кода, т.е. в момент выполнения server.handleClient(); Модули работали 12300-12700 циклов (1 цикл приблизительно 1 секунда) и уходили в перезагрузку, точной причины не было.
Что только я не делал, пока вчера не наткнулся на совет - перед подключением к WiFi-сети вставить WiFi.mode (это не помогло) и исключить режим DHCP , т.е. прописать статические IP-адреса. У меня и так были прописаны статические адреса, но была процедура была - сначала создавалось DHCP-подключение к сети, потом проверялся статический IP-адрес по маске, если адрес подходил, то происходило переподключение со статическим IP-адресом, если статический адрес указан не для этой сети, то подключение оставалось DHCP. Это было в самом начале, потом 3-4 часа все работало идеально, потом спонтанно происходила перезагрузка.
Короче, убрал DHCP-подключение, сделал сразу подключение со статическим адресом (жаль, всегда стараюсь делать универсальность процедур) и О! ЧУДО, все модули уже работают сутки без перезагрузки. Вот приблизительное содержание стека при перезагрузке:
Вот расшифровка через EspExceptionDecoder:
Дебаг стека, кстати, помогла провести версия EspExceptionDecoder-1.0.6, другие версии, даже более поздние, говорили, что неправильный вид стека. Отсутствующий, как правило, файл xtensa-lx106-elf-gdb.exe в архиве.
Сам скетч не буду приводить, он довольно большой, его структура имеет вид:
Код:
ESP8266WebServer server(80);
void setup(void)
{
Serial.begin(115200);
// код инициализации
}
void loop()
{
server.handleClient();
if (millis() - Time_Connect_Station> 1000)
{
// мой код
Time_Connect_Station=millis();
}
}
Что только я не делал, пока вчера не наткнулся на совет - перед подключением к WiFi-сети вставить WiFi.mode (это не помогло) и исключить режим DHCP , т.е. прописать статические IP-адреса. У меня и так были прописаны статические адреса, но была процедура была - сначала создавалось DHCP-подключение к сети, потом проверялся статический IP-адрес по маске, если адрес подходил, то происходило переподключение со статическим IP-адресом, если статический адрес указан не для этой сети, то подключение оставалось DHCP. Это было в самом начале, потом 3-4 часа все работало идеально, потом спонтанно происходила перезагрузка.
Короче, убрал DHCP-подключение, сделал сразу подключение со статическим адресом (жаль, всегда стараюсь делать универсальность процедур) и О! ЧУДО, все модули уже работают сутки без перезагрузки. Вот приблизительное содержание стека при перезагрузке:
Код:
Exception (29):
epc1=0x4022ecc8 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
ctx: sys
sp: 3ffffc70 end: 3fffffb0 offset: 01a0
>>>stack>>>
3ffffe10: 00000004 3fff72e4 3fff3774 00000001
3ffffe20: 4025432a 3ffef468 3fff3774 3ffef468
3ffffe30: 00000002 00000000 00000020 3fff72e4
3ffffe40: 3fff3594 00000000 3fff3590 4022ed79
3ffffe50: 4023247a 3ffeb478 3fff3590 4023267c
3ffffe60: 00000000 3ffffe90 00040000 3ffef468
3ffffe70: 3ffeb478 3ffeb478 3fff3590 402326aa
3ffffe80: 3fff4354 3fff3590 3fff3648 402348d7
3ffffe90: c0a80108 40101f8c 3fffc200 00000022
3ffffea0: 00000000 000000f9 3fff731e 3fff366e
3ffffeb0: 000000f5 3fff3648 000000f0 00000004
3ffffec0: 00000004 00000004 00000000 3fff72e4
3ffffed0: 00000224 40264465 00000000 3fff72e4
3ffffee0: 3fff3678 3fff7316 3fff439c 3fff72e4
3ffffef0: 3fff3678 3fff7316 3fff439c 4023293c
3fffff00: 00000000 00000043 3fff3590 00000000
3fffff10: 00000000 0000024e 3fffff80 3fff7302
3fffff20: 3fff3590 3fff72e4 3fff3678 40235de0
3fffff30: 00000014 00000004 00000004 3fff3590
3fffff40: 3fffdc80 3fff3c2c 3fff36bc 3fff3c74
3fffff50: 00000008 3fff3590 3fff72e4 4022f0dd
3fffff60: 3fffdc80 3fff3c2c 3fff36bc 4010453c
3fffff70: 40258176 3fff3c2c 3fff36bc 40258188
3fffff80: 3fff72f4 3fff72e4 00000002 3fff1f50
3fffff90: 4025306f 00000000 3fff36bc 4025a51f
3fffffa0: 40000f49 3fffdab0 3fffdab0 40000f49
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(1,6)
ets Jan 8 2013,rst cause:4, boot mode:(1,6)
wdt reset
Код:
Exception 29: StoreProhibited: A store referenced a page mapped with an attribute that does not permit stores
Decoding 19 results
0x4022ecc8: netif_disable at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/glue-esp/lwip-esp.c line 529
0x4025432a: pp_attach at ?? line ?
0x4022ed79: netif_init_ap at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/glue-lwip/lwip-git.c line 346
0x4023247a: pbuf_copy at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/pbuf.c line 1306
0x4023267c: netif_issue_reports at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/netif.c line 711
0x402326aa: netif_set_ipaddr at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/netif.c line 711
0x402348d7: dhcp_parse_reply at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/ipv4/dhcp.c line 836
: (inlined by) dhcp_recv at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/ipv4/dhcp.c line 1731
0x40101f8c: wDev_ProcessFiq at ?? line ?
0x40264465: get_sar_dout at ?? line ?
0x4023293c: udp_input at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/udp.c line 463
0x40235de0: ip4_input at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/core/ipv4/ip4.c line 580 (discriminator 1)
0x4022f0dd: ethernet_input_LWIP2 at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/lwip2-src/src/netif/ethernet.c line 107
0x4010453c: esp2glue_ethernet_input at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/glue-lwip/lwip-git.c line 433
0x40258176: pbuf_free at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/glue-esp/lwip-esp.c line 725
0x40258188: pbuf_free at /local/users/gauchard/arduino/arduino_esp8266/origin/tools/sdk/lwip2/builder/glue-esp/lwip-esp.c line 728
0x4025306f: ppPeocessRxPktHdr at ?? line ?
0x4025a51f: ets_strchr at ?? line ?
Вложения
-
2.3 MB Просмотры: 32