乐鑫技术交流
直播中

李秀兰

8年用户 1541经验值
私信 关注
[问答]

使用mesh加手机ble与esp32通信时遇到一个死机问题怎么解决?

ble_hs_hci_cmd_send at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_hci_cmd.c:89 (discriminator 15)

ble_hs_hci_cmd_send_buf at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_hci_cmd.c:134

ble_hs_flow_tx_num_comp_pkts at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_flow.c:95

ble_hs_flow_event_cb at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_flow.c:116

ble_npl_event_run at D:/ESP-IDF/components/bt/host/nimble/nimble/porting/npl/freertos/include/nimble/nimble_npl_os.h:125
(inlined by) nimble_port_run at D:/ESP-IDF/components/bt/host/nimble/nimble/porting/nimble/src/nimble_port.c:78

mesh_host_task at d:cwqcodelightbuild/../components/ble_light/src/bt_init.c:160

vPortTaskWrapper at D:/ESP-IDF/components/freertos/port/xtensa/port.c:168

//---------------------------------------------------------------------------------------------------------------------------

ble_hs_hci_cmd_send at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_hci_cmd.c:113

ble_hs_hci_cmd_send_buf at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_hci_cmd.c:139

ble_hs_hci_cmd_tx at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_hs_hci.c:304

ble_gap_adv_set_data at D:/ESP-IDF/components/bt/host/nimble/nimble/nimble/host/src/ble_gap.c:2649

bt_le_adv_start at D:/ESP-IDF/components/bt/esp_ble_mesh/mesh_core/nimble_host/mesh_bearer_adapt.c:777

adv_send at D:/ESP-IDF/components/bt/esp_ble_mesh/mesh_core/adv.c:180
(inlined by) adv_thread at D:/ESP-IDF/components/bt/esp_ble_mesh/mesh_core/adv.c:318

vPortTaskWrapper at D:/ESP-IDF/components/freertos/port/xtensa/port.c:168

//---------------------------------------------------------------------------------------------------------------------------
请教一下大佬  我们使用mesh加手机ble与esp32通信时遇到一个死机问题  手机快速和设备通信的同时如果往mesh网络发送数据大概率会导致死机  经过分析后发现是  ble_hs_hci_cmd_send 函数重入了 (mesh_host_task ,adv_send)此函数调用 ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD) 申请内存  但是此内存池大小被初始化成了 1 导致第二次申请失败 从而引发死机
请教一下有没有大佬遇到过这种情况   需要怎么解决
                           

回帖(1)

李萍

2024-6-17 17:23:39
在使用Mesh网络和手机BLE与ESP32进行通信时,遇到死机问题可能是由多种原因引起的。以下是一些建议和解决方案,帮助您解决这个问题:

1. **检查硬件连接**:确保ESP32模块与手机之间的BLE连接正常。检查硬件连接是否稳定,包括天线、电源等。

2. **更新固件和软件**:确保您使用的ESP32固件和手机应用程序都是最新版本。有时候,固件或软件的旧版本可能会导致兼容性问题或已知的错误。

3. **降低通信速率**:如果数据传输速率过高,可能会导致ESP32无法处理所有数据,从而引发死机。尝试降低数据传输速率,看看是否能解决问题。

4. **优化代码**:检查您的代码,确保没有死循环、内存泄漏或其他可能导致系统崩溃的问题。优化代码逻辑,确保程序运行稳定。

5. **内存管理**:ESP32的内存有限,如果应用程序占用了大量内存,可能会导致系统崩溃。检查您的代码,确保没有内存泄漏,并合理分配内存资源。

6. **使用任务调度**:如果ESP32在处理多个任务时出现死机,可以尝试使用任务调度器来优化任务执行顺序,避免任务之间的竞争和冲突。

7. **调试和日志记录**:使用调试工具和日志记录功能,以便在出现问题时快速定位问题所在。这可以帮助您更好地了解系统在死机前的状态,从而找到解决问题的方法。

8. **查看错误代码**:您提供的错误信息中包含了一些函数调用和文件路径。检查这些函数的实现,看看是否有可能存在问题。同时,查看ESP-IDF的文档和社区,看看是否有其他人遇到过类似的问题,并找到解决方案。

9. **硬件故障**:如果以上方法都无法解决问题,可能是ESP32模块本身存在硬件故障。尝试更换一个新的ESP32模块,看看问题是否得到解决。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分