【发布时间】:2017-04-30 19:14:17
【问题描述】:
我知道 FreeRTOS 在后台使用 Arduino 看门狗定时器进行操作。我可以设置自己的看门狗重置计时器而不与 FreeRTOS 冲突吗?
例如,在设置中:
#include <avr/wdt.h>
wdt_enable(WDTO_2S);
喂食:
wdt_reset();
【问题讨论】:
我知道 FreeRTOS 在后台使用 Arduino 看门狗定时器进行操作。我可以设置自己的看门狗重置计时器而不与 FreeRTOS 冲突吗?
例如,在设置中:
#include <avr/wdt.h>
wdt_enable(WDTO_2S);
喂食:
wdt_reset();
【问题讨论】:
看门狗定时器的使用特定于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 微控制器。例如,this 非 Arduino FreeRTOS 端口在 ATMega323 上使用定时器 1,但提供了有关更改它以适应其他 AVR 设备的信息。
【讨论】: