完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们使用 esp8266 开发了一个网格系统。
在所有开发完成时,我们发现了一个关键问题。 如果ESP8266收到重传的 UDP 数据包,则 udp 接收回调函数会调用两次。 (*. 收到两个 UDP 数据包的 payload 在回调函数中完全相同) 有几种方法可以解决这个问题。但是我们的应用程序解决方案需要一个大的内存池。 我认为这个问题应该在无线驱动程序中得到解决。 |
|
相关推荐
1个回答
|
|
在这种情况下,我们可以采取一些策略来解决ESP8266接收到重传的UDP数据包时,udp接收回调函数被调用两次的问题。以下是一些建议:
1. **检查数据包的唯一性**: 在接收到UDP数据包时,我们可以检查数据包的唯一性。例如,我们可以在每个数据包中添加一个序列号或时间戳。在回调函数中,我们可以先检查接收到的数据包是否与上一个数据包相同。如果是相同的数据包,我们可以忽略它,只处理新的数据包。 2. **使用队列管理数据包**: 我们可以在ESP8266上实现一个队列来管理接收到的UDP数据包。当接收到一个新数据包时,我们将其添加到队列中。在回调函数中,我们可以从队列中取出数据包并处理。这样可以确保每个数据包只被处理一次。 3. **使用定时器避免重复处理**: 我们可以在回调函数中使用一个定时器来避免重复处理。当接收到一个新数据包时,我们启动一个定时器。如果在定时器超时之前再次接收到相同的数据包,我们可以忽略它。这样可以确保每个数据包只被处理一次。 4. **优化网络协议**: 如果可能的话,我们可以尝试优化网络协议,以减少数据包重传的可能性。例如,我们可以使用更可靠的传输协议,如TCP,而不是UDP。虽然这可能会增加一些延迟,但它可以减少数据包重传的问题。 5. **调整ESP8266的网络参数**: 我们可以尝试调整ESP8266的网络参数,以减少数据包重传的可能性。例如,我们可以增加数据包的超时时间,或者减少数据包的发送频率。这样可以减少数据包重传的概率,从而减少回调函数被调用两次的问题。 6. **使用更高级的无线驱动程序**: 如果可能的话,我们可以尝试使用更高级的无线驱动程序,这些驱动程序可以更好地处理数据包重传的问题。这可能需要一些额外的开发工作,但它可以提供更好的性能和更少的问题。 7. **使用第三方库**: 我们可以考虑使用一些第三方库来帮助处理数据包重传的问题。这些库可能已经实现了一些优化和解决方案,可以减少数据包重传的问题。 总之,解决ESP8266接收到重传的UDP数据包时,udp接收回调函数被调用两次的问题需要综合考虑多种策略。我们可以根据实际需求和资源限制,选择最适合我们的解决方案。 |
|
|
|
只有小组成员才能发言,加入小组>>
528浏览 6评论
438浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
425浏览 5评论
422浏览 4评论
398浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 03:27 , Processed in 0.666330 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号