„Arduino Watchdog“: kaip tai veikia

sarginis šuo Arduino

Šiame naujame straipsnyje pamatysime, kas a Sarginis šuo, kam jis gali būti naudojamas ir kaip jį panaudoti savo projektuose Arduino. Viskas, ką reikia žinoti apie šią įdomią, bet nežinomą funkciją. Ir taip, kaip rodo jo pavadinimas (sargybinis šuo), jis gali būti naudojamas kai kurioms problemoms sekti.

Čia pamatysime Viskas, ką reikia žinoti apie…

Kas yra sarginis šuo?

Skaičiuojant, a sarginis šuo yra priežiūros mechanizmas, naudojamas sistemos ar programos veikimui stebėti. Jo pagrindinė funkcija yra aptikti neįprastas situacijas arba sistemos gedimus, pvz., gedimus ar užšalimus, ir reaguoti į juos bei imtis taisomųjų veiksmų, kad būtų užtikrintas tolesnis veikimas arba sistemos atkūrimas.

Sargybinis šuo veikia su laikmačiu kuris sukonfigūruotas tam tikram laiko intervalui. Jei sistema ar programa per tą laiką neatlieka konkretaus veiksmo arba neįjungia sergėtojo (t. y. nepaleidžia jo iš naujo), sergėtojas daro prielaidą, kad sistema yra nepageidaujamoje būsenoje arba nustojo tinkamai reaguoti, ir imasi iš anksto nustatyto veiksmo. Šis veiksmas gali skirtis priklausomai nuo įgyvendinimo ir gali apimti sistemos paleidimą iš naujo, klaidų žurnalų generavimą, pavojaus signalų suaktyvinimą arba konkrečių veiksmų, skirtų problemai išspręsti, atlikimą.

Apsauginis šuo naudojamas įvairiose kompiuterių sistemose ir įrenginiuose – nuo ​​operacinių sistemų ir serverių iki įrenginių įterptosios ir kritinės realaus laiko sistemos, įskaitant Arduino. Pagrindinis jos tikslas yra pagerinti sistemos patikimumą ir pasiekiamumą automatiškai aptinkant ir reaguojant į problemas, taip sumažinant rankinio įsikišimo poreikį gedimo atvejais.

Kas yra Arduino sarginis šuo?

knygos apie arduino

„Arduino“ laikmatis turi būti sureguliuotas pagal programos poreikius. Jis Sargybos laikmatis naudoja vidinį 128 kHz laikrodžio šaltinį (gali skirtis priklausomai nuo naudojamos plokštės ir MCU). Kai aktyvuota, ji pradeda skaičiuoti nuo nulio iki vartotojo iš anksto nustatytos vertės. Jei „Watchdog“ laikmatis nenustato iš naujo, kai pasiekia šią vertę, jis iš naujo nustato mikrovaldiklį.

Mikrovaldiklis arba MCU yra nedidelis elektroninis įrenginys, kuris viename luste integruoja centrinį procesorių (CPU), atmintį, įvesties/išvesties periferinius įrenginius ir kartais ryšio sąsajas. Jis skirtas kontroliuoti ir vykdyti konkrečias užduotis.

„Watchdog“ laikmatis ATmega328P, kuris yra įgyvendintas Arduino UNO, siūlo 10 skirtingų laiko nustatymų, kurių kiekvienas nustato, kada laikmatis persipildys ir dėl to bus nustatytas iš naujo. Skirtingi laiko intervalai yra šie: 16 ms, 32 ms, 64 ms, 0.125 sekundės, 0.25 sekundės, 0.5 sekundės, 1 sekundė, 2 sekundės, 4 sekundės ir 8 sekundės, kaip matysime vėliau lentelėje, kurią įtrauksiu.

Jei vis dar neaišku, ką galite padaryti su Watchdog Timer Arduino UNO, pamatysime Pavyzdys kad galėtumėte tai suprasti grafiškai. Šiame pavyzdyje naudosime paprastą LED mirksintį (mirksėjimą). Šviesos diodai mirksi nustatytą laikotarpį prieš įeinant į while() kilpą. Ši while() kilpa naudojama kaip alternatyva blokavimo sistemai. Kadangi „Watchdog“ laikmatis nenustatomas iš naujo, kol veikia while() ciklas, sistema bus paleista iš naujo, o šviesos diodai vėl pradės mirksėti prieš sistemai užstringant ir paleidžiant iš naujo. Šis ciklas tęsis…

Svarstymai ir savybės

„Watchdog“ laikmatis Kodo pradžioje jis išjungtas. Prieš įjungiant „Watchdog“ yra įtraukta x sekundžių delsa. Šis delsimas yra labai svarbus, kad „Arduino“ įkrovos įkroviklis galėtų patikrinti, ar įkeliamas naujas kodas, ir suteikti pakankamai laiko įrašyti kodą į „flash“ atmintį. Šis aspektas yra svarbus kaip atsargumo priemonė. Gali susidaryti situacija, kai dėl klaidingo kodavimo ar netinkamų aplinkybių parašytas kodas labai trumpais intervalais be galo atstato mikrovaldiklį. Tai gali sugadinti „Arduino“ plokštę ir neleisti į ją tinkamai įkelti kodų. Jei taip atsitiks, turite įrašyti įkrovos tvarkyklę naudodami kitą „Arduino“ kaip IPT užrakintame „Arduino“...

Kai naudojame Arduino sarginį šunį, jį naudoti būtina bitų registrai lusto elgsenai apibrėžti. Atitinkami registrai ir jų reikšmė išsamiai aprašyti mikrovaldiklio duomenų lape, esančiame Arduino plokštėje. Tačiau „Arduino“ integruotoje kūrimo aplinkoje (IDE) yra keletas funkcijų ir makrokomandų, skirtų šiam procesui supaprastinti, kurias galima importuoti įtraukiant biblioteką. #įtraukti naudoti AVR lusto stebėjimo funkciją.

Tokiu būdu galime sukonfigūruoti sarginį šunį suaktyvinkite jį naudodami wdt_enable() funkciją. Šios funkcijos argumentas nustato laiką iki plokštės atstatymo, jei laikmatis nebuvo nustatytas iš naujo. Kalbant apie vertes, kurias galite konfigūruoti kode, įtraukiu jas čia:

Laikas iki sarginio įjungimo wtd_enable() argumentas
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 ai WDTO_1S
2 ai WDTO_2S
4 ai WDTO_4S
8 ai WDTO_8S
Daugiau informacijos rasite Arduino duomenų lape, kur rasite daugiau informacijos apie patį integruotą mikrovaldiklį, registrus, kuriuos galima naudoti su sarginiu šunimi, pinout, periferinius įrenginius, technines specifikacijas, įtampas, energijos suvartojimą ir kt.

Watchdog naudojimo „Arduino“ pavyzdys

Arduino IDE, duomenų tipai, programavimas

Galiausiai, pažiūrėkime, kaip sarginis šuo yra praktiškai naudojamas su pavyzdžiu Arduino IDE. Kaip matome, tai gana paprasta, internete galite rasti įvairius šaltinio kodus, tokius kaip šis, kad galėtumėte praktikuoti, modifikuoti ir sukurti savo kodus, kad galėtumėte naudoti watchdog savo projektuose. Pažiūrėkime mūsų pavyzdys:

#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...
}

Kaip matyti šiame „Arduino“ eskizo pavyzdyje, yra trys funkcijos žinomų programavimo kalbų, skirtų sarginiam šuniui valdyti, ir tai yra:

  • wdt_disable() išjungti laikmatį konfigūruojant Arduino.
  • wdt_enable(laikas) priskirti laikmačiui intervalą ir jį pradėti, nurodydamas atitinkamą laiką, kaip parodžiau ankstesnėje lentelėje.
  • wdt_reset() kad atnaujintumėte priskirtą intervalą ir kad programa nebūtų paleista iš naujo.

Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.