Arduino 看門狗:它是如何工作的

看門狗Arduino

在這篇新文章中,我們將了解什麼是 看門狗、它的用途以及如何在您的項目中使用它 Arduino的。 關於這個有趣但未知的功能,您需要了解的一切。 是的,正如它的名字所暗示的(看門狗),它可以用來跟踪一些問題。

在這裡我們將看到 所有你必須知道的 關於…

什麼是看門狗?

在計算中,一個 看門狗 是一種用於監視系統或程序運行的監督機制。 其主要功能是檢測和響應異常情況或系統故障,例如崩潰或凍結,並採取糾正措施以確保繼續運行或系統恢復。

看門狗 在定時器上運行 其配置為特定的時間間隔。 如果系統或程序在該時間間隔內未執行特定操作或給看門狗供電(即重新啟動它),則看門狗會假定係統處於不需要的狀態或已停止正確響應並採取預定操作。 此操作可能因實施方式而異,可能包括重新啟動系統、生成錯誤日誌、觸發警報或採取特定步驟來糾正問題。

看門狗用於各種計算機系統和設備,從操作系統和服務器到設備 嵌入式和關鍵實時系統,包括 Arduino。 其主要目標是通過自動檢測和響應問題來提高系統可靠性和可用性,從而減少故障情況下手動干預的需要。

什麼是Arduino看門狗?

關於 arduino 的書籍

Arduino的看門狗定時器必鬚根據應用的需要進行調整。 他 看門狗定時器 使用內部 128 kHz 時鐘源(可能因所使用的板和 MCU 而異)。 激活後,它開始從零計數到用戶預定值。 如果看門狗定時器在達到該值時未復位,則會復位微控制器。

微控制器 (MCU) 是一種小型電子設備,在單個芯片上集成了中央處理單元 (CPU)、存儲器、輸入/輸出外圍設備,有時還集成了通信接口。 它旨在控制和執行特定任務。

看門狗定時器 ATmega328P,其實施於 Arduino UNO,提供 10 種不同的時間設置,每種設置確定計時器何時溢出並因此導致重置。 不同的時間間隔如下:16 毫秒、32 毫秒、64 毫秒、0.125 秒、0.25 秒、0.5 秒、1 秒、2 秒、4 秒和8 秒,正如我們稍後將在我包含的表中看到的那樣。

如果您仍然不清楚看門狗定時器可以做什麼 Arduino UNO, 我們拭目以待 一個例子 這樣你就可以通過圖形方式理解它。 在此示例中,我們將使用簡單的 LED 閃爍(閃爍)。 在進入 while() 循環之前,LED 會閃爍一段設定的時間。 這個 while() 循環用作阻塞系統的替代方案。 由於在 while() 循環中看門狗定時器不會重置,因此會導致系統重新啟動,並且 LED 將在系統崩潰並重新啟動之前再次開始閃爍。 這個循環將持續下去……

注意事項和特點

看門狗定時器 它在代碼的開頭被禁用。 在啟用看門狗之前會延遲 x 秒。 這種延遲對於 Arduino 引導加載程序檢查是否正在加載新代碼並留出足夠的時間將代碼刻錄到閃存至關重要。 這方面作為預防措施是相關的。 可能會出現這樣的情況:由於錯誤的編碼或不適當的考慮,所編寫的代碼以非常短的間隔無限地重置微控制器。 這可能會損壞 Arduino 板並阻止代碼正確上傳到其中。 如果發生這種情況,您需要使用另一個 Arduino 作為鎖定的 Arduino 上的 ISP 來燒錄引導加載程序...

當我們使用Arduino看門狗時,需要使用 位寄存器 定義芯片的行為。 Arduino 板上的微控制器數據表詳細介紹了相關寄存器及其含義。 然而,Arduino集成開發環境(IDE)附帶了一些旨在簡化此過程的函數和宏,可以通過包含庫來導入 #包括 使用AVR芯片看門狗。

這樣我們就可以配置看門狗了 使用 wdt_enable() 函數激活它。 如果定時器尚未重置,則該函數的參數確定板重置之前的時間。 至於你可以在代碼中配置的值,我在這裡包含它們:

看門狗觸發前的時間 wtd_enable() 參數
15毫秒 WDTO_15MS
30毫秒 WDTO_30MS
60毫秒 WDTO_60MS
120毫秒 WDTO_120MS
250毫秒 WDTO_250MS
500毫秒 WDTO_500MS
1小號 WDTO_1S
2小號 WDTO_2S
4小號 WDTO_4S
8小號 WDTO_8S
如需了解更多信息,您可以查閱Arduino 數據表,其中您可以找到有關集成微控制器本身、可與看門狗一起使用的寄存器、引腳排列、外設、技術規格、電壓、功耗等的更多詳細信息。

在Arduino上使用看門狗的示例

Arduino IDE、數據類型、編程

最後,我們將通過 Arduino IDE 中的示例了解如何實際使用看門狗。 正如我們所看到的,這非常簡單,您可以在互聯網上找到類似的各種源代碼,因此您可以練習、修改和創建自己的代碼以在項目中使用看門狗。 讓我們來看看 我們的例子:

#include <avr/wdt.h> // Incluir la biblioteca watchdog (wdt.h)
 
void setup()
{
  wdt_disable(); // Desactivar el watchdog mientras se configura, para que no se resetee
  wdt_enable(WDTO_2S); // Configurar watchdog a dos segundos
}
 
void loop()
{
  wdt_reset(); // Actualizar el watchdog para que no produzca un reinicio
  //Aquí iría el código de tu programa...
}

正如這個 Arduino 草圖示例所示,有 三大功能 用於管理看門狗的著名編程語言包括:

  • wdt_disable() 配置 Arduino 時禁用計時器。
  • wdt_啟用(時間) 為計時器分配一個時間間隔並啟動它,指定相應的時間,如上表所示。
  • wdt_reset() 更新分配的時間間隔,使程序不會重新啟動。

成為第一個發表評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。