在官方echoUart工程中 测试看门狗功能:
看门狗超时时间设置成3秒, app任务whlie循环 使用cpu_delay()进行500ms延时:
对Watchdog_clear() 和 Watchdog_close() 做测试,执行代码:
测试 Watchdog_close:
/* Loop forever echoing */
while (1) {
generalApp_delayMs(500);
// Task_sleep(1000000/10);
//UART_read(uart, &input, 1);
input++;
if(input == 2){//第1秒时进行喂狗,喂狗有效
Watchdog_clear(watchdog);
}else if(input == 4){//第2秒时进行喂狗,喂狗有效
Watchdog_clear(watchdog);
}else if(input == 6){//第3秒时 停止定时器,
Watchdog_close(watchdog); //停止看门狗,该语句执行失败
}else if(input == 12){ //未执行到该语句,看门狗在idx =10 (第5秒)时,超时重启
Watchdog_clear(watchdog);
}
PIN_setOutputValue(ledPinHandle, Board_LED1, input%2);
UART_write(uart, &input, 1);
}
Watchdog_close() 看api介绍是 停止看门狗计数,上述代码中 调用该api后,看门狗依然在运行生效?
上述代码调用是否正确 或 我这边理解有误?
---------------------------------------------------------------------------------------------------------------------------
测试 Watchdog_close:
/* Loop forever echoing */ while (1) { // generalApp_delayMs(500); Task_sleep(1000000/10);//调用该api进行延时,不进行喂狗操作 //UART_read(uart, &input, 1); input++; // if(input == 2){ // Watchdog_clear(watchdog); // }else if(input == 4){ // Watchdog_clear(watchdog); // }else if(input == 6){ // Watchdog_close(watchdog); //停止看门狗(该语句执行后,查看看门狗定时器) // }else if(input == 12){ //看门狗在idx =10时,超时重启 // Watchdog_clear(watchdog); // } PIN_setOutputValue(ledPinHandle, Board_LED1, input%2); UART_write(uart, &input, 1); }
使用generalApp_delayMs()即,CPUdelay()延时 且 不进行喂狗操作,看门狗能够对设备进行重启
使用Task_sleep()让任务进入阻塞态 且 不进行喂狗操作,看门狗没有按预期进行重启设备? 这是什么情况?
3Q。