物联网专题9:看门狗DOG 系统延时

看门狗DOG

以下是 API 参考中关于ESP8266看门狗的描述:

物联网专题9:看门狗DOG 系统延时

看门狗的代码在串口 URAT 的例程上进行修改;

增加了死循环(不进行喂狗),如下所示:

物联网专题9:看门狗DOG 系统延时

串口调试信息如下:

物联网专题9:看门狗DOG 系统延时

可以看到,程序不停的在复位。原因是我们执行了 while (1)死循环,占用了CPU而没有及时喂狗,导致8266复位。

 

执行喂狗操作如下,重新编译运行:

物联网专题9:看门狗DOG 系统延时

串口调试信息如下所示:

物联网专题9:看门狗DOG 系统延时

打印信息只出现一次,表示喂狗函数执行成功,8266没有复位。

 

系统延时

API 参考手册中,提供了微秒延时函数,如下所示:

物联网专题9:看门狗DOG 系统延时

在 os_api.h 头文件中,有关于os_api.h的定义:

物联网专题9:看门狗DOG 系统延时

接下来,我们尝试自己编写 毫秒 延时函数:

物联网专题9:看门狗DOG 系统延时

这里的这个宏定义,在SDK中有描述,主要是将函数定位绝对地址到 irm0 节区。可以看到,在user_main.c中的函数都用了这个宏,因此,我们与 SDK 保持一致:

SDK中的描述:

物联网专题9:看门狗DOG 系统延时

SDK中的调用:

物联网专题9:看门狗DOG 系统延时

这里,我们保持一致即可。

然后在user_main.c中调用bsp_delay_ms延时函数,并通过串口打印调试信息:

物联网专题9:看门狗DOG 系统延时

串口打印如下:

物联网专题9:看门狗DOG 系统延时

可以看到,串口循环打印调试信息,程序正确执行。