外圍角色,設(shè)置堆是9k,可連接數(shù)3,開始時藍(lán)牙連接發(fā)送數(shù)據(jù)都正常,但運行一段時間后,百分之一左右的設(shè)備就出現(xiàn)藍(lán)牙只能連接,找不到任何服務(wù)UUID了,專門針對一臺設(shè)備,進(jìn)行上百次的反復(fù)連接發(fā)送數(shù)據(jù)斷開也會出現(xiàn)只能連接發(fā)現(xiàn)不了任何服務(wù)。1)不知是不是堆溢出問題?還是別的原因?有沒有主動釋放所有堆占用的分配?看了例程,GATT_bm_alloc申請的空間,只有相應(yīng)功能不成功時才會釋放空間,那成功了如何釋放?2)有沒有辦法監(jiān)測到找不到服務(wù)異常?若能監(jiān)測到,重啟就行了。
如果是主機,查看回連的時候,枚舉服務(wù)的函數(shù)的返回值是否為成功,如果出現(xiàn)0x16的報錯可以重復(fù)枚舉。
如果是從機,用BLE調(diào)試助手跟該從機連接并查看枚舉的服務(wù)。
謝謝,以下是我抓的日志,一個是connect和另一個toolbox
你上面截圖的是芯片作為從機,跟手機主機建立連接的枚舉。
建議:
①抓包需要通過抓包工具獲取,即使用BLE分析儀。淘寶官方店可以購買。
②直接使用例程測試對比是否可以枚舉,然后排查你的代碼跟例程的區(qū)別。
芯片是作為從機模式,現(xiàn)在問題不是一開始就枚舉失敗,而是上百次的連接發(fā)送斷連才出現(xiàn)的(重現(xiàn)率基本100%),這里面明顯與次數(shù)相關(guān)的,原因應(yīng)是內(nèi)存空間的溢出,或UUID的初始化參數(shù)有誤(按理一上電就不行),或SDK有bug。我現(xiàn)在解決是從Connected到PHY更新事件之間加入了時間限制,超10秒就重啟。若按你說的工具抓包,發(fā)現(xiàn)問題點后,也要在SDK的API上實現(xiàn),我查看了所有涉及堆空間的API或參數(shù),沒有看到對堆空間有有效管理的API。至于例程,例程流程比較單一,很難出現(xiàn)類似問題。如果有對堆內(nèi)存有影響API或涉及UUID初始化可能引起類似問題的參數(shù),請?zhí)崾鞠?,謝謝!
暫未出現(xiàn)過類似的問題。
內(nèi)存的占用函數(shù):
(適用非固定庫OTA的代碼)啟用一個TMOS事件,每隔一段時間打印一下協(xié)議棧ram余量:
PRINT("memory_len = %d\n",tmos_memory_getlen());//tmos_memory_getlen()這個接口頭文件里沒有,調(diào)用前聲明一下
確認(rèn)一下是否出現(xiàn)手機無法枚舉的情況后,再次斷開連接也無法枚舉,還是偶現(xiàn)無法枚舉。
可以換一個BLE調(diào)試助手APP測試。
哦,好的,謝謝!1)我用這個觀察下,但非固定庫有點不是特別理解,我現(xiàn)在OTA包是不包括庫文件的,不知適不適用?2)無法枚舉后,斷開鏈接,也無法枚舉了,放置了兩天都沒有恢復(fù),只有重啟。
如果是用的固定庫方式,無法通過該函數(shù)獲取。
根據(jù)你的描述,出問題之后是一直出現(xiàn)問題,此時可以用其他手機連接該從機試試看。并且看起來是代碼層面的問題。通用的例程和其他開發(fā)產(chǎn)品并未出現(xiàn)過類似情況。
可以發(fā)送郵件至lpc@wch.cn,我們這里進(jìn)行查看問題。