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:
+26
-2
@@ -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 看门狗机制(IWDT,V2.10 新增)
|
||||
|
||||
AT32F421 独立看门狗(IWDT),双保险喂狗模式(对齐 DLD154Pro V3.03 方案):
|
||||
|
||||
| 环节 | 实现 |
|
||||
|------|------|
|
||||
| 使能 | `main()` 中 `wdt_init()`:分频 16 + 重装载 4095 + 立即喂一次 |
|
||||
| 超时 | ≈ 1.64s(LSI≈40kHz,`16×4096/40k`) |
|
||||
| 活性计数 | TMR15 ISR 每 5ms `g_wdg_counter++` |
|
||||
| 喂狗 | 主循环每轮 `poll_wdg()`:计数达 100(500ms)才 `wdt_counter_reload()` |
|
||||
|
||||
**双保险语义**:
|
||||
- TMR15 ISR 死 → 计数不涨 → 永不喂狗 → 1.64s 后复位
|
||||
- 主循环死(阻塞/死循环不走喂狗点)→ poll_wdg 不执行 → 1.64s 后复位
|
||||
- FreeRTOS 调度失败 / 任务创建失败 → 无人喂狗 → 复位(期望行为,避免"假活")
|
||||
|
||||
> ⚠ 喂狗周期 500ms 必须远小于超时 1.64s;修改 WDT_DIV/WDT_RLD 时保持 `喂狗周期 < 超时/2`。
|
||||
|
||||
---
|
||||
|
||||
## 14. 关键专利
|
||||
|
||||
Reference in New Issue
Block a user