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.

[参考译文] CC2640R2L:BLE 应用程序在 CC2640R2F 上崩溃

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1066130/cc2640r2l-ble-application-getting-crashed-on-cc2640r2f

部件号:CC2640R2L

你(们)好

我目前正在使用简单外设和观察器作为 SDK 版本4_20_00_04中的基础项目来处理 CC2640R2L。

我的所有应用程序都可以正常工作,但有一条观察结果与我的连接模式有关。

在我的 GATT 配置文件中,我已将我的特征配置为一次最多支持20字节的数据传输。

但在与我的移动应用程序的连接模式下,如果传输的数据大小超过20字节,我的应用程序将崩溃,我的看门狗重置将从此恢复。

因此,对接收到的数据长度进行额外检查可以保存我的应用程序。

我的查询是,在广告模式下,我是否可以期待同样的行为,即如果任何广告数据包超过 BLE 应用程序支持的数据包?

此外,当数据在连接模式下超过20字节时,哪些因素会导致我的应用程序崩溃?

此致

苏德本州

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

    您好,Sudhanbushu,

    对您的代码库了解如此有限,因此总是难以评论。 在这里,我猜问题是由一些数据损坏引起的。 假设分配了20字节的数据缓冲区,写入更多数据必然会导致相邻内存区域损坏。 如您所述,最佳做法是每次在尝试写入缓冲区之前仔细检查数据大小。

    广告模式应该有类似的行为和类似的解决方案。 此外,如果数据长度大于缓冲区,则必须预测数据损坏(以及可能的系统崩溃)。

    我希望这将有所帮助,

    此致,

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

    克莱门特,你好

    感谢您的澄清。

    我还怀疑,在扫描模式下,我的 BLE 应用程序收到的广告数据包是否有可能超过31字节。

    此致

    苏德本州  

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

    您好,Sudhanbushu,

    实际上,你不知道所有广告者在那里的时间长度。 因此,广告数据长度可能超过31字节。 尽管如此,扫描报告由堆栈动态分配。 因此,我们迄今为止讨论的问题不应影响扫描。

    此致,

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

    克莱门特,你好

    我同意你的观点。  在 Gap_device_info_event 下,我 收到 的设备信息会告知收到的数据包。

    因此,仅仅因为我使用的是 BLE 4.2,所以没有对收到的数据的长度进行额外的检查。

    BLE 4.2能否接收超过31字节的广告数据包?

    我怀疑我的目标缓冲区是31字节,因此 每当我扫描完数据包并接收 到 Gap_device_info_event 后,我都会将收到的数据复制到该缓冲区。 因此,如果收到的数据超过31字节,我的应用程序很可能崩溃。

    此致

    苏德本州

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

    您好,

    我没有让你看到应用程序所拥有的缓冲区。 我的答案与以前类似。 每次执行数据复制时,都应检查数据长度,否则,可能会迟早发生意外情况。

    此致,