我的代码有一个问题,即我将 51 个字节传递给 ble 特征,然后调用一个函数通过已建立的 GATT 连接将其发送到我的手机,但是,它发送的数据远多于 51 个字节。
我有一个名为 ble_cus_send_csv 的函数,它接受几个参数。这些是我的自定义结构、我的数据、数据长度和处理程序。
我向其中发送了 51 个字符,我认为这是 51 个字节。我取 sizeof() 这个,它给出了 51。
然后我运行我的 ble_cus_send_csv 函数,它运行并输出我的 51 个字节的数据,之后的字节数要多得多。
我在下面附上了我的发送功能和我的输出。它应该只输出一个固定的 51 个字节。
我在 segger studio 内使用 Nordic NRF52840-dk 板。代码是用 C 编写的。
我的 ble_cus_send_csv 函数:
uint32_t ble_cus_send_csv(ble_cus_t * p_cus,
uint8_t * p_data,
uint16_t * p_length,
uint16_t conn_handle)
{
ble_gatts_hvx_params_t hvx_params;
NRF_LOG_INFO("Sending CSV.\r\n");
if (p_cus == NULL)
{
return NRF_ERROR_NULL;
}
uint32_t err_code = NRF_SUCCESS;
// Send value if connected and notifying.
if ((p_cus->conn_handle != BLE_CONN_HANDLE_INVALID)) //Setup the parameters to pass into the characteristic value
{
memset(&hvx_params, 0, sizeof(hvx_params));
hvx_params.handle = p_cus->custom_value_handles.value_handle;
hvx_params.p_data = p_data;
hvx_params.p_len = p_length;
hvx_params.type = BLE_GATT_HVX_NOTIFICATION;
err_code = sd_ble_gatts_hvx(conn_handle, &hvx_params);//Set the characteristic
NRF_LOG_INFO("sd_ble_gatts_hvx result: %x. \r\n", err_code);
}
else
{
err_code = NRF_ERROR_INVALID_STATE;
NRF_LOG_INFO("sd_ble_gatts_hvx result: NRF_ERROR_INVALID_STATE. \r\n");
}
return err_code;
}
调试器中的 P_length