[问题]
使用的官方 SDK 的 tls_ble_server_demo_api_send_msg 函数, 去掉了限制只能发一次的部分. MTU 提升到 244 后, 本来打算发送 8192 字节数据, 分成了 34 个包, 发现始终只能发送 12 个包, 排查发现, 如下图所示, 在这个位置发送 12*244 字节数据后会出现内存池申请失败的问题. 原函数申请完后没有释放, 使用 os_memblock_put 将其释放后会出现发送一次之后整个系统死机. 请问该如何解决
方法 ble_gattc_indicate_custom 尾部 ble_gattc_process_status 释放了, 或者说是修改了状态
我曾经碰到过的是 wm_ble_uart_if. c 中 RING_BUFFER_SIZE 太小, 导致不能全部发送
wm_bt_util. c
你可以在wm_ble_server_api_demo. c中 ble_server_indication_sent_cb, 加上几句代码, 验证是否存在环形 buff 缓冲区小了的问题.
个人认为能解决办法有几个:
1, 适当增加环形 buffer 的长度 (最简单, 前提 ram 足够, 数据包长度足够单一, 固定)
2, 自己分包发送, 收到返回, 再发送下一包. (一问一答, 稳健, 但速度慢)
3, 实现 demo 的 event 并注册, 发送成功后, 写入下一包. (未验证)
看没人回复, 我提供下自己的思路, 希望对你有帮助
感谢大佬, 我尝试一下!