esp8266 / Arduino

ESP8266 core for Arduino
GNU Lesser General Public License v2.1
15.97k stars 13.34k forks source link

Exception 28 when use HTTPClient::getString() #5618

Closed seyedhamid1 closed 4 years ago

seyedhamid1 commented 5 years ago

Basic Infos

Platform

Settings in IDE

Problem Description

hello i use httpclint to http get method for my webservice which sometimes causes a reset

MCVE Sketch


bool cloudhttpRequest(String &result, String arg)
{
  result = "";
  HTTPClient http;
  http.begin("http://domain.com/api/" + arg);
  int httpCode = http.GET();
  if (httpCode == HTTP_CODE_OK) {
    result = http.getString();
  }
  http.end();
  return (httpCode == HTTP_CODE_OK);
}

Debug Messages

Decoding stack results
0x401006dc: free at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\umm_malloc\umm_malloc.c line 1755
0x4023bbec: String::invalidate() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\WString.cpp line 141
0x4023bc08: String::~String() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\WString.cpp line 125
0x40236b6c: HTTPClient::getString() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266HTTPClient\src\ESP8266HTTPClient.cpp line 759
0x401006dc: free at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\umm_malloc\umm_malloc.c line 1755
0x4023bdf6: String::operator=(String&&) at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\WString.cpp line 232
0x40209c6f: cloudhttpRequest(String&, String) at E:\Hamid\electronic\BirdCare\atmega8 version - Alarm\mycode_nodemcu/mycode_nodemcu.ino line 643
0x4023bddc: String::String(String const&) at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\WString.cpp line 41
0x402150f8: cloudstringGet(String&) at E:\Hamid\electronic\BirdCare\atmega8 version - Alarm\mycode_nodemcu/mycode_nodemcu.ino line 592
0x402430f8: _strtol_r at ../../../.././newlib/libc/stdlib/strtol.c line 186
0x402431c0: strtol at ../../../.././newlib/libc/stdlib/strtol.c line 224
0x402331f8: SPIClass::setFrequency(unsigned int) at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\SPI\SPI.cpp line 236
0x40235919: TFT_eSPI::getTouch(unsigned short*, unsigned short*, unsigned short) at C:\Users\hamid\Documents\Arduino\libraries\TFT_eSPI\Extensions/Touch.cpp line 137
0x402358fe: TFT_eSPI::getTouch(unsigned short*, unsigned short*, unsigned short) at C:\Users\hamid\Documents\Arduino\libraries\TFT_eSPI\Extensions/Touch.cpp line 131
0x40100575: realloc at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\umm_malloc\umm_malloc.c line 1499
0x4023ca44: esp_yield() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\core_esp8266_main.cpp line 91
0x40202dde: delay at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\core_esp8266_wiring.c line 54
0x4023bc33: String::changeBuffer(unsigned int) at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\WString.cpp line 156
0x4023bc7f: String::reserve(unsigned int) at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\WString.cpp line 146
0x4023591c: TFT_eSPI::getTouch(unsigned short*, unsigned short*, unsigned short) at C:\Users\hamid\Documents\Arduino\libraries\TFT_eSPI\Extensions/Touch.cpp line 137
0x4021a5f3: cloudserver() at E:\Hamid\electronic\BirdCare\atmega8 version - Alarm\mycode_nodemcu/mycode_nodemcu.ino line 655
0x40237bbc: TwoWire::endTransmission(unsigned char) at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\Wire\Wire.cpp line 143
0x40224a34: tuchcheeck() at E:\Hamid\electronic\BirdCare\atmega8 version - Alarm\mycode_nodemcu/draw_lcd.ino line 6341
0x401067d4: millis at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\core_esp8266_wiring.c line 183
0x4023ca44: esp_yield() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\core_esp8266_main.cpp line 91
0x4022b42c: ESP8266WiFiSTAClass::status() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266WiFi\src\ESP8266WiFiSTA.cpp line 498
0x4022a3a1: loop() at E:\Hamid\electronic\BirdCare\atmega8 version - Alarm\mycode_nodemcu/mycode_nodemcu.ino line 3697
0x4023cad4: loop_wrapper() at C:\Users\hamid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266\core_esp8266_main.cpp line 125
earlephilhower commented 5 years ago

This is not an MCVE sketch so can't be used to do anything by anyone but yourself. It needs to be fully compilable and runnable by someone without your specific code or system.

And again, this is an out of memory problem or memory corruption in your code in another routine. All RAM is unavailable so the String is not to be able to do it's allocations.

seyedhamid1 commented 5 years ago

Thanks for response

My sketch code is very big(about 640kb of flash) and 55% of memory is used. This problem occurs after 3 or 4 hours My code use this func every 15 sec Apologise for my bad english

earlephilhower commented 5 years ago

Sorry, but there is nothing for us to do. Your entire application has a memory leak somewhere. See https://en.wikipedia.org/wiki/Memory_leak for a description of what a memory leak is, and then you'll need to find it and fix it in your complete application.

mateiemil97 commented 4 years ago

I faced same problem and my problem gone with an downgrade from 2.6.3 to 2.5.2