ESP8266 espconn_sent 连续发送 & 发送失败 总结

(1)espconn_sent 怎么样连续发送?
我们可以看到在数据手册上有一段话,是说需要在一包数据发送成功,进入espconn_sent_callback后,在调用espconn_send发送下一包数据。所以说,不能连续的执行

espconn_sent(xxxx);
espconn_sent(xxxx);

这是不可以的!如果我们打印espconn_sent的返回讯息会看到值是“-7”,
错误码:
• ESPCONN_ARG:未找到参数 espconn 对应的⽹络传输 -12 /* Illegal argument. /
• ESPCONN_MEM:空间不⾜ -1 /
Out of memory error. /
• ESPCONN_MAXNUM:底层发包缓存已满,发包失败 -7 /
Total number exceeds the set maximum*/
• ESPCONN_IF:UDP 发包失败 -14 /* UDP send error */

那么有什么办法可以发送多条呢?(这是在官方论坛上看到的)
答:可以调用 espconn_regist_write_finish,增加发包缓存,这样能最多缓存 8 包(或者 2920 bytes)数据,一旦缓存满了,仍然会报 -7 错误,也就是达到发包缓存上限。

(2)espconn_sent 发送失败是为什么?
我在验证连续发送问题的时候偶然发现espconn_sent发送始终没有输出,于是仔细的寻找bug终于被我找到了问题所在。
在验证程序中我先加了一个1s的定时器,让他一秒执行一次回调函数
在这里插入图片描述
在这里插入图片描述
问题就出在这个注册函数中的NULL,如果是NULL,回调函数中的参数pespconn就没有链接到之前代码中的espconn结构体中,自然就会输出pespconn = NULL。
所以在定义定时器的时候就应该绑定对应的参数。
在这里插入图片描述
我们看一下输出的log:
[13:40:25.081]收←◆ip:192.168.1.160,mask:255.255.254.0,gw:192.168.0.1
[13:40:25.158]收←◆ESP8266_IP = 192.168.1.160
[13:40:31.330]收←◆
ESP8266_TCP_Break
[13:40:34.041]收←◆pm open,type:2 0
[13:40:37.604]收←◆
ESP8266_TCP_Break
[13:40:41.626]收←◆
--------------- ESP8266_TCP_Connect_OK ---------------
[13:40:41.683]收←◆
ESP8266_WIFI_Send_OK
send_active =1
[13:40:43.683]收←
--------------- ESPCONN_CONNECT ---------------
--------------- send_active = 1 ---------------
--------------- yuanyin = 0 ---------------
--------------- yuanyin2 = -7 ---------------
3ffe86a5 already freed
ESP8266_WIFI_Send_OK
send_active =1
[13:40:45.754]收←◆
--------------- ESPCONN_CONNECT ---------------
--------------- send_active = 1 ---------------
--------------- yuanyin = 0 ---------------
-------------- yuanyin2 = -7 ---------------
3ffe86a5 already freed

以下的测试代码如果您需要可以下载:
https://download.csdn.net/download/mhj258258/11728049

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mhj258258

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值