乐鑫技术交流
直播中

李娜

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

使用ESP32-WROVER-E模块,A2DP/BLE coex情况下连接BLE的时候会造成系统重启怎么解决?

我有一个项目使用ESP32-WROVER-E 模块,需要实现BLE/A2DP 共存工作。功能要求是:
1.连接BLE后使用手机的MAC地址(保存在FLASH中)去连接A2DP。
2.关闭BLE后同时也断开A2DP连接。
我遇到的问题是:
      使用esp_a2d_sink_disconnect 函数断开A2DP后,再尝试连接BLE,重复功能1的操作。发现会一定概率(没有规律)的出现系统重启的现象。log提示的错误是 Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.然而紧接的Backtrace 却不是我能修改的内容,如下所示:
0x401391de: r_ea_interval_duration_req at ??:?

0x4013fcaa: hci_le_rem_con_param_req_reply_cmd_handler at llc_hci.c:?

0x40085ffc: ke_task_schedule at ke_task.c:?

0x40137ae7: r_rw_schedule at ??:?

0x40138168: btdm_controller_task at ??:?
我搜索所有的ADF都没办法定位到这几个函数,应该是蓝牙协议栈lib里面的函数。
紧接着我用排除法去分析问题,做了几次尝试后发现:其他代码都不动的条件下只要不使用esp_a2d_sink_disconnect 函数断开连接就基本不会有这个问题。
麻烦各位有过类似经历,或者ADF的大神帮忙分析一下。附件是发生重启的日志。基本都是在BLE建立连接的时候发生的重启。

回帖(1)

孙成红

2024-6-28 16:56:34
以下是一些建议和解决方案,希望对您有所帮助:

1. **检查资源分配**:确保在BLE和A2DP共存时,系统资源(如内存、堆栈等)分配得当。如果资源不足,可能会导致系统崩溃。您可以尝试优化代码,减少资源消耗。

2. **优化中断处理**:在BLE和A2DP共存的情况下,中断处理可能会变得复杂。确保中断处理函数尽可能简洁,避免在中断处理中执行耗时的操作。同时,检查是否存在中断优先级设置不当的问题。

3. **使用任务调度**:在ESP32中,可以使用FreeRTOS的任务调度功能来管理BLE和A2DP的任务。确保在任务切换时,资源得到正确释放和分配,避免资源竞争。

4. **检查代码逻辑**:仔细检查您的代码逻辑,确保在BLE和A2DP连接、断开过程中,所有的状态转换都是正确的。例如,确保在断开A2DP连接之前,已经正确地关闭了BLE连接。

5. **使用ESP-IDF的调试工具**:ESP-IDF提供了一些调试工具,如esp_app_trace、esp_core_dump等,可以帮助您定位问题。尝试使用这些工具来分析系统崩溃的原因。

6. **更新ESP-IDF版本**:如果您使用的ESP-IDF版本较旧,可能会存在一些已知的bug。尝试更新到最新版本的ESP-IDF,看看问题是否得到解决。

7. **查看错误日志**:根据您提供的错误日志,"Guru Meditation Error: Core 1 panicked (LoadProhibited)" 表示发生了一个未处理的异常。这可能是由于代码中的某个错误导致的。尝试在Backtrace中找到与您的代码相关的部分,以便更好地定位问题。


举报

更多回帖

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