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

cda*_*yor 1 embedded arduino freertos

我知道 FreeRTOS 使用引擎盖下的 Arduino 看门狗定时器来操作。我可以在不与 FreeRTOS 冲突的情况下设置自己的看门狗重置计时器吗?

例如,在设置中:

#include <avr/wdt.h>
wdt_enable(WDTO_2S);
Run Code Online (Sandbox Code Playgroud)

并喂食:

wdt_reset();
Run Code Online (Sandbox Code Playgroud)

Cli*_*ord 5

看门狗定时器的使用特定于http://www.arduinolibraries.info/libraries/free-rtos上的“官方”Arduino 端口,而不是 FreeRTOS 的特定功能。实现在https://feilipu.me/2015/11/24/arduino_freertos/中有详细描述。

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

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

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

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