看门狗与 PendSV
看门狗定时器
程序跑飞/死循环时自动复位,分两种:
| 类型 | 时钟 | 喂狗窗口 | 特点 |
|---|---|---|---|
| IWDG 独立看门狗 | LSI(~40 kHz,独立于系统时钟) | 无窗口,只需超时前喂 | 独立性强,主时钟挂了也能复位 |
| WWDG 窗口看门狗 | PCLK1 | 有窗口:太早/太晚喂都复位 | 带早期唤醒中断 (EWI),复位前能抢救数据 |
- 两者都是向下计数,喂狗 = 重载计数器;超时未喂 → 系统复位。
- WWDG 的「窗口」能抓到「喂太频繁」的异常(本该慢走的循环变快了)。
- IWDG 一旦使能只能复位才能关,防止程序跑飞后自己把狗关掉。
PendSV(可悬起系统调用)
异常号 14,优先级通常配成最低。
- 可悬起:置位后不立即执行,等所有更高优先级中断都退完、最后才执行。
- RTOS 用它做上下文切换:在 SysTick 中断里只置 PendSV 悬起位 → 退出中断 → PendSV 里真正切任务栈(PSP)。
- 好处:把「切任务」推迟到中断全部退出的安全点,不在 ISR 里直接切,避免打断高优先级中断。
PendSV + SysTick 是 RTOS 的两个内核级异常:SysTick 管「何时该切换」,PendSV 管「实际怎么切」。