This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2640:GATT_BM_ALLOC()返回空值

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/610737/cc2640-gatt_bm_alloc-returns-null-value

器件型号:CC2640

您好!

我使用的是简单外设、希望在缓冲区中有一些数据时发送通知。 我按以下方式执行该操作。

连接主设备后、我启动计时器并触发事件、将通知发送给主设备。

但我无法从传感器获取任何通知、我发现 GATT_BM_ALoc 返回的值为空代码如下:

uint8_t minLength = MINdataLength - idx、length);
attHandleValueNoti_t 通知;
if (value & GATT_CLIENT_CFG_NOTIFY)
{
oti.len = minLength;
NOTI.pValue = GATT_BM_alloc (connHandle、ATT_Handle_Value_Noti、NOTI.len、NULL);
myNotiBuffer =通知(&N);
if (NOti.pValue!=空)
{
gattAttribute_t *pAttr;
pAttr= GATTServApp_FindAttr (serviceAttrTbl、
GATT_NUM_ATTRS (serviceAttrTbl)、
transCharVal (&T);
oti.handle = pAttr->句柄;
memcpy (oti.pValue、&stmDataBuffer[idx]、minLength);
if (GATT_Notification (connHandle、&Noti、false)!=成功)
{
GATT_BM_FREE (((gattMsg_t *)&Noti、ATT_Handle_Value_Noti);
}
}

NOTI.pValue 始终为空。

请帮我解释一下为什么它没有分配任何内存?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否从任务处理程序调用此函数、而不是直接从时钟处理程序(SWI)调用此函数? 此外、该任务需要按原样在 iCall 中注册简单外设应用任务。

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、HXS、
    我从任务处理程序而不是时钟处理程序调用它、该任务已在 ICALL 中注册。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果 ICall 堆已耗尽或无法分配请求的大小、则返回 Null。 尝试启用 heap_metrics 以查看您是否有足够的堆空间。

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、JXS、

    您能告诉我如何启用 heap_metrics 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 JXS。 ICall 堆已用尽。