【問題】
使用的官方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並注冊,發送成功後,寫入下一包。(未驗證)
看沒人回複,我提供下自己的思路,希望對你有幫助
感謝大佬,我嘗試一下!