Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 9306|Odgovoriti: 0

Zigbee Journey (8): Več pomembnih osnovnih eksperimentov CC2430 - watchdogs

[Kopiraj povezavo]
Objavljeno na 30. 10. 2014 23:23:37 | | | |
1. Povezava zgornje in spodnje ravni

Ne glede na to, kako dober je operacijski sistem, naj bo to trenutni Win7 ali prihodnji Win8 in Win9, bo vedno prisoten BlueScreen, da o majhnem mikrokrmilniku niti ne govorimo~ Nepredvidljivi razlogi, kot so električni šum, izpad elektrike, elektrostatični praznici itd., lahko povzročijo nenormalno delovanje vgrajenega sistema.

Watch Dog naj bi bil natančneje watchdog timer, kar je vezje, posebej uporabljeno za spremljanje stanja delovanja mikrokrmilnika. Osnovno načelo je: po zagonu watchdog časovnika začne šteti od 0, če program časovnika ne počisti pravočasno v določenem časovnem intervalu, watchdog časovnik ponastavi sistem (kar je enakovredno ponovnemu zagonu računalnika), kot je prikazano na spodnji sliki (risba je bolj nadležna~):

Predstavimo preprosto metodo uporabe psa čuvaja: Kako spustiti psa? Kako hraniti? Kaj se bo zgodilo, če ga ne nahraniš?

2. Zgodba o čuvaju(1) Uvod v eksperiment

Če je pes hranjen, sistem deluje normalno; Če psa ne nahraniš, se sistem znova zažene.

(2) Shema poteka programa

(3) Eksperimentalna izvorna koda in analiza/*
    Opis eksperimenta: V eksperimentu z nadzornikom, če pes ni nahranjen, se sistem znova zažene.
*/

#include

#define vodil1 P1_0         
#define vod2 P1_1         
#define Led3 P1_2         
#define vodil 4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
prazninaxtal_init(praznina)
{
  SPANJE &= ~0x04;            //都上电
  medtem ko(! (SPANJE &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Izberite 32MHz kristalni oscilator
  SPANJE |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
prazninaled_init(praznina)
{
  P1SEL =0x00;              P1 je običajen vhodno-izhodni priključek
  P1DIR |=0x0F;              izhod P1.0 P1.1 P1.2 P1.3
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

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

/*喂狗程序
-------------------------------------------------------*/
prazninaFeetDog(praznina)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
prazninaZakasnitev(praznina)
{
  nepodpisano intn;
  za(n=50000; n>0; n--);
  za(n=50000; n>0; n--);
  za(n=50000; n>0; n--);
  za(n=50000; n>0; n--);
  za(n=50000; n>0; n--);
  za(n=50000; n>0; n--);
  za(n=50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
prazninamain(praznina)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 =0;         //点亮led1
  
  medtem ko(1)
  {
    FeetDog();      Ukaz za hranjenje psa (sistem se po priključitvi ne ponastavi in majhna lučka ne utripa; Če je označen, se sistem še naprej ponastavlja, majhna lučka pa utripa vsakih 1 sekundo)
  }
}

Kot lahko vidite iz zgornje izvorne kode, je način delovanja Watch Doga zelo preprost, celoten postopek pa vključuje le nov SFR, in sicerWDCTL。Spodaj je specifičen opis CC2430 v kitajskem priročniku:

Uporabo nadzornikov lahko povzamemo kot:Izberi način → izberi interval časovnika → postavi psa, → ga hrani

(1) Izberi način:

Watchdog timer ima dva načina, in sicer "watchdog način" in "timer" način.

V načinu časovnika je ekvivalenten običajnemu časovniku, in ko doseže interval časovnika, pride do prekinitve (najdete jo v datoteki ioCC2430.h z vektorjem prekinitve WDT_VECTOR); V načinu watchdog, ko je dosežen načrtovani interval, ni prekinitve, temveč se sistemu pošlje signal za ponastavitev.

V tem eksperimentu je prestalWDCTL. MODE=0za izbiro načina Gatekeeper.

  (2) Izberite načrtovani interval:

Kot je prikazano na zgornji sliki, so na voljo štiri časovna obdobja, za lažje testiranje pa izberemo časovni interval 1 (tj. vrstni red).WDCTL.INT=00)。

  (3) Spusti psa:

RedWDCTL.EN=1Za začetek časovnika Watchdog.

  (4) Nahranite psa:

Ko se časovnik začne, začne šteti od 0. Preden njegovo število doseže 32768 (tj. <1s), če psa nahranimo z naslednjo kodo:

  WDCTL =0xa0;
  WDCTL =0x50;  

Nato se števec časovnika počisti na 0, nato pa se začne šteti od 0x0000, kar prepreči pošiljanje signala za ponastavitev, ki se pokaže na razvojni plošči: LED1 bo vedno prižgan in ne bo utripal;

Če psa ne nahranimo (tj. ne komentiramo te kode), ko števec časovnika doseže 32768, se sproži signal za ponastavitev in program se začne znova, kar se kaže na razvojni plošči: LED1 nenehno utripa, interval utripanja pa je 1s. (Opomba: Program hranjenja psov mora biti strogo skladen z zgornjo kodo, in če je naročilo obrnjeno/napačno/zapisano, manj ne bo vplivalo na odstranitev 0.) )

Nasveti za CC2430
Dve dodatni opombi:
(1) VNačin Watch DogČe je časovnik watchdog omogočen, je nastavitev 0 na WDCTL.EN neveljavna (tj. ta bit ne more igrati vloge ustavitve časovnika);
(2) VNačin časovnika, lahko zapišete 1 v WDCTL.CLR[0], da počistite časovnik; Zapisovanje 0 v enable bit WDCTL.EN ustavi časovnik, medtem ko zapisovanje 1 v enable bit ponovno zažene časovnik od 0x0000 naprej.


(4) Eksperimentalni rezultati:

Če dodate funkcijo FeedDog, zaženete kodo in ugotovite, da je LED1 vedno prižgan (sistem se ne ponastavi);

Če vpišete funkcijo FeedDog, zaženite kodo in ugotovite, da LED1 utripa vsakih 1 sekundo (sistem se ponastavi vsakih 1 sekundo).

3. Zaključek

Ta razdelek opisuje načelo in uporabo časovnih vezij watchdog. V praktičnih aplikacijah, če je potrebna visoka zanesljivost, se v sistemu lahko uporabi watchdog. Ko sistem iz kakršnegakoli razloga odpove (ne more več hraniti psa), pes, ki ga nihče ne hrani, zalaja: "Mojster, obstaja anomalija, obstaja anomalija! ”

Pri brezžičnem senzorskem omrežju je poraba energije med izvajanjem ključen vidik ocenjevanja zmogljivosti. V naslednjem poglavju bomo obravnavali sistemsko spanjenost CC2430 in njegovo prekinjeno prebujanje.






Prejšnji:Zigbee Journey (7): Več pomembnih osnovnih eksperimentov CC2430 - prenos DMA
Naslednji:Zigbee Journey (9): Več pomembnih osnovnih eksperimentov CC2430 – sistematično spanje in prekinjeno budnost
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com