完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用esp8266作为client向http server发送post请求,发送10几分钟之后,espconn_send就会返回ESPCONN_MEM错误,上一包数据发送完成,进入sent callback之后我再发下一条post请求.我怀疑是连接的tcp_PCB没有释放掉,可是我不知道该如何释放,我在disconnect callback中espconn_delete或espconn_disconnect都不行,请问有没有好的解决办法
void ICACHE_FLASH_ATTR disconnect_callback(void *arg) { struct espconn *conn = (struct espconn *)arg; sint8 error = espconn_delete(conn); //sint8 error = espconn_disconnect(conn); if(conn->proto.tcp != NULL) { os_free(conn->proto.tcp); conn->proto.tcp = NULL; } os_free(conn); user_conn = NULL; if(error != 0){ char str[30]; os_sprintf(str, " delete err: %d", error); uart0_sendStr(str); } } |
|
相关推荐
1个回答
|
|
ESP8266在发送HTTP POST请求时遇到ESPCONN_MEM错误,通常是由于内存不足导致的。以下是一些建议来解决这个问题:
1. 检查代码中是否有内存泄漏。确保在使用完动态分配的内存后,使用`free()`函数释放内存。 2. 优化数据结构和算法,减少内存使用。例如,使用更小的数据结构或更高效的算法。 3. 在`disconnect_callback`函数中,确保正确地释放连接资源。你可以尝试以下代码: ```c void ICACHE_FLASH_ATTR disconnect_callback(void *arg) { struct espconn *conn = (struct espconn *)arg; // 释放连接资源 espconn_disconnect(conn); espconn_delete(conn); // 释放与连接相关的其他资源(如果有) // ... } ``` 4. 如果问题仍然存在,可以尝试使用更简单的HTTP客户端库,如[ESP8266 HTTP Client](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266HTTPClient),它可能更有效地管理内存。 5. 如果你仍然遇到ESPCONN_MEM错误,可以尝试升级ESP8266固件到最新版本,以获取可能的内存管理和性能改进。 6. 最后,如果以上方法都无法解决问题,你可以考虑使用具有更大内存的ESP32或其他具有更高性能的微控制器。 |
|
|
|
只有小组成员才能发言,加入小组>>
1138 浏览 1 评论
576浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
437浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:11 , Processed in 0.831578 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号