feat(DLD154V4B): V2.10 新增 IWDT 硬件看门狗(超时≈1.64s,双保险喂狗)

- 对齐 DLD154Pro V3.03 方案: TMR15 ISR 5ms 递增 g_wdg_counter,
  主循环 poll_wdg() 每 500ms 喂狗, 超时 16×4096/40k ≈ 1.64s
- 双保险: ISR 死→计数不涨→永不喂狗; 主循环死→poll_wdg 不执行→复位
- main() 使能后立即喂一次, 给 FreeRTOS 启动留足时间
- 隔离测试 5 项断言全过 (init 配置/10s 喂狗 20 次/ISR 死不喂/边界 99-100 tick)
- 文档同步: technical-spec(架构图+§13.1 机制) / release-notes(V2.10)
  / product-manual(特性+版本) / roadmap / devlog
This commit is contained in:
wangfq
2026-08-28 08:56:33 +08:00
parent 859842aba0
commit 8f43f8f1c9
8 changed files with 117 additions and 4 deletions
+26 -2
View File
@@ -42,8 +42,9 @@ FreeRTOS Kernel (CMSIS-RTOS v2)
│ ├── poll_green_led() — 绿灯驱动
│ └── poll_yellow_led() — 黄灯故障编码
├── TMR3_ISR() — 线圈频率捕获
├── TMR15_ISR() — 5ms 系统 tick (LED 驱动)
── TMR14_PWM() — 红灯呼吸
├── TMR15_ISR() — 5ms 系统 tick (LED 驱动 + 看门狗活性计数)
── TMR14_PWM() — 红灯呼吸
└── IWDT — 硬件看门狗 (超时≈1.64s, main 使能, 主循环 poll_wdg 喂狗)
```
---
@@ -683,8 +684,31 @@ DLD154V4B/
#define ENTRY_CONFIRM 3 // 进入确认: 连续 N 次低于阈值
#define FREEZE_TIMEOUT 1000 // 冻结超时: ~10s @ 10ms/tick
#define FREEZE_STABILITY_RATE 2 // 稳定性窗口: 参考值的 ±2%
// 看门狗参数 (IWDT, V2.10 新增)
#define WDT_COUNTER_LIMIT 100 // 喂狗周期 500ms (TMR15 5ms × 100)
#define WDT_DIV 16 // LSI 分频
#define WDT_RLD 4095 // 12bit 重装载 → 超时 ≈ 1.64s
```
### 13.1 看门狗机制(IWDTV2.10 新增)
AT32F421 独立看门狗(IWDT),双保险喂狗模式(对齐 DLD154Pro V3.03 方案):
| 环节 | 实现 |
|------|------|
| 使能 | `main()``wdt_init()`:分频 16 + 重装载 4095 + 立即喂一次 |
| 超时 | ≈ 1.64sLSI≈40kHz`16×4096/40k` |
| 活性计数 | TMR15 ISR 每 5ms `g_wdg_counter++` |
| 喂狗 | 主循环每轮 `poll_wdg()`:计数达 100500ms)才 `wdt_counter_reload()` |
**双保险语义**
- TMR15 ISR 死 → 计数不涨 → 永不喂狗 → 1.64s 后复位
- 主循环死(阻塞/死循环不走喂狗点)→ poll_wdg 不执行 → 1.64s 后复位
- FreeRTOS 调度失败 / 任务创建失败 → 无人喂狗 → 复位(期望行为,避免"假活")
> ⚠ 喂狗周期 500ms 必须远小于超时 1.64s;修改 WDT_DIV/WDT_RLD 时保持 `喂狗周期 < 超时/2`。
---
## 14. 关键专利