完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我目前正在使用 CYW20829 的 BLE 进行最大数据发送应用,我使用的是 FREERTOS(例程 Bluetooth_LE_GATT_Throughput_Server 是我的参考),蓝牙被用作发送数据的任务之一,我发现每次发送 244 个数据时,都需要延迟以确保数据正确传输,如果取消延迟,就会丢弃几组 244 个数据。 如图所示。 我猜测可能是蓝牙堆栈的内部缓冲区被填满,导致数据丢失。 我该如何解决这个问题。
从这张数据对比图上可以看到,左边是我收到的数据,右边是我发送的数据,我发现他们经常丢失后面的数据段,而前 16 组 244 个数据段都能正确传输 |
|
相关推荐
1个回答
|
|
在使用CYW20829的BLE进行最大数据发送应用时,确实可能会遇到数据丢失的问题。这可能是由于蓝牙堆栈的内部缓冲区被填满导致的。为了解决这个问题,你可以尝试以下几种方法:
1. **优化数据包大小**:减小数据包的大小,以降低缓冲区溢出的风险。你可以尝试将数据包大小调整到小于244字节,例如128字节或更小。 2. **使用动态数据包大小**:根据当前的网络条件和缓冲区状态动态调整数据包大小。当发现缓冲区接近满时,减小数据包大小;当缓冲区空闲时,增加数据包大小。 3. **增加缓冲区大小**:如果可能的话,尝试增加蓝牙堆栈的内部缓冲区大小。这可能需要修改蓝牙堆栈的配置或源代码。 4. **使用流量控制**:实现流量控制机制,以确保发送方不会发送过多的数据,导致接收方无法处理。例如,可以使用GATT服务器的MTU(最大传输单元)大小来控制数据包的大小。 5. **增加重传机制**:在发送数据时,实现重传机制。如果发现数据包丢失,可以重新发送丢失的数据包。这可以通过设置超时时间或使用确认机制来实现。 6. **调整任务优先级**:在FREERTOS中,调整蓝牙发送任务的优先级,以确保它能够获得足够的CPU时间来处理数据发送。 7. **优化数据发送策略**:在发送数据时,尝试使用不同的策略,例如分批发送、间隔发送等,以减少数据包丢失的风险。 8. **监控蓝牙状态**:实时监控蓝牙连接的状态,如信号强度、连接质量等,以便在发现问题时及时调整发送策略。 9. **使用其他传输协议**:如果可能的话,可以考虑使用其他传输协议,如L2CAP(逻辑链路控制和适配协议),它提供了更高的数据传输速率和更可靠的数据传输。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
362 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6268 浏览 2 评论
4106 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3632 浏览 9 评论
1231 浏览 8 评论
457浏览 2评论
270浏览 2评论
376浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6271浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
456浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 12:37 , Processed in 0.488222 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号