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.

[参考译文] CC2340R5:当 CC2340作为中央端进行连接并接收广播数据时、如果连接中断、堆将变得越来越小。

Guru**** 2328790 points
Other Parts Discussed in Thread: CC2340R5, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1487579/cc2340r5-when-cc2340-is-connected-as-the-central-end-and-receiving-broadcast-data-the-heap-will-become-smaller-and-smaller-if-the-connection-is-interrupted

器件型号:CC2340R5
主题中讨论的其他器件: SysConfig

工具与软件:

SDK 版本:8.40.00.64

CCS 版本:12.7.0.00007.  

项目:basic_ble_LP_EM_CC2340R5_freertos_ticlang

我的过程是

连接->搜索 FFF1和 FFF2的句柄->启用 FFF2通知->启用 FFF1通知->命令->接收通知数据->强制断开-> 重新连接、重新连接 后、此周期再次开始

在重复这些步骤几次之后、我发现当断开连接时、从 ROV 看到的堆比开始时少。

我尝试在 app_data.c 中将 GATT_BM_FREE (&G gattMsg->msg、gattMsg->method)分别添加到 bleapp_data.c 中的 GATT_eventandler 和 bLEAppUtil_convertGATEvents 中。
但仍会存在堆较少的问题。

我使用 GATT_WriteCharValue()启动 FFF1和 FFF2并发送 Command、然后使用 GATT_DiscAllCharDescs()搜索 FFF1和 FFF2的句柄值

之前:

之后:

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

    您好!

    感谢您联系我们。 您能否分享一下您是否以任何方式修改了示例、如果是这样、您能否分享修改?

    此致、

    1月

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

    下面是我创建 pthread 之后的过程


    确认连接后、调用 GATT_DiscAllCharDescs 以搜索句柄值。 找到该函数后、将该步骤切换到 enableFFF2Notify

    写入该命令后、外围器件将每50ms 通知一次数据。

    如果在10秒内未建立连接或通知接收时间过长、该步骤将切换回连接



    我还尝试了将 GATT_BM_FREE (&pMsgData->msg、pMsgData->method)添加到 GATT_eventhandler 和 BLEAppUtil_convertGATTEvents 中;仍然会发生相同的事情。

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

    您好、Jan:

    是否有进展? 我认为这与下面文章中提到的关于堆减少的问题类似、
    CC2340R5:CC2340卡在 iCall_abort - Bluetooth 论坛- BluetoothRegistered︎ ñ ol - TI E2E 支持论坛

    但我在 GATT_eventhandler 和 BLEAppUtil_processGATTvents 的末尾添加了 GATT_BM_FREE (&pMsgData->msg、pMsgData->method)、但问题仍然存在

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

    Ryan、您好!

    对于延迟、我们深表歉意。 我今天将向您通报最新情况。

    BR、

    David。

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

    好的、 等待您的新闻

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

    Ryan、您好!

    我认为、您可能实际上不会释放为通知分配的空间、因为 BLE 调用函数的状态通常可能是成功的、我认为这不是您为了释放或不释放通知而尝试监视的状态。 我建议了解 GATT 操作本身的状态、请看一下以下内容。

    status = GATT_Notification( connHandle, &noti, authenticated );
    if ( status != SUCCESS )
    {
        GATT_bm_free( (gattMsg_t *)&noti, ATT_HANDLE_VALUE_NOTI );
    }

    BR、

    David。

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

    尊敬的 David:

    但我是中心端,我没有任何有效的通知流程. 我也没有使用 GATT_Notification。

    或者您是在 app_data.c 中的 GATT_eventhandler 吗?

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

    Ryan、您好!

    抱歉、我是说 GATT_Write、这是您正在调用的回调函数内执行的操作吗?

    BR、

    David。

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

    今天、我进行了测试、发现当 GATT_WriteCharValue 断开连接时、某些存储器似乎未释放。

    因为当我只是连接并调用 GATT_DiscAllCharDescs (),并在这段时间内强制断开连接时,内存不会逐渐减小。

    但我仍然无法找到应该释放的空间。

    这是我在调用回调函数中执行的操作。 正如我在上面的注释中所提供的、当 status!= Success 时、我调用 GATT_BM_FREE (((gattMsg_t *)&tEnableNoti_FFF1、ATT_WRITE_REQ);

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

    Ryan、您好!

    您是否看到正在执行 GATT_BM_FREE? 我认为调用函数的状态返回不是 GATT 操作的结果。 您是否可以尝试在回调时释放内存或使用 BLEAppUtil_invokeFunction()来传递数据(此函数应释放 pData -参见 bleapputil_init.c 内部)。

    BR、

    David。

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

    尊敬的 David:

    似乎我找到了解决方案。 如您所述、调用不会返回真实的 GATT 状态、因此我在回调中以及在 GATT 返回失败时记录调用下面添加了一个变量。 计数增加1。 从变量监控可以看出、回调中的变量正确记录了 GATT 故障次数、但调用下方的变量保持为0。

    因此、当我在回调中放置 GATT_BM_FREE 时、由于一些干扰或强制断开连接而断开连接时堆不会减少。

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

    Ryan、您好!

    很高兴看到您喜欢解决方案。 那么、它是否正常工作?

    BR、

    David。

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

    尊敬的 David:

    首先、感谢您的解释。
    堆由于连接而变得更小的问题已经解决,但现在我遇到了进入 exception_handlerSpin 的问题,这似乎是扫描引起的。 我附上了扫描参数。 有什么解决方法吗?

     

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

    Ryan、您好!

    请确保扫描持续时间大于扫描间隔。

    BR、

    David。

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

    噢! 我没有注意到,对不起! 我将在测试中对其进行了解、谢谢!

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

    尊敬的 David:

    我将持续时间设置为80ms、将间隔设置为40ms、将窗口设置为20ms、并仍将进入 exception_handlerSpin

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

    Ryan、您好!

    您是否知道代码发生故障的原因? 当设备开始扫描时是这样吗? 我只是想检查一下我们是否在寻找正确的位置。

    BR、

    David。

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

    尊敬的 David:
    崩溃似乎是由执行 BLEAppUtil_scanStart 引起的。 如附图所示、我设置了一个变量来确认最后一次执行的位置。

    值得一提的是、在 tttt = 1之前、我还执行了一次 UART_WRITE

    我使用的是 SDK 版本8.10.01.02、这种情况似乎不会发生

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

    Ryan、您好!

    何时调用 BLEAppUtil_scanStart 函数? 如果您从非 BLE (例如驱动程序中断)的不同上下文调用它、请确保您使用 BLEAppUtil_invokeFunction()。 您致电 IT 部门的屏幕截图可能会有所帮助。

    BR、

    David。

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

    我已确保在其他非 BLE 上下文以及 BLEAPPUTIL_SCAN_DISABLED 中正确调用了 BLEAppUtil_invokeFunctionNoData

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

    Ryan、您好!

    请分享有关回调函数的更多信息。

    您能否尝试使用 SysConfig 的默认扫描参数?

    BR、

    David。