Rdzleo
f5a2777abf
feat(rtc+ble): A+B+C 三件套 RTC 偶发连接失败修复 + BLE 配网 reboot 修复 (移植自 Baji)
============ 问题与修复 ============
### 问题 1: 配网模式按 BOOT 进入配网 → 设备 reboot
日志:
E BT_OSI: future_new unable to allocate memory for the semaphore.
assert failed: future_ready future.c:64 (future != NULL)
根因:
BLE Bluedroid 协议栈初始化时, future_new 分配 semaphore 失败 → 后续 future_ready
拿到 NULL → assert. 跟 Baji 的 vQueueDelete(NULL) 同性质 — DRAM 不足.
Kapi 用 LVGL (~50-80 KB DRAM) + RTC SDK 静态 .bss (~30-50 KB),
BLE Bluedroid stack 抢不到所需内存.
修复 (sdkconfig):
CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y
让 BLE Bluedroid 全局变量动态分配优先走 PSRAM, 释放 ~30 KB DRAM
给 controller / GATT / WiFi 使用. 修复后 BLE 配网正常.
### A+B+C 三件套 (移植自 Baji commit 70f0cdd, 解决 RTC 偶发连接失败)
[A] sdkconfig: CONFIG_LWIP_MAX_SOCKETS=10 → 20
根治火山 RTC SDK 启动时 lwIP socket fd 不足触发 SocketConnection-Lite.c:191
bind local ip failed → ICE 协商失败 → wait connect bits=0x0 超时.
[B] application.h/cc + volc_rtc_protocol.h/cc: 失败 3 次后销毁 + 重建 engine
新增 VolcRtcProtocol::ForceRebuildEngine() public 方法.
application.cc 加 audio_channel_retry_count_ 重试计数,
OpenAudioChannel 连续失败 3 次时调用 ForceRebuildEngine 清理 SDK 状态.
应对 A 修复后仍可能出现的 SDK 内部状态污染 (ICE Agent 异常等).
[C] volc_rtc_protocol.cc: DIAG_RTC_BIND_ENABLE 一键开关诊断埋点
在 join_room 前/后 + ForceRebuildEngine 前/后打印 lwIP socket fd / heap /
psram / WiFi rssi / errno, 偶发失败时直接定位根因.
验证完成后改 0 关闭, 编译器消除 #if 块, 零运行时开销.
============ 文件改动 ============
sdkconfig:
+CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y (BLE 配网修复)
+CONFIG_LWIP_MAX_SOCKETS=10 → 20 (方案 A)
main/application.h:
+int audio_channel_retry_count_ = 0; (RTC 重试计数)
main/application.cc:
OpenAudioChannel 失败处加重试计数 + 连续失败 3 次调 ForceRebuildEngine,
static_cast<VolcRtcProtocol*>(protocol_.get()) (ESP-IDF 默认 -fno-rtti).
main/protocols/volc_rtc_protocol.h:
+void ForceRebuildEngine() 声明.
main/protocols/volc_rtc_protocol.cc:
+DIAG_RTC_BIND_ENABLE 开关 + diag_count_used_sockets() 工具函数,
+OpenAudioChannel Pre-Join / Post-Fail DIAG 埋点,
+ForceRebuildEngine() 实现 (volc_rtc_stop + volc_rtc_destroy + 等 2 秒 + 触发重建).
============ 关联资源 ============
Baji commit 70f0cdd: feat(rtc): 偶发连接失败完整修复 (A+B+C 三件套)
Baji commit bffd316: feat(provisioning): BLE 配网完整修复
全局 CLAUDE.md "BLE 配网 DRAM 紧张完整排查流程" 章节
项目记忆 project_ble_provisioning_issues.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 15:15:34 +08:00
..
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-02-10 14:32:55 +08:00
2026-01-20 16:55:17 +08:00
2026-05-15 17:43:29 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-05-21 15:15:34 +08:00
2026-05-21 15:15:34 +08:00
2026-05-21 15:15:34 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-02-10 15:00:57 +08:00
2026-02-10 15:00:57 +08:00
2026-02-10 14:32:55 +08:00
2026-01-20 16:55:17 +08:00
2026-02-10 16:16:28 +08:00
2026-01-20 16:55:17 +08:00
2026-02-10 18:28:35 +08:00
2026-02-10 16:16:28 +08:00
2026-01-20 16:55:17 +08:00
2026-05-19 15:30:20 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-03-05 15:43:11 +08:00
2026-02-12 14:38:31 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-02-12 14:38:31 +08:00
2026-02-12 14:38:31 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00
2026-01-20 16:55:17 +08:00