feat(vd960Loop): 看门狗升级双保险喂狗模式 + 超时对齐 V4B(1.64s)
对照 DLD154V4B V2.10(同款 AT32F421): - 原直喂模式缺 ISR 活性检测: TMR15 ISR 死但主循环活 -> 看门狗永不复位(假活) - 升级: TMR15 ISR 5ms 递增 g_wdg_counter + 主循环 poll_wdg() 500ms 才 reload - 超时 3s(div64/rld1875) -> 1.64s(div16枚举/rld4095) - wdt_feed 定义移至 TaskLoop.c 改名 poll_wdg, 与 V4B 同构 - 修正 main.c 注释矛盾(4687 vs 1875); 沿用 WDT_CLK_DIV_16 枚举写法避免 V4B 同源传值 bug - 隔离测试 3 项断言全过(分频16/超时1638ms>500ms/10s喂20次/ISR死不喂)
This commit is contained in:
@@ -41,6 +41,15 @@
|
||||
#define FREEZE_TIMEOUT 1000 // 冻结超时: ~10s @ 10ms/tick
|
||||
#define FREEZE_STABILITY_RATE 2 // 稳定性窗口: 参考值的 ±2%
|
||||
|
||||
/*===========================================================================
|
||||
* 看门狗 (IWDT) - 对齐 DLD154V4B V2.10
|
||||
* 双保险模式: TMR15 ISR 5ms 递增 g_wdg_counter, 主循环 poll_wdg() 每 500ms 喂狗
|
||||
* 超时 = WDT_DIV 枚举分频 x (WDT_RLD+1) / LSI(约40kHz) 约 1.64s
|
||||
*===========================================================================*/
|
||||
#define WDT_COUNTER_LIMIT 100 // 喂狗周期 500ms (TMR15 5ms x 100)
|
||||
#define WDT_DIV 2 // IWDT 分频枚举值: 2 = WDT_CLK_DIV_16 (实际分频 16; 勿传 16!)
|
||||
#define WDT_RLD 4095 // 12bit 重装载 -> 超时约 1.64s
|
||||
|
||||
/*===========================================================================
|
||||
* 离开检测: 1 = 平坦性三条件 (CN200910309382), 0 = cnt_release 防抖
|
||||
*===========================================================================*/
|
||||
@@ -228,7 +237,8 @@ uint8_t update_moving_average(uint32_t* p_sum, uint16_t* p_cnt,
|
||||
void set_loops_relay_on(uint8_t loop_num);
|
||||
void set_loops_relay_off(uint8_t loop_num);
|
||||
|
||||
void wdt_feed(void);
|
||||
void poll_wdg(void);
|
||||
extern volatile uint16_t g_wdg_counter; // 看门狗活性计数 (TMR15 5ms 递增)
|
||||
|
||||
extern TaskHandle_t usart_task_handler;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user