Skip to content

Crashing for unknown reason #296

@raako71

Description

@raako71

Platform

ESP32

IDE / Tooling

Arduino (IDE/CLI)

What happened?

I have found an issue where the system will panic and crash

Stack Trace

corrupted.

Minimal Reproductible Example (MRE)

This command will cause a system panic when buffer is too large (8192 was the value in my case), before any clients are connected: ws.textAll(buffer);
This is the Eth example with the problematic function included.

`
#include <ETH.h>
#include <ESPAsyncWebServer.h>

static AsyncWebServer server(80);
static bool eth_connected = false;
static AsyncWebSocket ws("/ws");

// WARNING: onEvent is called from a separate FreeRTOS task (thread)!
void onEvent(arduino_event_id_t event) {
switch (event) {
case ARDUINO_EVENT_ETH_START:
Serial.println("ETH Started");
// The hostname must be set after the interface is started, but needs
// to be set before DHCP, so set it from the event handler thread.
ETH.setHostname("esp32-ethernet");
break;
case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break;
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("ETH Got IP");
Serial.println(ETH);
eth_connected = true;
break;
case ARDUINO_EVENT_ETH_LOST_IP:
Serial.println("ETH Lost IP");
eth_connected = false;
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("ETH Disconnected");
eth_connected = false;
break;
case ARDUINO_EVENT_ETH_STOP:
Serial.println("ETH Stopped");
eth_connected = false;
break;
default: break;
}
}

void testClient(const char *host, uint16_t port) {
Serial.print("\nconnecting to ");
Serial.println(host);

NetworkClient client;
if (!client.connect(host, port)) {
Serial.println("connection failed");
return;
}
client.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);
while (client.connected() && !client.available());
while (client.available()) {
Serial.write(client.read());
}

Serial.println("closing connection\n");
client.stop();
}

void setup() {
Serial.begin(115200);
Network.onEvent(onEvent);
ETH.begin(ETH_PHY_LAN8720, 0, 23, 18, 5, ETH_CLOCK_GPIO17_OUT);
}

void loop() {
if (eth_connected) {
testClient("google.com", 80);
char buffer[8192];
ws.textAll(buffer);
}
delay(10000);
}
`

I confirm that:

  • I have read the documentation.
  • I have searched for similar discussions.
  • I have searched for similar issues.
  • I have looked at the examples.
  • I have upgraded to the lasted version of ESPAsyncWebServer (and AsyncTCP for ESP32).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions