8000 WifiClient crashes - _yield and millis() · Issue #5237 · esp8266/Arduino · GitHub
[go: up one dir, main page]

Skip to content
WifiClient crashes - _yield and millis() #5237
Closed
@mateusz-szafraniec

Description

@mateusz-szafraniec

Basic Infos

  • This issue complies with the issue POLICY doc.
  • I have read the documentation at readthedocs and the issue is not addressed there.
  • I have tested that the issue is present in current master branch (aka latest git).
  • I have searched the issue tracker for a similar issue.
  • If there is a stack dump, I have decoded it.
  • I have filled out all fields below.

Platform

  • Hardware: [ESP-12]
  • Core Version: [2eb5b56]
  • Development Env: [Arduino IDE]
  • Operating System: [Windows]

Settings in IDE

  • Module: [Wemos D1 mini r2]
  • Flash Mode: [qio]
  • Flash Size: [4MB]
  • lwip Variant: [v2 Lower Memory]
  • Reset Method: [nodemcu]
  • Flash Frequency: [40Mhz]
  • CPU Frequency: [80Mhz]
  • Upload Using: [SERIAL]
  • Upload Speed: [115200] (serial upload only)

Problem Description

My program randomly crashes while trying to post data via WifiClient.
Sometimes at client.connect(), sometimes at client.println(), but always latest stack trace points to millis and _yield
Sometimes program can run hours without crashes, sometimes few minutes.

Sketch

void wyslijPomiar()
{
  Serial.println(F("wyslijPomiar"));
  WiFiClient client;
  unsigned long connectStart = millis();
  if (!client.connect(adresSerwera, portSerwera)) { //sometime crashes here
      Serial.println(F("Brak połączenia z serwerem"));
      return;
  }
  client.flush();
  client.setNoDelay(true);
  bool aktualizuj = false;
  String PostData ="pm1_0_std=" + String(PM01Avg);
  PostData += "&pm2_5_std=" + String(PM25Avg);
  PostData += "&pm10_std=" + String(PM10Avg);
  PostData += "&pm1_0=" + String(PMa01Avg);
  client.println(F("POST /esp/upload.php HTTP/1.1"));
  client.println("Host: "+ String(adresSerwera));
  client.println(F("Cache-Control: no-cache")); //sometime crashes here
  client.print(F("Authorization: Basic "));
  client.println(base64::encode(AUTH));
  client.println(F("Content-Type: application/x-www-form-urlencoded"));
  client.print(F("Content-Length: "));  //sometime crashes here
  client.println(PostData.length());
  client.println();
  client.println(PostData);
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  while (client.available()|| client.connected()) {
    String line = client.readStringUntil('\r');
    //Serial.println(line);
    if (line.indexOf("Wersja") >= 0) //sprawdzanie wersji
    {
      String wersja = line.substring(8, 11);
      Serial.print(F("Wersja:"));
      Serial.println(wersja);
    }//sprawdzanie wersji
  }
  if (client.connected()) {
    client.flush();
    client.stop();
  }
  Serial.println(F("Dane wyslane"));
}

Debug Messages



