1、看门狗
⽤户代码不能⻓期占⽤ CPU,否则会导致看⻔狗复位,ESP8266 重启,此时需要使用system_soft_wdt_feed()来喂狗。
长期:在SDK编程手册中,给出的是500ms.
+++++++++++++++++++++++++++++++++++++++++++++++
在死循环测试的时候,从串口助手上看,每次复位的时间是间隔3秒,也就是3000ms.
2、系统延时
SDK编程手册中有说明,延时函数的时间并不是很准确。
2.1、us延时
void os_delay_us(uint16 us);
参数最大是65535,也就是65535us,即65ms。
2.2、ms延时
ms的延时是用上面的us函数循环写的,并不能定义很长时间,1s比较合适,中间加软件喂狗也是不行的,如下面的注释掉的两句。
加入每1秒喂狗后的现象:比如定时5s,8266还是会重启的,只不过重启的间隔是5s.
void ICACHE_FLASH_ATTR my_delay_ms(uint16 ms)
{
uint16 i;
for(i=0;i<ms;i++){
os_delay_us(1000);
// if(i/1000 == 0)
// system_soft_wdt_feed(); //每隔1s,喂狗一次
}
}
代码
void ICACHE_FLASH_ATTR user_init(void) //用户初始化函数
{
uart_init(115200,115200);
os_delay_us(10000); //等待串口稳定,避免起始数据错误
os_printf("\r\n----------------------\r\n"); //分隔线
os_printf("system_sdk_version:%s\r\n",system_get_sdk_version());
os_printf("WatchDog\r\n");
while(1){
os_printf("I am a cute dog.\r\n");
my_delay_ms(1000);
system_soft_wdt_feed();
}
}