用料
示例
前言
这是一个简单的看门狗定时器(WDT)示例,演示了看门狗 API 的用法。 有关看门狗的定义和工作原理,请参阅以下信息。
看门狗简介
看门狗定时器是一个硬件定时器,用于检测软件故障的发生,然后在编程周期结束时自动生成系统复位或看门狗中断。
通俗地说,想象一下微控制器陷入无穷循环的情况,或者微控制器在执行某些任务时挂起的情况。 通常的故障排除方法是按下复位键,跳出无穷循环。 但是,要一直按复位键实际上是不可能的,因此,嵌入在微控制器中的看门狗定时器可以帮助解决这种情况。
喂狗
如果你家里养了一条狗。 如果有一天你喂不饱它,它就会咬你! 同样,这也是看门狗定时器背后的工作逻辑。
在示例中,有 2 个任务包含一些重复运行的循环,其中一个称为 "Small_Task",另一个称为 "Big_Task"。 看门狗定时器已启用,其初始值比 "Small_Task "的总延迟时间(1 秒)长 5 秒,但比 "Big_Task "的总延迟时间(10 秒)短。
在成功的情况下,看门狗会在 5 秒内刷新/进给,但在失败的情况下,循环正在处理中,看门狗在 5 秒后仍未刷新,从而触发看门狗(狗叫),产生中断以重置处理器。 同样,看门狗定时器可保护微控制器免受挂起情况的影响。
实现流程
连接电路板,然后打开 Arduino IDE 中的示例:"文件" -> "示例" -> "AmebaWatchdog" -> "SimpleWDT"。
上传前需要进行 2 项设置。
默认名称 |
设定值 |
功能说明 |
AON_WDT_Enable |
1 |
看门狗定时器设置为始终开启 |
AON_WDT_Enable |
0 |
始终处于禁用状态 |
RUN_CALLBACK_IF_WATCHDOG_BARKS |
1 |
在 "吠叫 "后执行 IRQ 功能 |
RUN_CALLBACK_IF_WATCHDOG_BARKS |
0 |
禁用 中断 |
备注
当 "AON_WDT_Enable "设置为 "1 "时,不支持 IRQ。
成功上传示例代码后,打开串行监视器并按下复位按钮。 你会发现 "Small_Task "可以在 5 秒内刷新看门狗(在看门狗定时器中初始化)。 但是,"Big_Task "无法在 5 秒内刷新看门狗,看门狗会 "吠叫",然后微控制器复位。
当设置 #define RUN_CALLBACK_IF_WATCHDOG_BARKS (0) 的值为 "1"时,用于自定义 "my_watchdog_irq_handler"。 在处理程序中编写代码,以便在 "吠叫 "后执行。
|