feat(vd960DBN): 快照区延后初始化(开机3s后) — 避开启动早期SPI重负载窗口 (2026-08-17)
诊断: 08-14恢复快照区后频繁重启。RSTSCKR无复位标志(非硬件复位) + BOOT_CNT恒=1(.noinit被清, RAM全丢级) + 实验A(跳过offlog_boot)仍崩 → 启动早期SPI重负载(offlog/snap init 擦+整扇区写回~80ms×2)让系统 进入临界状态, 后续SPI操作(load_cfg读参数区)成为压垮点。 方案: - snapshot.c/h: 新增 snap_delayed_init(), 主循环每轮调用, 开机3s后 首次进入执行 snap_init (非阻塞, mstick()>=3000 门控) - peripheral_main.c: main() 移除 snap_init 调用; 主循环喂狗后加 snap_delayed_init(); 撤销实验A(恢复offlog_boot)/实验B(恢复load_cfg) - 3s内传感帧由 snap_enqueue/snap_flush 的 !_ready 门控自动丢弃不落盘 - 保留 BOOT_CNT 诊断打印(.noinit 计数器+地址) - devlog 置顶 2026-08-17 条目
This commit is contained in:
@@ -210,6 +210,22 @@ void snap_init(void)
|
||||
_ready = 1;
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
* 延后初始化 (2026-08-17): 开机 SNAP_START_DELAY_MS 后首次进入时执行一次。
|
||||
* 目的: 避开启动早期 SPI 重负载窗口 (擦扇区 + 整扇区写回 ~80ms), 该窗口
|
||||
* 疑似触发 VDD 跌落/跑飞 (08-17 诊断: BOOT_CNT 恒=1, RSTSCKR 无标志)。
|
||||
* 附带: 3s 内的传感帧由 snap_enqueue/snap_flush 的 !_ready 门控自然丢弃,
|
||||
* 不落盘 (开机初期串口数据视为无效快照)。
|
||||
* 主循环每轮调用, 非阻塞 (未到延时/已初始化直接 return)。
|
||||
*===========================================================================*/
|
||||
#define SNAP_START_DELAY_MS 3000
|
||||
void snap_delayed_init(void)
|
||||
{
|
||||
if (_ready) return; /* 已初始化 */
|
||||
if (mstick() < SNAP_START_DELAY_MS) return; /* 未到延时窗口 */
|
||||
snap_init();
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
* 落盘 (主循环上下文)
|
||||
*===========================================================================*/
|
||||
|
||||
Reference in New Issue
Block a user