Crashing mesh
I discovered a strange fact that a mesh network from one root node WEMOS D1 mini works stably. But as soon as one more node WEMOS D1 mini is added, the network begins to fall. Both nodes go off and reboot. I am working in arduino IDE and this is what the Exception Decoder gives
- Exception 3: LoadStoreError: Processor internal physical address or data error during load or store
- PC: 0x401006b5
- EXCVADDR: 0x40032339
-
- Decoding stack results
- 0x40201240: painlessmesh::callback::List ::execute(unsigned int, bool) at c:\users\wb\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\c++\10.3.0\bits/stl_list.h line 219
- 0x4010076e: umm_free_core(umm_heap_context_t*, void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 642
- 0x40100abc: free(void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 688
- 0x402181d0: mem_free at core/mem.c line 236
- 0x4021825d: memp_free at core/memp.c line 383
- 0x40218d68: tcp_free at core/tcp.c line 216
- 0x4021b67c: tcp_input at core/tcp_in.c line 449
- 0x4022063d: ip4_input at core/ipv4/ip4.c line 1467
- 0x402181a9: mem_malloc at core/mem.c line 210
- 0x4010076e: umm_free_core(umm_heap_context_t*, void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 642
- 0x40217869: ethernet_input_LWIP2 at netif/ethernet.c line 188
- 0x4021767c: esp2glue_ethernet_input at glue-lwip/lwip-git.c line 118
- 0x402408c1: ethernet_input at glue-esp/lwip-esp.c line 365
- 0x402408d3: ethernet_input at glue-esp/lwip-esp.c line 373
- 0x401000ab: app_entry_redefinable() at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\core_esp8266_main.cpp line 386
- 0x4010076e: umm_free_core(umm_heap_context_t*, void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 642
- 0x40100d22: realloc(void*, size_t) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 1248
- 0x4020bad7: String::changeBuffer(unsigned int) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/WString.h line 328
- 0x4020bb6b: String::reserve(unsigned int) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\WString.cpp line 192
- 0x4020bdb0: String::concat(char const*, unsigned int) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\WString.cpp line 353
- 0x402012c4: ArduinoJson6201_F1::Writer ::flush() at C:\Users\wb\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp line 42
- 0x40201306: ArduinoJson6201_F1::Writer ::write(unsigned char) at C:\Users\wb\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp line 26
- 0x40205018: ArduinoJson6201_F1::CountingDecorator >::write(unsigned char const*, unsigned int) at C:\Users\wb\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp line 33
- 0x402050b0: ArduinoJson6201_F1::TextFormatter >::writeInteger (unsigned long long) at C:\Users\wb\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Json/TextFormatter.hpp line 154
- 0x402012c4: ArduinoJson6201_F1::Writer ::flush() at C:\Users\wb\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp line 42
- 0x4020bdb0: String::concat(char const*, unsigned int) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\WString.cpp line 353
- 0x40205a56: ArduinoJson6201_F1::CountingDecorator >::write(unsigned char) at C:\Users\wb\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Serialization/CountingDecorator.hpp line 16
- 0x40100af0: malloc(size_t) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 912
- 0x4020bad7: String::changeBuffer(unsigned int) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/WString.h line 328
- 0x40100af0: malloc(size_t) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 912
- 0x4010076e: umm_free_core(umm_heap_context_t*, void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 642
- 0x4021536c: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 232
- 0x4010076e: umm_free_core(umm_heap_context_t*, void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 642
- 0x40210ca9: _printf_i at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf_i.c line 194
- 0x4021536c: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 232
- 0x402152a8: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 182
- 0x401001e8: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\core_esp8266_main.cpp line 238
- 0x401001e8: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\core_esp8266_main.cpp line 238
- 0x401001e8: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\core_esp8266_main.cpp line 238
- 0x4020da65: run_scheduled_recurrent_functions() at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\Schedule.cpp line 281
- 0x40208331: Scheduler::execute() at C:\Users\wb\Documents\Arduino\libraries\TaskScheduler\src/TaskScheduler.h line 1451
- 0x4020d93c: run_scheduled_recurrent_functions() at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/core_esp8266_features.h line 64
- 0x40100abc: free(void*) at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\umm_malloc.cpp line 688
- 0x4020ba29: String::invalidate() at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/WString.h line 363
- 0x40231cd4: StationScan::connectToAP() at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/WString.h line 115
- 0x40208402: Task::yield(std::function ) at C:\Users\wb\Documents\Arduino\libraries\TaskScheduler\src/TaskScheduler.h line 636
- 0x4020c342: __yield() at C:\Users\wb\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/core_esp8266_features.h line 64
- 0x40208331: Scheduler::execute() at C:\Users\wb\Documents\Arduino\libraries\TaskScheduler\src/TaskScheduler.h line 1451
Similar errors occur on both nodes. But if you do a reconnect on the network on a child node, then the node is no longer rebooted.
void setup() {
Serial.begin(SERIAL_BAUD, SERIAL_8N1, SERIAL_TX_ONLY);
//mesh.setDebugMsgTypes(0);
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
mesh.onReceive(&receivedCallback);
//mesh.setRoot(true);
mesh.setContainsRoot(true);
mesh.onNewConnection(&newConnectionCallback);
mesh.onDroppedConnection(&droppedConnectionCallback);
mesh.onChangedConnections(&changedConnectionCallback);
mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
}
void loop() {
mesh.update();// она также запустит пользовательский планировщик
if (millis()< sendnum) sendnum = 0;
if (millis()-sendnum>10000) {
mesh.stop();
Serial.printf_P(PSTR("%lu: Reconnect\r\n"), millis());
mesh_init();
sendnum = millis();
}
}
void mesh_init() {
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
mesh.onReceive(&receivedCallback);
//mesh.setRoot(true);
mesh.setContainsRoot(true);
mesh.onNewConnection(&newConnectionCallback);
mesh.onDroppedConnection(&droppedConnectionCallback);
mesh.onChangedConnections(&changedConnectionCallback);
mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
}
Edited by Алексей Сабиров