fix(vd960DBN): 栈溢出止血 — load_cfg 去调试打印, output_cfg 暂关 (2026-08-17)

实验D确认 load_cfg/output_cfg 为跑飞触发点。根因: .bss≈46KB
(BLE栈+ETH DMA 7.6KB+SPI_FLASH_BUF 4KB+网络缓冲) 挤占 RAM,
栈仅 ~1.9KB (BOOT_CNT@0x2000f84c 证明 .noinit 被推到 RAM 顶)。
load_cfg 的 printf 栈峰值触顶 → 覆盖 .noinit+返回地址 → PC 跑飞循环。

修复:
- cfig_flash.c: load_cfg 内 3 处调试 PRINT 注释 (magic mismatch×2 + Sub_Code×1)
- peripheral_main.c: load_cfg 恢复(配置加载保留); output_cfg 调用 #if 0 (纯调试打印)
- devlog: 实验D结论 + 修复记录

根治待办: 减 .bss 给栈腾 4KB+ (需 .map 确认大数组);
output_cfg 恢复调试打印前需减栈压力
This commit is contained in:
wangfq
2026-08-17 11:06:56 +08:00
parent 452ff68bae
commit 26f2326c96
3 changed files with 41 additions and 15 deletions
@@ -245,7 +245,8 @@ void load_cfg_from_flash(void)
现场: SPI_Flash_Write(参数区 0x00, 512B) → RST=0x00000000 硬件复位
→ magic 写不进 → 无限复位循环。SPI 写触发硬件复位实锤(与快照区无关)。
临时方案: 不写 Flash, 用内存默认配置继续 (恢复原逻辑删本块即可) */
PRINT("CFG: magic mismatch - MEMORY DEFAULTS (factory SPI write disabled)\n");
/* 2026-08-17 栈溢出修复: 调试 PRINT 栈峰值触顶(1.9KB栈), #if 0 */
/* PRINT("CFG: magic mismatch - MEMORY DEFAULTS (factory SPI write disabled)\n"); */
memset(g_dev_number, 0, 6);
memcpy(g_dev_number, gMacAddr, 6);
sprintf(g_dev_number_str, "%02X%02X%02X%02X%02X%02X",
@@ -289,7 +290,8 @@ void load_cfg_from_flash(void)
g_sub_code_enable.dgdus_enable = 0;
g_sub_code_enable.wbdus_enable = 0;
g_sub_code_enable.radar_enable = 0;
PRINT("CFG: memory defaults OK (no factory write)\n");
/* 2026-08-17 栈溢出修复: #if 0 */
/* PRINT("CFG: memory defaults OK (no factory write)\n"); */
return;
}
@@ -360,7 +362,8 @@ void load_cfg_from_flash(void)
g_sub_code_enable.wbdus_enable = (g_sub_code_enable.code_set >> 5) & 0x01;
g_sub_code_enable.radar_enable = (g_sub_code_enable.code_set >> 6) & 0x01;
PRINT("\nSub_Code: 0x%04X, net_enable:%d, iot_enable:%d\n", g_sub_code_enable.code_set, g_sub_code_enable.net_enable, g_sub_code_enable.iot_enable);
/* 2026-08-17 栈溢出修复: #if 0 */
/* PRINT("\nSub_Code: 0x%04X, net_enable:%d, iot_enable:%d\n", g_sub_code_enable.code_set, g_sub_code_enable.net_enable, g_sub_code_enable.iot_enable); */
// g_sub_code_enable.laser_enable = (g_sub_code_enable.code_set >> 9) & 0x01;
// g_sub_code_enable.lora_enable = (g_sub_code_enable.code_set >> 15) & 0x01;