feat(main): 添加启动模块自检与汇总功能
- 新增 SystemBoot 类用于跟踪各模块初始化状态,提供位图标记与报告功能 - 在 main.cpp 中重构初始化流程,按顺序初始化各模块并记录状态 - 添加 system_boot.cpp 模块文件到构建配置 - CAN反馈任务增加冷启动延迟,避免与GD32初始化窗口冲突 refactor(ota): 优化OTA协调器线程安全机制 - 修改 lock()/unlock() 方法返回take结果,确保mutex正确释放 - 修复多任务并发时mutex死锁问题,避免vTaskPriorityDisinherit断言 - 统一finalize失败后的状态复位逻辑,确保协调器回到IDLE状态 - 优化忙状态超时检测与自愈机制 perf(boot): 优化冷启动时序与资源管理 - 简化README中冷启动优化说明,聚焦核心逻辑 - 优化BOD阈值设置为LVL5,改进电源稳定性 - 增加BLE OTA工作线程优先级,减少丢包情况 - 优化堆告警节流机制,在OTA期间降低告警频率 fix(relay): 改进GD32应用存活检测逻辑 - 调整GD32 APP存活验证时序,增加会话建立验证 - 修复HELLO建立session后未验证role的问题 - 优化FINISH后等待APP启动的静默时间与重试机制 - 统一GD32探测逻辑到OTA中继任务 refactor(server): 优化HTTP服务端内存与性能 - 使用静态缓冲区替代动态分配,减少堆碎片化风险 - 优化CAN批量发送期间暂停反馈任务的机制 - 调整BLE连接参数请求逻辑,提升传输性能 - 改进错误处理流程,避免堆紧张时的额外分配 bump(version): 更新固件版本至0.3.50 - 更新版本号从0.3.49到0.3.50 - 更新编译时间戳与Git哈希值
This commit is contained in:
+20
-16
@@ -238,13 +238,7 @@ static void ble_esp32_finish_and_reboot_task(void *pvParameters)
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// WiFi 共存策略:BLE OTA 传输期间的处理
|
||||
//
|
||||
// 不切换 WiFi 省电模式(保持 WIFI_PS_NONE),让 STA 全程可用,
|
||||
// 协调器照常以 403 拒绝并发 OTA。ESP32-C3 coex 默认调度已能保证 BLE OTA 可用。
|
||||
// (曾尝试切到 WIFI_PS_MAX_MODEM 让出空中时间,但 STA 监听间隔被拉到极大,
|
||||
// HTTP server 的 TCP 握手/数据包大量丢失或超时,前端 XHR 长时间无响应。)
|
||||
// 仍保留 setBleOtaActive() 暂停 RSSI 轮询(避免 get_ap_info 的射频活动干扰 BLE)。
|
||||
// BLE OTA 期间 WiFi 共存:保持 WIFI_PS_NONE;暂停 RSSI 轮询
|
||||
// ============================================================
|
||||
static bool s_wifi_ps_boosted = false;
|
||||
|
||||
@@ -365,24 +359,28 @@ static int ble_ota_request_conn_params(uint16_t conn_handle, bool windows_compat
|
||||
{
|
||||
struct ble_gap_upd_params params = {};
|
||||
if (windows_compatible) {
|
||||
/* 15–20 ms:多数 Windows 主机可接受 */
|
||||
params.itvl_min = 12;
|
||||
params.itvl_max = 16;
|
||||
params.min_ce_len = 0;
|
||||
params.max_ce_len = 0;
|
||||
} else {
|
||||
/* 7.5–15 ms:勿锁死 7.5,否则 Windows 常拒然后掉到更慢默认值 */
|
||||
params.itvl_min = 6;
|
||||
params.itvl_max = 6;
|
||||
params.itvl_max = 12;
|
||||
params.min_ce_len = 12;
|
||||
params.max_ce_len = 12;
|
||||
params.max_ce_len = 24;
|
||||
}
|
||||
params.latency = 0;
|
||||
params.supervision_timeout = 200;
|
||||
|
||||
int rc = ble_gap_update_params(conn_handle, ¶ms);
|
||||
DEBUG_INFO(TAG, "请求 BLE 连接参数(%s): interval=%.1f..%.1fms rc=%d",
|
||||
DEBUG_INFO(TAG, "请求 BLE 连接参数(%s): interval=%.1f..%.1fms ce=%u..%u rc=%d",
|
||||
windows_compatible ? "Windows兼容" : "高速",
|
||||
params.itvl_min * 1.25f,
|
||||
params.itvl_max * 1.25f,
|
||||
(unsigned)params.min_ce_len,
|
||||
(unsigned)params.max_ce_len,
|
||||
rc);
|
||||
return rc;
|
||||
}
|
||||
@@ -646,6 +644,11 @@ static esp_err_t ble_esp32_ota_begin(size_t total_size)
|
||||
esp32_reorder_alloc();
|
||||
// ★ BLE OTA 开始:降低 WiFi 射频占用
|
||||
ble_ota_boost_wifi_ps();
|
||||
/* 刷写前再要一次高速连接参数(连接时若未谈妥,此处补刀) */
|
||||
if (BleOta::instance().m_bleConnected &&
|
||||
BleOta::instance().m_connHandle != 0xFFFFU) {
|
||||
(void)ble_ota_request_conn_params(BleOta::instance().m_connHandle, false);
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
@@ -1317,6 +1320,10 @@ static bool process_gd32_packet(uint8_t cmd, uint16_t seq, uint32_t total_size,
|
||||
s_ble_gd32_meta.total_size = total_size;
|
||||
s_ble_gd32_meta_active = true;
|
||||
ble_ota_boost_wifi_ps();
|
||||
if (BleOta::instance().m_bleConnected &&
|
||||
BleOta::instance().m_connHandle != 0xFFFFU) {
|
||||
(void)ble_ota_request_conn_params(BleOta::instance().m_connHandle, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2017,11 +2024,8 @@ esp_err_t BleOta::serverStart()
|
||||
esp_err_t BleOta::suspendStack()
|
||||
{
|
||||
/*
|
||||
* ★ 软挂起 only(ESP32-C3 WiFi/BLE 共用射频)。
|
||||
* 禁止在此调用 nimble_port_stop / deinit / controller_disable:
|
||||
* - 会从 httpd 任务阻塞甚至打挂 WiFi,表现为「一点击上传就失联」;
|
||||
* - C3 上 deinit BT 控制器与 WiFi 共存状态机冲突。
|
||||
* 软挂起:停广播、断连、拒收新数据,NimBLE host 仍跑、WiFi 不受影响。
|
||||
* ESP32-C3 WiFi/BLE 共用射频:此处仅软挂起(停广播、断连、拒收新数据),
|
||||
* 不调用 nimble_port_stop / deinit / controller_disable。
|
||||
*/
|
||||
if (m_suspendedForWifiOta) {
|
||||
DEBUG_DBG(TAG, "suspendStack: 已挂起,跳过");
|
||||
@@ -2146,7 +2150,7 @@ void BleOta::taskEntry(void *pvParameters)
|
||||
"ble_ota_worker",
|
||||
TASK_STACK_BLE_WORKER, // 实测 peak~1.1KB,负载峰值曾~1.9KB
|
||||
NULL,
|
||||
10, // 中等优先级,避免被 NimBLE host task 过度抢占
|
||||
12, // 略提高:尽快排空队列,减少 withoutResponse 连发丢包
|
||||
NULL);
|
||||
if (wk_ok != pdPASS) {
|
||||
DEBUG_ERR(TAG, "OTA 数据工作线程创建失败,BLE OTA 数据传输不可用");
|
||||
|
||||
Reference in New Issue
Block a user