philbowles/h4plugins

Flash wear using H4P_PersistentStorage ?

Closed this issue · 0 comments

Hi @philbowles

I'm running my device all the day using H4P, and it's working good.
Until I Unplugged the device last night.

After re-power it : I get continuous reboots with Exception(28) with log & decoded stack as following :

H4 version 0.5.4

Exception (28):
epc1=0x4024dfbb epc2=0x00000000 epc3=0x00000000 excvaddr=0x01e001e0 depc=0x00000000

LoadProhibited: A load referenced a page mapped with an attribute that does not permit loads
  epc1=0x4024dfbb in std::string::_Rep::_M_grab(std::allocator<char> const&, std::allocator<char> const&) at /workdir/arena.x86_64/gcc/xtensa-lx106-elf/libstdc++-v3/include/bits/basic_string.h:231

0x40202354 in std::__detail::_Map_base<std::string, std::pair<std::string const, std::string>, std::allocator<std::pair<std::string const, std::string> >, std::__detail::_Select1st, std::equal_to<std::string>, std::hash<std::string>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true>, true>::operator[](std::string const&) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/hashtable_policy.h:498
0x4024d609 in operator delete(void*) at /workdir/repo/gcc/libstdc++-v3/libsupc++/del_op.cc:48
0x4021fdea in H4P_PersistentStorage::_hookIn() at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_vector.h:418
 (inlined by) H4P_PersistentStorage::_hookIn() at lib\h4plugins-dev\src/H4P_PersistentStorage.cpp:41
0x4021c714 in H4P_AsyncWebServer::_hookIn() at lib\h4plugins-dev\src/H4P_AsyncWebServer.cpp:38 (discriminator 1)
0x4022746d in h4StartPlugins() at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_iterator.h:748
 (inlined by) h4StartPlugins() at lib\h4plugins-dev\src/H4Plugins.cpp:40
