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
被浏覽
1.5k
1 個回答
136****7598
136****7598 2022-06-12
這家夥很懶,什麼也沒寫!

方法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並注冊,發送成功後,寫入下一包。(未驗證)

看沒人回複,我提供下自己的思路,希望對你有幫助

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