Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 9306|Atsakyti: 0

Zigbee kelionė (8): keli svarbūs CC2430 pagrindiniai eksperimentai - watchdogs

[Kopijuoti nuorodą]
Paskelbta 2014-10-30 23:23:37 | | | |
1. Viršutinio ir apatinio lygių sujungimas

Nesvarbu, kokia gera operacinė sistema, ar tai dabartinė Win7, ar būsima Win8 ir Win9, visada bus BlueScreen, jau nekalbant apie mažą mikrovaldiklį~ Nenuspėjamos priežastys, tokios kaip elektros triukšmas, elektros energijos tiekimo sutrikimas, elektrostatinė iškrova ir kt., gali sukelti nenormalų įterptosios sistemos veikimą.

Tiksliau sakant, sargybinis šuo turėtų būti sargybos laikmatis, kuris yra grandinės struktūra, specialiai naudojama mikrovaldiklio programos veikimo būsenai stebėti. Pagrindinis principas yra toks: paleidus sargybos laikmatį, jis pradės skaičiuoti nuo 0, jei programa neišvalys jo laiku per nurodytą laiko intervalą, sargybos laikmatis iš naujo nustatys sistemą (prilygsta kompiuterio paleidimui iš naujo), kaip parodyta žemiau esančiame paveikslėlyje (nupieštas žodžiu, piešinys yra daugiau kiaušinio~):

Pristatykime paprastą sarginio šuns taikymo būdą: Kaip paleisti šunį? Kaip maitinti? Kas nutiks, jei jo nemaitinsite?

2. Sarginio šuns istorija(1) Įvadas į eksperimentą

Jei šuo šeriamas, sistema veikia normaliai; Jei šuns nemaitinate, sistema nuolat paleidžiama iš naujo.

(2) Programos eigos schema

(3) Eksperimentinis šaltinio kodas ir analizė/*
    Eksperimento aprašymas: Stebėjimo eksperimento metu, jei šuo nėra šeriamas, sistema nuolat paleidžiama iš naujo.
*/

#include

