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.

[参考译文] CC2674P10:如何处理 BLE 堆栈中的挂起位?

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1431005/cc2674p10-how-to-handle-pending-bit-in-ble-stack

器件型号:CC2674P10
Thread 中讨论的其他器件:BLE-STACKSysConfig

工具与软件:

你好
我将根据多角色示例编写一个使用 BLE 的程序。 我有以下几项操作:
1.使用已知的 MAC 地址连接到设备
2.通过已知的 UUID 查找所需的服务,并订阅其中的通知。
3.发送确认数据至本服务中的另一个特征。

多次重复操作3。

问题在于、调用 GATT_WriteCharValue (或 GATT_WriteLongCharValue)函数时、通常返回0x16 (blePending:此服务器的响应处于挂起状态)。 我通过建立循环来检查检查检查结果并重复、直到成功执行、暂时解决了这个问题。 最多可能需要800次迭代。

问题是如何适当地处理这些事件,因为在我看来,循环似乎是一个无效的解决方案。 也许有必要以某种方式检查新发送的准备情况? 或者在连接之前保持某种暂停? 延迟参数可能会对此造成影响?

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

    我想可能的原因是、我要在收到从射频堆栈成功发送先前消息的确认(GATT msg)之前再次调用写入函数

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

    您好!

    感谢您联系我们。

    我猜可能的原因是我在收到成功从射频堆栈发送前一条消息的确认之前再次调用写入函数(gATT msg)

    我相信您是对的。 当 BLE-Stack 有太多事件或有效负载排队等待 处理时、会出现 blePending 返回代码。 有几种方法可以解决这个问题。

    1.增加最大 PDU 容量和大小(通过 SysConfig)、直到无法再出现 blePending。

    2.仅在前一个调用完成时调用 GATT_WRITE API (可通过发送到应用程序的完成事件进行验证)

    我建议使用选项2、因为这可以在不增加 ram /堆使用的情况下确保稳定性。 可以使用选项1、但可能会以增加 ram /堆消耗为代价。

    此致、

    1月

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

    你(们)好

    是否可以随时向堆栈请求状态以确定就绪性? 还是始终跟踪事件?

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

    您好!

    您可以在运行时监控堆/堆栈的使用情况、但我强烈建议改用跟踪事件的方法。 您可以使用全局标志或某种邮件发布/待处理系统。

    此致、

    1月