0x40228b34 in HardwareSerial::write(unsigned char const*, unsigned int) at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/HardwareSerial.h:162
0x40229209 in Print::print(char const*) at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/Print.cpp:130
0x40229228 in Print::println() at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/Print.cpp:186
0x40206adf in std::_Function_handler<void (), std::_Bind<H4::H4(unsigned int, unsigned int)::{lambda(unsigned int)#1} (unsigned int)> 
>::_M_invoke(std::_Any_data const&) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2/functional:2073
0x401001b1 in std::function<void ()>::operator()() const at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2/functional:2465
0x4020f29f in setup at .pio\libdeps\nodemcuv2\H4\src/H4.cpp:275
0x4022bb64 in loop_wrapper() at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/core_esp8266_main.cpp:194
0x40102075 in cont_wrapper at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/cont.S:81  

What I've tested then ?

  1. Tested Blinking LED, worked fine.
  2. H4Plugins with WiFi , AsyncMQTT (Pangolin) : worked fine.

But this MCVE represents the error :

#include <H4Plugins.h>
H4_USE_PLUGINS(115200,20,false) // Serial baud rate, Q size, SerialCmd autostop
H4P_PersistentStorage h4ps;

void h4setup(){
    Serial.println("h4setup");
}

With log & decoded stack as following :

H4 version 0.5.4

Exception (9):
epc1=0x4021d143 epc2=0x00000000 epc3=0x00000000 excvaddr=0x013f013f depc=0x00000000

LoadStoreAlignmentCause: Load or store to an unaligned address
  epc1=0x4021d143 in std::_Function_handler<void (AsyncWebServerRequest*), H4P_AsyncWebServer::_start()::{lambda(AsyncWebServerRequest*)#3}>::_M_invoke(std::_Any_data const&, AsyncWebServerRequest*) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/unordered_map.h:600
     (inlined by) operator() at lib\h4plugins-dev\src/H4P_AsyncWebServer.cpp:126
     (inlined by) _M_invoke at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2/functional:2071

>>>stack>>>

ctx: cont
sp: 3ffffd00 end: 3fffffc0 offset: 0190
3ffffe90:  3ffefcc4 0e3b53b9 3ffeea08 402045c0
3ffffea0:  00000001 3ffefcc4 3ffefc98 4021cad9
3ffffeb0:  00000000 00000000 00000000 3ffef8b4
3ffffec0:  3fffdad0 3ffefc9c 3ffefc98 40204702
3ffffed0:  4020c660 4020c644 4020c628 000fa000
3ffffee0:  00300000 00001000 3fff01c0 3ffef848
3ffffef0:  3ffefcc4 3ffefcc8 3ffefcc8 3ffef8b4
3fffff00:  3ffef8c4 3ffef8c4 00000000 3ffeed24
3fffff10:  3ffee9a8 3ffef8c4 3ffeeda0 40215f19
3fffff20:  3fffdad0 3ffefc9c 3ffefc94 3ffeed24
3fffff30:  3fffdad0 3ffefc9c 3ffefc98 4020a3dd
3fffff40:  4020ab68 3ffeec04 3ffe88b8 4020aebd
3fffff50:  3fffdad0 00000005 3ffeec04 4020aedc
3fffff60:  3fffdad0 00000000 3ffeec04 3ffeed24
3fffff70:  3fffdad0 00000000 3ffeec04 40201143
3fffff80:  feefeffe feefeffe 3ffe84e4 401000e1
3fffff90:  feefeffe feefeffe feefeffe 402023ef
3fffffa0:  feefeffe feefeffe feefeffe 4020b8cc
3fffffb0:  feefeffe feefeffe feefeffe 40100e55
<<<stack<<<

0x402045c0 in std::_Hashtable<std::string, std::pair<std::string const, command>, std::allocator<std::pair<std::string const, command> >, std::__detail::_Select1st, std::equal_to<std::string>, std::hash<std::string>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, false> >::_M_rehash_aux(unsigned int, std::integral_constant<bool, false>) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/hashtable.h:1815
0x4021cad9 in H4P_AsyncWebServer::_hookIn() at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_vector.h:909
 (inlined by) ?? at lib\h4plugins-dev\src/H4PCommon.h:269
 (inlined by) H4P_AsyncWebServer::_hookIn() at lib\h4plugins-dev\src/H4P_AsyncWebServer.cpp:36
0x40204702 in std::__detail::_Node_iterator<std::pair<std::string const, command>, false, true> std::_Hashtable<std::string, std::pair<std::string const, command>, std::allocator<std::pair<std::string const, command> >, std::__detail::_Select1st, std::equal_to<std::string>, std::hash<std::string>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, false> >::_M_insert<std::pair<std::string const, command> const&>(std::pair<std::string const, command> const&, std::integral_constant<bool, false>) at ??:?
0x4020c660 in PangolinMQTT::_onData(unsigned char*, unsigned int) at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:318
0x4020c644 in PangolinMQTT::_packetReassembler(mb) at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:316
0x4020c628 in PangolinMQTT::_packetReassembler(mb) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/basic_string.h:247
 (inlined by) ?? at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/basic_string.h:541   
 (inlined by) ?? at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/mb.h:7
 (inlined by) PangolinMQTT::_packetReassembler(mb) at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:313
0x40215f19 in AsyncFileResponse::_sourceValid() const at .pio\libdeps\nodemcuv2\ESP Async WebServer\src/WebResponseImpl.h:78
0x4020a3dd in __static_initialization_and_destruction_0(int, int) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2/functional:2029
 (inlined by) ?? at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2/functional:2174
 (inlined by) __static_initialization_and_destruction_0 at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:23        
0x4020ab68 in PangolinMQTT::connect() at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:355
0x4020aebd in PangolinMQTT::publish(char const*, unsigned char, bool, unsigned char*, unsigned int, bool) at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:383
0x4020aedc in PangolinMQTT::publish(char const*, unsigned char, bool, unsigned char*, unsigned int, bool) at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:385
0x40201143 in floatDisplayString(double, int*) at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/WString.h:301
 (inlined by) ?? at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/WString.h:80
 (inlined by) floatDisplayString(double, int*) at src/Display_Code.cpp:285
0x401000e1 in std::function<void (signed char)>::operator()(signed char) const at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2/functional:2464
0x402023ef in std::_Hashtable<std::string, std::pair<std::string const, std::string>, std::allocator<std::pair<std::string const, std::string> >, std::__detail::_Select1st, std::equal_to<std::string>, std::hash<std::string>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_insert_unique_node(unsigned int, unsigned int, std::__detail::_Hash_node<std::pair<std::string const, std::string>, true>*) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/hashtable_policy.h:347
 (inlined by) ?? at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/hashtable_policy.h:1110
 (inlined by) ?? at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/hashtable.h:593      
 (inlined by) std::_Hashtable<std::string, std::pair<std::string const, std::string>, std::allocator<std::pair<std::string const, std::string> >, std::__detail::_Select1st, std::equal_to<std::string>, std::hash<std::string>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_insert_unique_node(unsigned int, unsigned int, std::__detail::_Hash_node<std::pair<std::string const, std::string>, true>*) at c:\users\hamza\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\bits/hashtable.h:1336
0x4020b8cc in PangolinMQTT::_onPoll(AsyncClient*) at .pio\libdeps\nodemcuv2\Pangolin MQTT Client\src/PangolinMQTT.cpp:335
0x40100e55 in cont_check at C:\Users\Hamza\.platformio\packages\framework-arduinoespressif8266@3.20701.0\cores\esp8266/cont_util.cpp:46 (discriminator 2)


 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3456, room 16
tail 0
chksum 0x84
csum 0x84
va5432625
~ld

Note : It's fully working after :

  • Fully erasing the flash memory
  • Re-upload SPIFFS
  • Re-upload code

with the following log :

H4 version 0.5.4
H4P Version 0.5.7
h4setup

I knew this solution at the beginning.

But what could reproduce it ?
What could prevent it to happen again ?
As it would worry users in the future.

Thanks