尊敬的技術(shù)人員,您好,目前在開發(fā)過程中尚存在幾個(gè)小問題,煩請(qǐng)解答,謝謝。
目前連接的步驟為:掃描 - 建立連接 - 申請(qǐng)2M PHY - PHY申請(qǐng)回調(diào)中 - 請(qǐng)求最大MTU - MTU回調(diào)中發(fā)現(xiàn)服務(wù) - 發(fā)現(xiàn)服務(wù)回調(diào)中發(fā)現(xiàn)特征,訂閱其中一個(gè)notify特征,然后處理另一個(gè)可讀寫特征數(shù)據(jù)。共有兩個(gè)特征,一個(gè)長(zhǎng)度180字節(jié)可讀寫特征,一個(gè)2字節(jié)notify特征。MTU目前設(shè)置為247。
發(fā)送大量數(shù)據(jù)時(shí):寫入特征值(共180字節(jié)的結(jié)構(gòu)體序列化數(shù)據(jù)) - 設(shè)備端的寫入回調(diào)被調(diào)用 - 處理數(shù)據(jù) - 使用另一個(gè)notify特征通知手機(jī)。
現(xiàn)在存在的問題是:
?1.?我現(xiàn)在使用CH582M與安卓手機(jī)建立連接,發(fā)送大量數(shù)據(jù),在快速發(fā)送數(shù)據(jù)過程中手機(jī)會(huì)與設(shè)備斷開連接,設(shè)備顯示reason 13,為手機(jī)主動(dòng)斷開連接,上網(wǎng)搜尋后得知,建立連接后要先請(qǐng)求高優(yōu)先級(jí),但是實(shí)際測(cè)試中發(fā)現(xiàn)設(shè)置優(yōu)先級(jí)對(duì)這個(gè)情況沒有明顯改善 ( 讀寫操作的相關(guān)等待延遲已妥善設(shè)置 )。
2 在設(shè)備端特征被寫入的回調(diào)函數(shù)中,uint8_t* pValue 【有時(shí)候】無法直接使用結(jié)構(gòu)體指針反序列化,反序列化指針使用const進(jìn)行約束,在反序列化之前也會(huì)對(duì)實(shí)際的數(shù)據(jù)長(zhǎng)度 len 進(jìn)行檢查。 反序列化無法使用的表現(xiàn)為主循環(huán)停止執(zhí)行了,因?yàn)橐话阍跀嚅_連接后串口會(huì)打印出掃描信息,連接成功會(huì)也會(huì)打印read rssi信息。而在這種情況下,串口沒有任何數(shù)據(jù)輸出,此時(shí)使用調(diào)試器也無法正確連接。已確認(rèn)此處理代碼過程中不含有無限循環(huán)等阻止CPU執(zhí)行的情況,也沒有出現(xiàn)內(nèi)存越界的情況。( 目前只能 tmos_memcpy到另一個(gè)緩沖區(qū)中處理 )
3. 設(shè)備notify特征值的時(shí)候,調(diào)用的一個(gè)庫(kù)函數(shù)似乎使用了動(dòng)態(tài)內(nèi)存分配,因?yàn)槭穷A(yù)編譯的靜態(tài)庫(kù),所以不容易做出修改,可否有辦法改為靜態(tài)全局緩沖區(qū)分配?我嘗試過改為靜態(tài)分配,但是無法成功notify。
4. 在使用BLE的時(shí)候,編譯出來的固件體積較大,已開啟 -Os 優(yōu)化、移除未使用的輸入段、鏈接時(shí)全局優(yōu)化等選項(xiàng),但體積仍然較大,不知道是否能夠提供靜態(tài)庫(kù)的源代碼以供精簡(jiǎn)冗余信息?(無法提供源代碼的話請(qǐng)忽略此條) 因?yàn)樵谠S多官方C代碼中在處理不同情況的時(shí)候會(huì)使用很多條件與循環(huán),這部分代碼對(duì)于定制化的功能來說是冗余的。
5. 因MRS的代碼索引等功能較為不完善,所以目前我們使用vscode + eide插件進(jìn)行開發(fā),編譯器等組件直接使用MRS下的toolchain目錄,但是目前使用WCH-LINKE進(jìn)行調(diào)試的時(shí)候仍需使用MRS,因?yàn)樵趘scode中使用cortex-debug插件無法進(jìn)行調(diào)試,但是能在網(wǎng)絡(luò)上搜索到文章,可以對(duì)CH32V20X進(jìn)行調(diào)試,我按照相同的步驟選擇各個(gè)參數(shù)后,無法與目標(biāo)設(shè)備建立連接。因?yàn)樾掳娴牡腸ortex-debug插件要求GCC 9以上,所以目前使用0.43版本,不知道是否有相關(guān)配置文件提供?
6. 這里借用了官方的OTA升級(jí)工具對(duì)比吞吐量,發(fā)現(xiàn)官方的OTA升級(jí)工具吞吐量比目前我們的測(cè)試程序高出許多,但是在研究了官方提供的Android Studio工程源代碼之后發(fā)現(xiàn)與我們使用的方式是一樣的,我們目前的工程代碼(設(shè)備端)是從?Peripheral 例程修改而來的,請(qǐng)參考我上面提到的步驟,幫助分析一下是否有哪些地方存在問題?而且官方的OTA代碼在接收到數(shù)據(jù)時(shí)還對(duì) flash 進(jìn)行了編程,根據(jù)官方手冊(cè)的參數(shù),編程flash速度要慢得多,我們的處理代碼僅進(jìn)行了耗時(shí)很短的操作,且在執(zhí)行此測(cè)試時(shí),我們關(guān)閉了用戶自定義的中斷,僅保留必要的中斷。
以上是信息描述,非常感謝。