燒入ble_app_uart例程的nrf52840開發板通過藍牙與手機APP交互,當Notification has been enabled時啓動timer同時發送數據,獲取發送成功的數據大小和時間,最後得到速率。
在ble_app_uart程序中創建一個timer,當 Notification has been enabled時開始timer同時發送數據;
利用全局變量m_cnt_5ms獲得調用timer的次數得到時間:m_cnt_5ms30(ms),利用函數ble_send持續發送數據data_array,當返回值是NRF_SUCCESS時,記錄發送的bytes:m_len_sent=m_len_sent+lenght(bytes);得到rate=m_len_sent10/(m_cnt_5ms*30/100(B/s)。
在主循環中調用發送函數ble_send()。
(1). 使用rate=m_len_sent1000/(m_cnt_5ms30)(B/s)時會出現發送的數據太大時,rate會變爲0,這是因爲當m_len_sent1000太大時,會超過uint32_t型的最大值,使得式m_len_sent1000變爲0;所以改成式rate=m_len_sent10/(m_cnt_5ms30/100)(B/s)可以測足夠大的數據。
(2). 當我使用下圖的方式計算數據時,rate會很大,這是因爲計算速率時會把丟的包也計算進去;
可以加上如下if語句,只有ble_nus_data_send返回正確時,才認爲數據包正確發送,然後才能算入m_len_set中:
這樣也不會發生丟包的情況。
下行速率(即手機接收開發板數據的速率):
在Minimum acceptable connection interval 8、 Maximum acceptable connection interval 12、
NRF_SDH_BLE_GATT_MAX_MTU_SIZE 247的配置下測出下行速率(即手機接收開發板數據的速率)爲:8KB/S左右
這是我的程序流程圖: