Š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?
„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į.
„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 |
Watchdog naudojimo „Arduino“ pavyzdys
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.