nordic設備做主機發現服務失敗

現象: 設備做爲主設備,去連接從設備。每次都可以連接上,但是在發現服務的過程中出錯。

static uint32_t service_discover(client_t * p_client)
{
    uint32_t   err_code = NRF_SUCCESS;

    p_client->state = STATE_SERVICE_DISC;

    if(p_client->client_info.uuid.type == BLE_UUID_TYPE_VENDOR_BEGIN) {
        //每次在這裏都返回一個錯誤碼4
        err_code = sd_ble_uuid_vs_add(&p_client->client_info.service_base_uuid, &p_client->client_info.uuid.type);
        if(err_code != NRF_SUCCESS)
        {
            NRF_LOG_INFO("service_discover err 1:%x",err_code);
            return err_code;
        }
    } else {
        ...
    }
 
    ...
}

錯誤碼4的定義(nrf_error.h):

#define NRF_ERROR_NO_MEM                      (NRF_ERROR_BASE_NUM + 4)  ///< No Memory for operation

錯誤是說沒有足夠的內存給到用戶。

解決方案:

sdk_config.h

// <o> NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. 
#ifndef NRF_SDH_BLE_VS_UUID_COUNT
#define NRF_SDH_BLE_VS_UUID_COUNT 1
#endif

NRF_SDH_BLE_VS_UUID_COUNT的默認值爲0,該值表示可以添加多少個自定義服務的UUID到協議棧。如果爲0則表示協議棧不會給用戶的自定義的服務分配內存空間,所以爲0的時候會報NRF_ERROR_NO_MEM錯誤。將該值設置成合適的值(需要向協議棧添加多少個自定義服務UUID就把該值設置爲多少)。

發佈了12 篇原創文章 · 獲贊 5 · 訪問量 5686
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章