Arduino Watchdog: Nasıl Çalışır?

Arduino gözlemcisi

Bu yeni makalede ne olduğunu göreceğiz. Bekçi köpeği, ne için kullanılabilir ve projelerinizde nasıl kullanılabilir? Arduino. Bu ilginç ama bilinmeyen fonksiyon hakkında bilmeniz gereken her şey. Ve evet, adından da anlaşılacağı gibi (bekçi köpeği), bazı sorunların izini sürmek için kullanılabilir.

Burada göreceğiz tüm bilmen gereken ilişkin…

Bekçi köpeği nedir?

Hesaplamada, bir bekçi köpeği bir sistemin veya programın çalışmasını izlemek için kullanılan denetleyici bir mekanizmadır. Ana işlevi, anormal durumları veya çökme veya donma gibi sistem arızalarını tespit etmek ve bunlara yanıt vermek ve sürekli çalışmayı veya sistem kurtarmayı sağlamak için düzeltici önlemler almaktır.

bekçi köpeği bir zamanlayıcıyla çalışır belirli bir zaman aralığı için yapılandırılmıştır. Sistem veya program belirli bir eylemi gerçekleştirmezse veya bu zaman aralığı içinde gözlemciye güç vermezse (yani yeniden başlatmazsa), gözlemci sistemin istenmeyen bir durumda olduğunu veya doğru şekilde yanıt vermeyi bıraktığını varsayar ve varsayılan eylemi gerçekleştirir. Bu eylem uygulamaya göre değişiklik gösterebilir ve sistemin yeniden başlatılmasını, hata günlüklerinin oluşturulmasını, alarmların tetiklenmesini veya sorunu düzeltmek için belirli adımların atılmasını içerebilir.

Watchdog, işletim sistemleri ve sunuculardan cihazlara kadar çeşitli bilgisayar sistemlerinde ve cihazlarda kullanılır. Arduino dahil gömülü ve kritik gerçek zamanlı sistemler. Birincil hedefi, sorunları otomatik olarak tespit edip yanıt vererek sistem güvenilirliğini ve kullanılabilirliğini artırmak, böylece arıza durumlarında manuel müdahale ihtiyacını azaltmaktır.

Arduino gözlemcisi nedir?

arduino ile ilgili kitaplar

Arduino'nun watchdog zamanlayıcısı uygulamanın ihtiyaçlarına göre ayarlanmalıdır. O Watchdog Zamanlayıcısı dahili 128 kHz saat kaynağını kullanır (kullanılan karta ve MCU'ya bağlı olarak değişebilir). Etkinleştirildiğinde, sıfırdan kullanıcının önceden belirlediği bir değere kadar saymaya başlar. Watchdog Timer bu değere ulaştığında resetlenmezse mikro denetleyiciyi resetler.

Mikrodenetleyici veya MCU, merkezi işlem birimini (CPU), belleği, giriş/çıkış çevre birimlerini ve bazen iletişim arayüzlerini tek bir çip üzerinde birleştiren küçük bir elektronik cihazdır. Belirli görevleri kontrol etmek ve yürütmek için tasarlanmıştır.

Bekçi Köpeği Zamanlayıcısı ATmega328P'da uygulanan Arduino UNO, her biri zamanlayıcının ne zaman taşacağını ve dolayısıyla sıfırlamaya neden olacağını belirleyen 10 farklı zaman ayarı sunar. Farklı zaman aralıkları şunlardır: 16 ms, 32 ms, 64 ms, 0.125 saniye, 0.25 saniye, 0.5 saniye, 1 saniye, 2 saniye, 4 saniye ve 8 saniye, daha sonra ekleyeceğim tabloda göreceğimiz gibi.

Watchdog Timer ile neler yapabileceğiniz hala net değilse Arduino UNO, göreceğiz Bir örnek böylece grafiksel olarak anlayabilirsiniz. Bu örnekte, yanıp sönen (yanıp sönen) basit bir LED kullanacağız. While() döngüsüne girmeden önce LED'ler belirli bir süre boyunca yanıp söner. Bu while() döngüsü, engelleme sistemine alternatif olarak kullanılır. Watchdog Zamanlayıcısı while() döngüsünde sıfırlanmadığından sistemin yeniden başlatılmasına neden olur ve sistem çöküp yeniden başlatılmadan önce LED'ler yeniden yanıp sönmeye başlar. Bu döngü devam edecek...

