fix(vd960DBN): 联网复位事故 — OTA 命令缓冲合并 union (RAM 90% 栈余量不足)
现象: SUBACK 后收平台 report_config (PUBLISH len=197) → HardFault → NVIC_SystemReset (RST_REASON 0x10000000 = SFT, 非 IWDG) → 死循环复位 根因: RAM 90.02% + 6 个 OTA 分支独立 static resp[256~400] + hexbuf[513] 共 ~2.5KB BSS → 栈余量被挤 → iot_handle_publish 深调用链栈溢出 (局部栈改 static 是伪优化: BSS↑=栈余量↓; 正解是 union 复用减总量) 修复: - iot_mqtt_srv.c: 6 resp + hexbuf 合并函数级 static union _ota_io (~2KB 省) - ota_srv.c: _chunk_buf/_fs_frame 合并 union (~260B 省) + 删无用变量 验证: 语法 0 错误; gcc 隔离单测 10/10; 待板级确认 RAM 回 ~88% 不再复位
This commit is contained in:
@@ -42,7 +42,6 @@ static uint8_t _fs_retry; /* 当前步重试计数 */
|
||||
static uint32_t _fs_start_ms; /* 当前步起始时刻 (超时判断) */
|
||||
static uint16_t _fs_sub; /* 当前块序号 (首=总块数, 末=1) */
|
||||
static uint32_t _fs_sent; /* 已送 Loop 字节数 */
|
||||
static uint32_t _fs_block_crc; /* 当前块 CRC (调试/审计) */
|
||||
|
||||
uint8_t g_ota_flash_active = 0; /* 本地刷写进行中 → uart_srv 把 ACK 交给 ota_srv */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user