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
+34
View File
@@ -4,6 +4,39 @@
---
## 2026-08-28 — 新增 IWDT 硬件看门狗(V2.10
### 背景
V4B 是全产品线唯一**无看门狗**的型号(对比:M1H 有 WDT_CONTR、PD132 系有 IWDG/WWDG、154Pro V3.03 有 WWDG 558ms)。现场若主循环卡死/FreeRTOS 调度异常,表现为"假活"——指示灯正常但检测逻辑已死,只能断电恢复。
### 实现(对齐 154Pro V3.03 双保险模式)
```c
// main(): wdt_init() — IWDT 分频16 + 重装载4095, 使能后立即喂一次
// TMR15 ISR: g_wdg_counter++ (5ms)
// 主循环: poll_wdg() — 计数达 100 (500ms) 才 wdt_counter_reload()
```
- **超时** ≈ 1.64sLSI≈40kHz16×4096/40k),喂狗周期 500ms,余量 >3×
- **双保险语义**:ISR 死 → 计数不涨 → 永不喂狗;主循环死 → poll_wdg 不执行 → 超时复位
- FreeRTOS 调度失败/任务创建失败 → 无人喂狗 → 复位(避免"假活"
### 涉及文件
| 文件 | 变更 |
|------|------|
| `src/main.c` | `Timr6_Init()` 后调 `wdt_init()` |
| `src/TaskLoop.c` | +`g_wdg_counter` + `wdt_init()` + `poll_wdg()`;TMR15 ISR 计数;主循环喂狗 |
| `inc/TaskLoop.h` | +WDT 宏 + extern + 函数声明 |
### 验证
- 隔离测试(host gcc mock wdt_* 驱动)5 项断言全过:init 配置、10s 喂狗 20 次(500ms 精确)、ISR 死不喂狗、边界 99/100 tick
- 待现场验证:实际复位时间(LSI 实际频率),用 `RST_REASON` 类机制确认复位源
---
## 2026-08-28 — 平坦性离开判定默认关闭(现场实测不理想)
### 背景
@@ -568,6 +601,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.10 | 2026-08-28 | 新增 IWDT 硬件看门狗(超时≈1.64s,双保险喂狗) |
| V2.9 | 2026-08-28 | 平坦性离开判定默认关闭(现场实测不理想),切回简单 cnt_release 防抖 |
| V2.8 | 2026-08-27 | 灵敏度最高档 SENS=3 阈值 10→20、离开 9→14(防误触发);清理 g_input_div 重复定义 |
| V2.7 | 2026-06-30 | 验收标准 + 发展路线图文档 |