Decoding stack results
0x40100440: millis (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_wiring.c line 183
0x4021916d: __yield() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_main.cpp line 105
0x4020dd6b: ClientContext::wait_until_sent(int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\include/ClientContext.h line 302
0x4020ddad: WiFiClient::flush(unsigned int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 321
0x4020d8f1: WiFiClient::stop(unsigned int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 329
0x4020e414: WiFiClient::stopAll() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 389
0x4020cd0c: ESP8266WiFiGenericClass::_eventCallback(void*) (c:\program files at x86)\arduino\hardware\esp8266com\esp8266\tools\xtensa-lx106-elf\xtensa-lx106-elf\include\c++\4.8.2\bits/range_access.h line 48
0x40222d35: glue2esp_linkoutput at glue-esp/lwip-esp.c line 299
0x40222fc3: new_linkoutput at glue-lwip/lwip-git.c line 224
0x402233e8: ethernet_output at netif/ethernet.c line 312
0x4022a9e4: etharp_output_to_arp_index at core/ipv4/etharp.c line 770
0x4022abdc: etharp_output_LWIP2 at core/ipv4/etharp.c line 885
0x4022b6d4: ip4_output_if_opt_src at core/ipv4/ip4.c line 1007
0x4022b71c: ip4_output_if_opt at core/ipv4/ip4.c line 820
0x4022bda0: mem_malloc at core/mem.c line 210
0x40100440: millis (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_wiring.c line 183
0x4022b742: ip4_output_if at core/ipv4/ip4.c line 793
0x4022be9f: ip_chksum_pseudo at core/inet_chksum.c line 395
0x4022865e: tcp_output at core/tcp_out.c line 1361
0x40224c41: sys_timeout_abs at core/timeouts.c line 189
0x402190a0: esp_yield() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_main.cpp line 91
0x40201e17: delay (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_wiring.c line 51
0x4020e2ad: WiFiClient::connect(IPAddress, unsigned short) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\include/ClientContext.h line 136
0x40100440: millis (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_wiring.c line 183
0x4020d6e0: WiFiClient::connect(char const*, unsigned short) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 133
0x4020bb0c: wyslijPomiar() at C:\Users\Mateusz\Dropbox\esp8266\pms/network.ino line 133
0x40216f0c: HardwareSerial::write(unsigned char const*, unsigned int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266/HardwareSerial.h line 159
0x402171ed: Print::write(char const*) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266/Print.h line 60
0x402173a0: Print::println() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Print.cpp line 178
0x4021690f: EspClass::getHeapStats(unsigned int*, unsigned short*, unsigned char*) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Esp-frag.cpp line 27
0x402175ae: Print::println(unsigned char, int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Print.cpp line 202
0x4020c1d9: loop() at C:\Users\Mateusz\Dropbox\esp8266\pms/loop.ino line 82
0x4021912c: loop_wrapper() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_main.cpp line 125




Decoding stack results
0x40100440: millis (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_wiring.c line 183
0x4021916d: __yield() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_main.cpp line 105
0x4020dd6b: ClientContext::wait_until_sent(int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\include/ClientContext.h line 302
0x4020ddad: WiFiClient::flush(unsigned int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 321
0x4020d8f1: WiFiClient::stop(unsigned int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 329
0x4020e414: WiFiClient::stopAll() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 389
0x4020cd0c: ESP8266WiFiGenericClass::_eventCallback(void*) (c:\program files at x86)\arduino\hardware\esp8266com\esp8266\tools\xtensa-lx106-elf\xtensa-lx106-elf\include\c++\4.8.2\bits/range_access.h line 48
0x40222d35: glue2esp_linkoutput at glue-esp/lwip-esp.c line 299
0x40222fc3: new_linkoutput at glue-lwip/lwip-git.c line 224
0x402233e8: ethernet_output at netif/ethernet.c line 312
0x40220c6c: __ssputs_r at ../../../.././newlib/libc/stdio/nano-vfprintf.c line 180
0x4022a9e4: etharp_output_to_arp_index at core/ipv4/etharp.c line 770
0x4022abdc: etharp_output_LWIP2 at core/ipv4/etharp.c line 885
0x4022b6d4: ip4_output_if_opt_src at core/ipv4/ip4.c line 1007
0x40100da4: malloc (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\umm_malloc\umm_malloc.c line 1672
0x40100da4: malloc (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\umm_malloc\umm_malloc.c line 1672
0x4022b71c: ip4_output_if_opt at core/ipv4/ip4.c line 820
0x40227949: tcp_create_segment at core/tcp_out.c line 190
0x4022b742: ip4_output_if at core/ipv4/ip4.c line 793
0x4022be9f: ip_chksum_pseudo at core/inet_chksum.c line 395
0x40222cb3: glue2esp_linkoutput at glue-esp/lwip-esp.c line 215
0x40222fc3: new_linkoutput at glue-lwip/lwip-git.c line 224
0x40222d35: glue2esp_linkoutput at glue-esp/lwip-esp.c line 299
0x40222d35: glue2esp_linkoutput at glue-esp/lwip-esp.c line 299
0x40222fc3: new_linkoutput at glue-lwip/lwip-git.c line 224
0x402233e8: ethernet_output at netif/ethernet.c line 312
0x40222fc3: new_linkoutput at glue-lwip/lwip-git.c line 224
0x4022a9e4: etharp_output_to_arp_index at core/ipv4/etharp.c line 770
0x4022a9e4: etharp_output_to_arp_index at core/ipv4/etharp.c line 770
0x4022abdc: etharp_output_LWIP2 at core/ipv4/etharp.c line 885
0x4022b6d4: ip4_output_if_opt_src at core/ipv4/ip4.c line 1007
0x40100da4: malloc (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\umm_malloc\umm_malloc.c line 1672
0x40100da4: malloc (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\umm_malloc\umm_malloc.c line 1672
0x4022b71c: ip4_output_if_opt at core/ipv4/ip4.c line 820
0x40227949: tcp_create_segment at core/tcp_out.c line 190
0x4022b742: ip4_output_if at core/ipv4/ip4.c line 793
0x4022be9f: ip_chksum_pseudo at core/inet_chksum.c line 395
0x4022865e: tcp_output at core/tcp_out.c line 1361
0x40100440: millis (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_wiring.c line 183
0x402190a0: esp_yield() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_main.cpp line 91
0x4020df3b: ClientContext::_write_from_source(DataSource*) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\include/ClientContext.h line 466
0x4020df8d: WiFiClient::write(unsigned char const*, unsigned int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\include/ClientContext.h line 361
0x4021b3dc: WiFiClient::write(unsigned char) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiClient.cpp line 220
0x40100f98: free (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\umm_malloc\umm_malloc.c line 1759
0x4021ba04: Print::print(__FlashStringHelper const*) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Print.cpp line 111
0x402173bd: Print::println(__FlashStringHelper const*) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Print.cpp line 167
0x4020be96: wyslijPomiar() at C:\Users\Mateusz\Dropbox\esp8266\pms/network.ino line 161
0x402175ae: Print::println(unsigned char, int) (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Print.cpp line 202
0x4020c1d9: loop() at C:\Users\Mateusz\Dropbox\esp8266\pms/loop.ino line 82
0x4021912c: loop_wrapper() (C:\Program Files at x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266\core_esp8266_main.cpp line 125

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0