您可以在 Arduino 上同时使用 FreeRTOS 和硬件看门狗定时器吗?

Can you use FreeRTOS and the hardware watchdog timer at the same time on an Arduino?

我知道 FreeRTOS 在后台使用 Arduino 看门狗定时器进行操作。我可以设置自己的看门狗重置计时器而不与 FreeRTOS 冲突吗?

例如,在设置中:

#include <avr/wdt.h>
wdt_enable(WDTO_2S);

并喂食:

wdt_reset();

看门狗定时器的使用特定于 http://www.arduinolibraries.info/libraries/free-rtos and not a feature of FreeRTOS specifically. The implementation is described in detail at https://feilipu.me/2015/11/24/arduino_freertos/ 的 "official" Arduino 端口。

看门狗定时器用作系统节拍定时器(因为所有其他定时器都配置为供 Arduino 框架使用)。在那种情况下,您不能将看门狗定时器用于其正常用途,并且如果您异步重置它肯定会扰乱调度程序计时。

这种看门狗定时器的使用似乎允许单个端口在所有基于 AVR 的 Arduino 硬件上工作,因为它是所有 Arduino 设备上可用的一个定时器源,而 Arduino 框架无法控制它.这是一个次优解决方案,因为片上 128KHz 振荡器不会特别精确或温度稳定。

如果您需要将看门狗用于其预期目的,那么最好的解决方案可能是修改端口以使用未使用的(您的应用程序)标准计时器。看门狗的使用是为了确保端口对所有 Arduino 和所有应用程序的可移植性,而不管它们的定时器使用情况如何;然而,您只需要它在您的硬件和应用程序上工作,因此对其进行调整是完全合法的。

另一种方法是完全放弃 Arduino 框架和库,将其视为一个朴素的 Atmel AVR 微控制器。例如 this 非 Arduino FreeRTOS 端口使用 ATMega323 上的定时器 1,但提供了有关更改它以适应其他 AVR 设备的信息。