fix(vd960DBN): 栈溢出修复闭环 — 打印恢复 + 字符串0终止保险 (2026-08-17)

RAM 瘦身后栈 1.9KB→~4.75KB (END 0x2000f834→0x2000ed3c 实测), printf 峰值安全:
- cfig_flash.c: 恢复 load_cfg 3 处调试 PRINT (magic mismatch×2 + Sub_Code)
- cfig_flash.c: 字符串 0 终止保险 (remote_addr/client_id/username/password/topic_pub/sub
  末字节强制 '\0', 防 Flash 字符串不足定长时 %s 越界打印)
- peripheral_main.c: 恢复 output_cfg_from_flash() (调试配置打印)
- 注释更新为修复闭环说明

设备实测: 无复位, MQTT 连 159.75.137.141:1883, BLE 广播正常
This commit is contained in:
wangfq
2026-08-17 14:18:52 +08:00
parent 421334ec48
commit 89ba602e4f
2 changed files with 22 additions and 14 deletions
@@ -357,15 +357,13 @@ int main(void)
OFFLOG_RCC_RSTSCKR |= OFFLOG_RST_RMVF; /* RMVF (bit24): 清复位标志 */
}
/* ===== 栈溢出修复 (2026-08-17): 实验D确认 load_cfg/output_cfg 为触发点 =====
.bss≈46KB → 栈仅~1.9KB; load_cfg 的 printf 栈峰值触顶 → 跑飞。
修复: load_cfg 恢复(保留配置加载), 其内部调试 PRINT 已 #if 0 (cfig_flash.c);
output_cfg 全部为调试打印, 调用暂 #if 0 (栈峰值来源)。
根治: 减 .bss 给栈腾 4KB+ (待 .map 确认大数组) */
/* ===== 栈溢出修复闭环 (2026-08-17) =====
根因: .bss≈46KB → 栈仅~1.9KB; load_cfg/output_cfg 的 printf 栈峰值触顶
→ 覆盖 .noinit+返回地址 → PC 跑飞循环。
修复: ①实验D定位触发点 ②RAM 瘦身 (ETH 768/payload 800/MQTT buf 800,
栈 1.9KB→~4.75KB) ③load_cfg 字符串 0 终止保险 ④打印恢复。 */
load_cfg_from_flash();
#if 0
output_cfg_from_flash(); /* 调试打印专用, 栈峰值高, 恢复前需减栈压力 */
#endif
output_cfg_from_flash(); /* 2026-08-17: 栈瘦身后恢复 (栈~4.75KB, printf 峰值安全) */
#endif
PRINT("MAC: %02X %02X %02X %02X %02X %02X\r\n", gMacAddr[0],gMacAddr[1], gMacAddr[2], gMacAddr[3],gMacAddr[4],gMacAddr[5]);