ESP32启动了一个web服务,并且使用websocket进行数据通信。

在建立ws通信后,客户端可以向ws服务端发送指令,要求重启wifi服务。

结果导致报错

lwip "pbuf_free: p->ref > 0


assert failed: pbuf_free IDF/components/lwip/lwip/src/core/pbuf.c:757 (pbuf_free: p->ref > 0)
 

经过多次尝试排查,后来找到了问题。是因为

ESP32->Websocket->onEvent->接受指令处理->重置服务

问题发生在onEvent中,因为在接收到客户端数据后会执行指令,然后重置服务。

重置完毕后,程序会以此:重置服务 return->接受指令处理  return -> onEvent return 

由于已经重置了服务,结果导致一路return到顶层后,发现为空了。

因此,使用了一个全局变量,在onEvent接收到数据后修改他为标志。

再用单独的线程实时判断是否需要重置,在onEvent同级函数中操作。

问题搞定。 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