完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用espconn_send函数发送自己定义的JSON数据(大约317 byte的字符串),发送大约65次左右espconn_send后返回ESPCONN_MEM(Out of memory)的错误导致芯片复位,附件上传的是我整个的源码和编译完成后的文件。
********************************************************************** * “eagle.dump”文件请见本压缩文件解压后的路径TCP_Server_Demooutbineagle.dump * ********************************************************************** 重复步骤: 1、上电ESP8266(程序设置为静态IP:192,168,1,77)小板连接无线路由器(SSID:Test WiFi PASSWORD:12345678),无线路由器Gateway IP(192,168,1,60) IP4_ADDR(&info.ip,192,168,1,77); IP4_ADDR(&info.gw,192,168,1,60); IP4_ADDR(&info.netmask,255,255,255,0); wifi_station_dhcpc_stop(); wifi_set_ip_info(STATION_IF,&info); //设置sta模式的IP 2、使用TCP调试助手通过80端口Client小板(ESP8266) 1、TCP调试助手必须和ESP8266在同一个局域网下, 2、设置TCP调试助手的通讯模式为TCP Client 3、设置TCP调试助手的远程主机地址为192.168.1.77(ESP8266的IP地址)端口为80 4、TCP助手Client连接ESP8266串口会打印消息,根据我加入的串口调试信息大约发送大约65次左右espconn_send返回ESPCONN_MEM错误返回值导致芯片复位。 代码(在附件里)请见user_main.c 的169行: printf("----------------------n TCP Send Count:%dn espconn_send return %dn",pa->temp,espconn_send(pTask_TCP->TCP_SERVER_STRUCT,TCP_SEND_STRING,strlen(TCP_SEND_STRING))); 串口打印的数据如下: (TCP Send Count:后面的值是espconn_send发送的次数;espconn_send return后面的值是espconn_send函数的返回值) ---------------------- TCP Send Count:62 espconn_send return 0 ---------------------- TCP Send Count:63 espconn_send return 0 ---------------------- TCP Send Count:64 espconn_send return -1 ---------------------- TCP Send Count:65 espconn_send return -1 ---------------------- TCP Send Count:66 espconn_send return -1 Fatal exception (28): epc1=0x4000bf80 epc2=0x00000000 epc3=0x40105b0b epcvaddr=0x00000000 depc=0x00000000 rtn_add=0x40002ad0 ? ets Jan 8 2013,rst cause:2, boot mode:(3,7) load 0x40100000, len 26044, room 16 tail 12 chksum 0x3e ho 0 tail 12 room 4 load 0x3ffe8000, len 2152, room 12 tail 12 chksum 0x22 ho 0 tail 12 room 4 load 0x3ffe8870, len 2696, room 12 tail 12 chksum 0xd2 csum 0xd2 |
|
相关推荐
1个回答
|
|
根据您提供的信息,您在使用ESP8266发送自定义的JSON数据时遇到了ESPCONN_MEM(内存不足)错误,导致芯片复位。以下是一些建议和可能的原因:
1. **内存不足**:ESP8266的内存有限,当您发送大量数据时,可能会导致内存不足。您可以尝试优化您的代码,减少内存使用。 2. **缓冲区溢出**:检查您的代码,确保在使用espconn_send函数时,没有超出缓冲区的大小。如果数据超过了缓冲区的大小,可能会导致内存溢出和错误。 3. **重传机制**:检查您的代码,确保在发送数据时,有适当的重传机制。如果数据没有成功发送,重传机制可以帮助确保数据最终被发送。 4. **连接状态**:在发送数据之前,检查TCP连接的状态。如果连接已断开,尝试重新建立连接,然后再发送数据。 5. **错误处理**:在您的代码中添加错误处理逻辑,以便在遇到ESPCONN_MEM错误时,可以采取适当的措施,例如释放内存、重试发送等。 6. **调试**:使用调试工具(如eagle.dump)来分析程序的运行情况,找出可能导致内存不足的原因。 7. **代码优化**:检查您的代码,看看是否有可以优化的地方,例如减少全局变量的使用、使用更高效的数据结构等。 8. **固件升级**:如果您使用的是较旧的ESP8266固件,尝试升级到最新版本,以获得更好的性能和稳定性。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
429浏览 6评论
362浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
343浏览 5评论
349浏览 4评论
327浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-1 14:21 , Processed in 0.761724 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191