实机测试规划改造为执行判据说明:删除一次性台架窗口状态(§0.5取证记录)与规划框架,A1~A4代码状态按代码核对改写,16处外部引用重指向模块文档

This commit is contained in:
2026-10-02 23:46:27 +08:00
parent 554b2e88da
commit 3cc08f5d53
13 changed files with 142 additions and 521 deletions
+6 -5
View File
@@ -11,7 +11,7 @@
* v1.1 2026-10-02 王建锋 round 7 纯取证埋点:近 8 次抽样位图环 + 最大喂狗
* 间隔统计 + 停喂现场落 /log/wdev.log(掉电不丢);
* 全部在 TASK_WATCHDOG_UNIT_TEST 守卫内,判定状态机
* 与主机侧单测逐字不变(见 实机测试规划.md §0.5.4)
* 与主机侧单测逐字不变(见 docs/子系统设计/看门狗设计说明.md 2026-10-02 变更记录)
* v1.2 2026-10-02 王建锋 round 8 取证:复位不丢的"进段打点"(.noinit 槽 +
* PREVRUN 开机上报 + STALL 行附 seg)——round 7 结论为
* "poller 自身停摆",需定位 defaultTask 主循环阻塞点
@@ -19,7 +19,7 @@
* (TIM7 ISR 每 1ms 写 uwTick/FreeRTOS tick/计数)+
* TICKRUN 开机上报(含相对进段时刻的增量 duw/dfr)——
* round 8a 定位到 console 通道后,需钉死是 TIM7(HAL tick)
* 还是 SysTick(FreeRTOS tick) 停摆(实机测试规划.md §0.5.4.3)
* 还是 SysTick(FreeRTOS tick) 停摆(见 docs/子系统设计/看门狗设计说明.md 2026-10-02 变更记录)
*
* v1.4 2026-10-02 王建锋 **P0 修复**:wd_platform_start() 补写 IWDG 的
* PR/RLR(= WD_IWDG_PRESCALER / WD_IWDG_RELOAD,即设计值
@@ -108,7 +108,7 @@ static uint32_t s_started; /* 1 = IWDG 已启动 */
static uint32_t s_last_tick; /* 上次抽样时刻(100ms 节流基准) */
/* ==== round 7 纯取证状态(仅 MCU 构建;判定状态机逐字不变)====
* 设计见 docs/测试说明/实机测试规划.md §0.5.4:误复位后 RAM 态随复位消失,
* 设计背景见 docs/子系统设计/看门狗设计说明.md 2026-10-02 变更记录:误复位后 RAM 态随复位消失,
* 故把"停喂现场"快照落盘(/log/wdev.log)供复位后回读定性。 */
#ifndef TASK_WATCHDOG_UNIT_TEST
#define WD_SNAP_HIST_DEPTH 8u
@@ -265,8 +265,9 @@ static void wd_stall_evidence(uint32_t snapshot) {
}
/* ==================== round 8 取证:复位不丢的"进段打点" ====================
* 见 task_watchdog.h 的说明与 实机测试规划.md §0.5.4 round 7 结论(假设 2:
* poller 自身停摆 → 需定位 defaultTask 主循环死在哪个调用点)。
* 见 task_watchdog.h 的说明(round 7 初判"poller 自身停摆"经 round 8b 更正:
* 真因是 IWDG 超时被静默配成复位默认值,见 docs/子系统设计/看门狗设计说明.md
* 2026-10-02 变更记录)→ 需定位 defaultTask 主循环冻结在哪个调用点。
* 槽放 .noinit(scatter UNINIT_CCM):IWDG/引脚复位不改变 SRAM,复位后仍可读。 */
/*
+7 -5
View File
@@ -83,10 +83,11 @@ uint32_t task_wd_is_armed(void); /* 1 = IWDG 已启动 */
/*
* ==================== round 8 取证:复位不丢的"进段打点" ====================
* 背景(实机测试规划.md §0.5.4 round 7 结论):误复位时判定分支(STALL)从未
* 执行 → **喂狗点 task_wd_poll 自身停摆**(假设 2:poller 被阻塞),而非某个被
* 监视任务饿死。RAM 态随复位消失、串口又可能来不及打,故需要一条**复位后仍可读**
* 的"defaultTask 主循环最后走到哪一段"轨迹。
* 背景(2026-10-02 台架 round 7~8 取证,完整链条见
* docs/子系统设计/看门狗设计说明.md 2026-10-02 变更记录):误复位时判定分支(STALL)从未
* 执行,当时判为**喂狗点 task_wd_poll 自身停摆**(round 8b 已更正:真因是 IWDG 超时
* 被静默配成复位默认值),而非某个被监视任务饿死。RAM 态随复位消失、串口又可能来不及打,
* 故需要一条**复位后仍可读**的"defaultTask 主循环最后走到哪一段"轨迹。
*
* 实现:轨迹槽放在 .noinit(scatter 的 UNINIT 执行区,见
* MDK-ARM/STM32F407-Demo/STM32F407-Demo.sct 的 UNINIT_CCM)——IWDG/引脚复位
@@ -152,7 +153,8 @@ void task_wd_tick_snapshot(void);
* 限定条件:TIM7 中断上下文调用(`HAL_TIM_PeriodElapsedCallback` 内,每 1ms)
* 函数说明:更新 cur 槽 = [magic, uwTick, 本轮 TIM7 中断计数, 0](纯 SRAM 写,无阻塞)。
* 与 task_wd_seg 的"进段打点"配合,复位后由 task_wd_seg_report() 上报。
* 背景(实机测试规划.md §0.5.4.3 第 2 条):HAL_UART_Transmit 的超时判据
* 背景(2026-10-02 台架 round 8b 取证,见 docs/子系统设计/看门狗设计说明.md
* 2026-10-02 变更记录):HAL_UART_Transmit 的超时判据
* 依赖 uwTick,时间源停摆即死等——必须先把"TIM7 是否停摆"钉死再定向修复。
* ⚠ **本函数内严禁调用任何 FreeRTOS/CMSIS-RTOS API**:TIM7 在 HAL_Init
* 阶段即开始中断(远早于 xPortStartScheduler),此时 ISR 版内核 API 会触发