#define led1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
tuščiaxtal_init (tuščia)
{
  MIEGAS &= ~0x04;            //都上电
  Nors(! (MIEGO IR0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Pasirinkite 32 MHz kristalinį osciliatorių
  MIEGO REŽIMAS |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
tuščialed_init (tuščia)
{
  P1SEL =0x00;              P1 yra įprastas įvesties / išvesties prievadas
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3 išėjimas
  
  Šviesos diodas1 =1;                  //关闭所有LED
  LED2 =1;
  led3 =1;
  LED4 =1;
}

/*看门狗初始化
-------------------------------------------------------*/
tuščiawatchdog_Init(tuščia)   
{
  WDCTL =0x00;              //看门狗模式,时间间隔一秒
  WDCTL |=0x08;            //启动看门狗
}

/*喂狗程序
-------------------------------------------------------*/
tuščiaPėdų šuo(tuščia)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
tuščiaVėlavimas(tuščia)
{
  nepasirašytas intn;
  dėl(n =50000; n>0; n--);
  dėl(n =50000; n>0; n--);
  dėl(n =50000; n>0; n--);
  dėl(n =50000; n>0; n--);
  dėl(n =50000; n>0; n--);
  dėl(n =50000; n>0; n--);
  dėl(n =50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
tuščiapagrindinis(tuščia)
{
  xtal_init ();  
  led_init ();
  watchdog_Init();

  Delsa ();
  Šviesos diodas1 =0;         //点亮led1
  
  Nors(1)
  {
    Pėdų šuo();      Šuns šėrimo komanda (prisijungus sistema nenustatoma iš naujo, o maža lemputė nemirksi; Jei pažymėta, sistema ir toliau bus nustatyta iš naujo, o maža lemputė mirksės kas 1 sekundę)
  }
}

Kaip matote iš aukščiau pateikto šaltinio kodo, "Watch Dog" veikimo būdas yra labai paprastas, o visas procesas apima tik naują SFR, būtentWDCTL。Toliau pateikiamas konkretus CC2430 aprašymas kinų vadove:

Sarginių šunų naudojimą galima apibendrinti taip:Pasirinkite režimą → pasirinkite laikmačio intervalą → padėkite šunį → šerti šunį

(1) Pasirinkite režimą:

Sargybos laikmatis turi du režimus, būtent "sargo režimą" ir "laikmačio" režimą.

Laikmačio režimu jis prilygsta įprastam laikmačiui, o pasiekus laikmačio intervalą, jis sukels pertraukimą (jį galite rasti ioCC2430.h faile su pertraukimo vektoriumi WDT_VECTOR); Stebėjimo režimu, kai pasiekiamas suplanuotas intervalas, nėra jokių pertraukų, vietoj to į sistemą siunčiamas atstatymo signalas.

Šiame eksperimente jis praėjoWDCTL. REŽIMAS = 0, kad pasirinktumėte prieigos valdytojo režimą.

  (2) Pasirinkite suplanuotą intervalą:

Kaip parodyta aukščiau esančiame paveikslėlyje, galima rinktis iš keturių laikrodžio periodų, o testavimo patogumui pasirenkame 1 s laiko intervalą (t. y. užsakymą).WDCTL.INT=00)。

  (3) Paleiskite šunį:

UžsakytiWDCTL.LT=1, kad paleistumėte sargybos laikmatį.

  (4) Šerkite šunį:

Kai laikmatis įsijungia, jis pradedamas skaičiuoti nuo 0. Kol jo skaičius nepasiekia 32768 (t. Y. <1s), jei šunį šeriame tokiu kodu:

  WDCTL =0xa0;
  WDCTL =0x50;  

Tada laikmačio skaičiavimo vertė bus išvalyta iki 0, o tada jis vėl pradės skaičiuoti nuo 0x0000, o tai neleidžia siųsti atstatymo signalo, kuris pasireiškia kūrimo plokštėje: LED1 visada degs ir nemirksės;

Jei šuns nemaitinsime (t. Y. Komentuosime šį kodą), tada, kai laikmačio skaičius pasieks 32768, bus išleistas atstatymo signalas, o programa veiks nuo nulio, o tai pasireiškia kūrimo lentoje: LED1 nuolat mirksi, o mirksėjimo intervalas yra 1 s. (Pastaba: Šunų šėrimo programa turi griežtai atitikti aukščiau pateiktą kodą, o tvarka yra atvirkštinė / neteisinga / parašyta mažiau nevaidins vaidmens išvalant 0.) )

CC2430 patarimai
Dvi papildomos pastabos:
(1) Be to,Laikrodžio šuns režimasJei stebėjimo laikmatis įjungtas, 0 nustatymas į WDCTL.LT yra netinkamas (t. y. šis bitas negali atlikti laikmačio sustabdymo vaidmens);
(2) ĮLaikmačio režimas, galite parašyti 1 į WDCTL.CLR[0], kad išvalytumėte laikmatį; Įrašius 0 į įjungimo bitą WDCTL.LT, laikmatis bus sustabdytas, o įrašius 1 į įjungimo bitą, laikmatis bus paleistas iš naujo nuo 0x0000 įjungimo.


(4) Eksperimento rezultatai:

Jei pridėsite "FeedDog" funkciją, paleiskite kodą ir pastebėsite, kad LED1 visada dega (sistema nenustatoma iš naujo);

Jei komentuojate "FeedDog" funkciją, paleiskite kodą ir pastebėkite, kad LED1 mirksi kas 1 sekundę (sistema nustatoma kas 1 sekundę).

3. Išvada

Šiame skyriuje aprašomas stebėtojų laiko matavimo grandinių principas ir naudojimas. Praktiniame taikyme, jei reikalingas didelis patikimumas, sistemoje gali būti naudojamas sargas. Kai sistema dėl kokių nors priežasčių sugenda (ji nebegali maitinti šuns), šuo, kurio niekas nemaitina, loja: "Mokytojau, yra anomalija, yra anomalija! ”

Belaidžio jutiklių tinklo veikimo metu energijos suvartojimas yra labai svarbus našumo vertinimo aspektas. Kitame skyriuje aptarsime CC2430 sistemos miego režimą ir jo nutrauktą pažadinimo skambutį.






Ankstesnis:Zigbee kelionė (7): Keletas svarbių CC2430 pagrindinių eksperimentų - DMA perdavimas
Kitą:Zigbee kelionė (9): Keli svarbūs pagrindiniai CC2430 eksperimentai - sistemingas miegas ir nutrauktas budrumas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com