Dikkat edilmesi gereken noktalar ve özellikler

Bekçi Köpeği Zamanlayıcısı kodun başında devre dışı bırakıldı. Watchdog etkinleştirilmeden önce x saniyelik bir gecikme eklenir. Bu gecikme, Arduino önyükleyicisinin yeni kodun yüklenip yüklenmediğini kontrol etmesine ve kodun flash belleğe yazılması için yeterli süreye izin vermesi açısından çok önemlidir. Bu husus bir önlem olarak önemlidir. Hatalı kodlama veya yanlış değerlendirmeler nedeniyle, yazılan kodun mikrodenetleyiciyi çok kısa aralıklarla sonsuz olarak sıfırladığı bir durum ortaya çıkabilir. Bu, Arduino kartına zarar verebilir ve kodların karta düzgün şekilde yüklenmesini engelleyebilir. Böyle bir durumda, kilitli Arduino'da başka bir Arduino'yu ISP olarak kullanarak önyükleyiciyi yakmanız gerekir.

Arduino watchdog'u kullandığımızda şunu kullanmak gerekir: bit kayıtları Çipin davranışını tanımlamak için. İlgili kayıtlar ve anlamları Arduino kartında bulunan mikrodenetleyici veri sayfasında ayrıntılı olarak açıklanmıştır. Ancak Arduino entegre geliştirme ortamı (IDE), bu süreci basitleştirmek için tasarlanmış, kütüphane dahil edilerek içe aktarılabilen bazı işlevler ve makrolarla birlikte gelir. #katmak AVR çipinin gözlemcisini kullanmak için.

Bu şekilde watchdog'u yapılandırabiliriz. wdt_enable() işlevi aracılığıyla etkinleştirilmesi. Bu fonksiyonun argümanı, zamanlayıcı sıfırlanmadıysa panonun sıfırlanmasından önceki süreyi belirler. Kodda yapılandırabileceğiniz değerlere gelince, bunları buraya ekliyorum:

Watchdog tetiklenmeden önceki süre wtd_enable() argümanı
15 ms WDTO_15MS
30 ms WDTO_30MS
60 ms WDTO_60MS
120 ms WDTO_120MS
250 ms WDTO_250MS
500 ms WDTO_500MS
1 s WDTO_1S
2 s WDTO_2S
4 s WDTO_4S
8 s WDTO_8S
Daha fazla bilgi için, entegre mikro denetleyicinin kendisi, watchdog ile kullanılabilecek kayıtlar, pin çıkışı, çevre birimleri, teknik özellikler, voltajlar, güç tüketimi vb. hakkında daha fazla ayrıntı bulabileceğiniz Arduino veri sayfasına başvurabilirsiniz.

Arduino'da watchdog kullanma örneği

Arduino IDE, veri tipleri, programlama

Son olarak Arduino IDE’de bir örnekle watchdog’un pratik olarak nasıl kullanıldığını görelim. Gördüğümüz gibi oldukça basit, internette bunun gibi çeşitli kaynak kodları bulabilir, projelerinizde watchdog'u kullanmak için pratik yapabilir, değiştirebilir ve kendi kodlarınızı oluşturabilirsiniz. Görelim bizim örneğimiz:

#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 için hazırlanan bu eskiz örneğinde görülebileceği gibi, üç işlev watchdog'u yönetmek için dikkat çekici programlama dilinin bir örneği ve bunlar:

  • wdt_disable() Arduino'yu yapılandırırken zamanlayıcıyı devre dışı bırakmak için.
  • wdt_enable(zaman) Zamanlayıcıya bir aralık atamak ve önceki tabloda gösterdiğim gibi karşılık gelen zamanı belirterek onu başlatmak için.
  • wdt_reset() atanan aralığı yenilemek ve böylece programın yeniden başlamamasını sağlamak için.

Tercih edilen kaynak olarak ekle