|
int main(void)
{
system_init();
configure_wdt();
enum system_reset_cause reset_cause = system_get_reset_cause();
if (reset_cause == SYSTEM_RESET_CAUSE_WDT) {
port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE); //看门狗触发MCU复位,关灯
}
else {
port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);
}
while (true) {
if (port_pin_get_input_level(BUTTON_0_PIN) == false) {
port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE); //按键开灯
wdt_reset_count(); //复位开门狗
}
}
}
看门狗实际是一个特殊的寄存器,启用开门狗之后,如果没有及时“喂狗”,等开门狗定时器溢出之后,将触发系统复位,
因此看门狗的一个重要用途就是,当我们的程序没有按照预期运行时,让系统复位,防止程序“跑飞”,而不受控制。
我们可以在程序的适当位置不断地喂狗,更新看门狗寄存器值,一直让看门狗保持在不溢出的状态。
本例中,若我们不断地按BTN0键复位开门狗寄存器,LED将一直保持亮,系统便不会复位! |
|