W801蓝牙发送超过12*244个字节的数据后发送失败,排除问题为内存池申请失败,该如何释放?

发布于 2022-06-10 21:25:03

【问题】
使用的官方SDK的tls_ble_server_demo_api_send_msg函数,去掉了限制只能发一次的部分。MTU提升到244后,本来打算发送8192字节数据,分成了34个包,发现始终只能发送12个包,排查发现,如下图所示,在这个位置发送12*244字节数据后会出现内存池申请失败的问题。原函数申请完后没有释放,使用os_memblock_put将其释放后会出现发送一次之后整个系统死机。请问该如何解决
q1.png

查看更多

关注者
0
被浏览
2.3k
1 个回答
136****7598
136****7598 2022-06-12
This guy hasn't written anything yet

方法ble_gattc_indicate_custom尾部 ble_gattc_process_status 释放了,或者说是修改了状态
image.png

我曾经碰到过的是wm_ble_uart_if.c 中RING_BUFFER_SIZE 太小,导致不能全部发送
image.png
wm_bt_util.c
image.png
你可以在wm_ble_server_api_demo.c中ble_server_indication_sent_cb,加上几句代码,验证是否存在环形buff缓冲区小了的问题。
image.png

个人认为能解决办法有几个:
1、适当增加环形buffer的长度(最简单,前提ram足够,数据包长度足够单一、固定)
2、自己分包发送,收到返回,再发送下一包。(一问一答,稳健,但速度慢)
3、实现demo 的 event并注册,发送成功后,写入下一包。(未验证)

看没人回复,我提供下自己的思路,希望对你有帮助

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览