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.

[参考译文] RTOS/CC2640:大规模通知导致器件崩溃

Guru**** 2587365 points
Other Parts Discussed in Thread: CC2640

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/598641/rtos-cc2640-device-crash-on-massive-notifications

器件型号:CC2640

工具/软件:TI-RTOS

HY、

过去也有过类似的问题,现在不幸的是,这是一系列的问题。 我们在现场大约有5000个器件、到目前为止、出现了5个以下情况:

基于 CC2640、电池供电、外围设备、连接的某些 I2C 设备、在不同情况下崩溃:它们要么重新启动、卡死(无广播、无反应)、要么处于状态、在这种状态下、它们仍在广播但不可连接。 我的猜测是、在从设备到扫描器的海量数据传输过程中会发生这种情况:我的设备收集通过通知传输到主设备的数据。 在我的测试方案中、我尝试通过发送205个通知来传输4KB 字节。 我始终在 for 循环中调用6次 GATT_Notification、而不是设置另一个信标来发送接下来的6个包。

当器件处于错误状态时、我在调试会话中观察到不同的现象:

1) 1)软件在 MB_PATCH.c 的 MB_SendCommand 中挂起

 //检查任何意外的邮箱错误
 mb_assert ((MB_CMDSA_REG 和0xFF)== CMDSA_DONE);
MB_CMSTA_REG 包含0x87

2) 2) osal_BM_FREE 中的无限循环

在 osal_bufmgr.c 的函数 osal_bm_free 中 、我在中看到一个无限循环  

while (loop_ptr!= NULL)

因为 loop_ptr 和 loop_ptr -> next _ptr;显示到同一地址。

有一个独特性:在 RTOS 对象视图(ROV)中、我看到"stackPeak "消息"溢出!"。 但实际上、即使在运行良好的系统中、我也始终会看到这一点。

是否有人可以为我提供一些提示、说明从何处开始跟踪此问题?

此致

Harald

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

    我观察到更多的现象:

    3) 3)器件刚刚复位

    4) 4)器件广播并运行正常、可以进行连接、但数据传输不起作用(读取/写入特性) e2e.ti.com/.../btoollog.txt

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

    从 TRM SWCU117无线电章节中、命令状态错误0x87等于带有说明的"ParError":

    "在解析的命令参数中存在错误
    提交。 对于无线电操作命令、参数错误
    命令启动后解析的命令由命令发出信号
    结束、该命令的状态字段中会指示错误
    结构。"

    我看到了类似的无线电错误、这些错误是由内存损坏引起的、通常在堆/系统 RAM 中。 这些无线电故障通常是早期存储器损坏的表现、而不是根本原因。 例如、写入堆中已释放的指针的应用程序可能会损坏随后馈入射频内核的 RAM。 在高吞吐量期间、您会看到这种情况以及一些奇怪的行为、这可能是一个线索、可以查看堆并查看您的内存使用是否存在任何损坏。 我们在运行吞吐量演示时未看到这一点、因此我不会看到它源自堆栈。

    祝你一切顺利