Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 9306|Antwoord: 0

Zigbee Journey (8): Verschillende belangrijke CC2430 basisexperimenten - waakhonden

[Link kopiëren]
Geplaatst op 30-10-2014 23:23:37 | | | |
1. Het verbinden van de boven- en benedenverdiepingen

Hoe goed het besturingssysteem ook is, of het nu het huidige Win7 is of de toekomstige Win8 en Win9, er zal altijd een BlueScreen zijn, om nog maar te zwijgen van een kleine microcontroller~ Onvoorspelbare oorzaken zoals elektrische ruis, stroomuitval, elektrostatische ontlading, enzovoort, kunnen abnormale werking van het embedded systeem veroorzaken.

De Watch Dog zou om precies te zijn een watchdog-timer moeten zijn, een schakelingsstructuur die speciaal wordt gebruikt om de loopstatus van het microcontrollerprogramma te monitoren. Het basisprincipe is: na het starten van de watchdog-timer begint deze vanaf 0 te tellen; als het programma deze niet op tijd binnen het opgegeven tijdsinterval weet te wissen, zal de watchdog-timer het systeem resetten (gelijk aan het herstarten van de computer), zoals te zien is in de onderstaande figuur (getekend in woord, de tekening is meer eggache~):

Laten we een eenvoudige methode voor het aanbrengen van waakhonden introduceren: Hoe laat je een hond gaan? Hoe voed je je? Wat gebeurt er als je hem niet voedt?

2. Het verhaal van de waakhond(1) Inleiding tot het experiment

Als de hond gevoerd wordt, draait het systeem normal; Als je de hond niet voert, blijft het systeem opnieuw starten.

(2) Programmastroomdiagram

(3) Experimentele broncode en analyse/*
    Beschrijving van het experiment: In het waakhond-experiment, als de hond niet gevoerd wordt, start het systeem steeds opnieuw op.
*/

#include

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

/*系统时钟初始化
-------------------------------------------------------*/
leegtextal_init(leegte)
{
  SLAAP &= ~0x04;            //都上电
  terwijl(! (SLAAP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Kies een 32MHz kristaloscillator.
  SLAAP |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
leegteled_init(leegte)
{
  P1SEL =0x00;              P1 is de normale I/O-poort
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3 uitgang
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

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

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

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

/*主函数
-------------------------------------------------------*/
leegtehoofd(leegte)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 =0;         //点亮led1
  
  terwijl(1)
  {
    FeetDog();      Hondenvoercommando (het systeem reset niet na het joinen en het kleine lampje knippert niet; Als het wordt geannoteerd, blijft het systeem resetten en knippert het kleine lampje elke 1 seconde)
  }
}

Zoals je kunt zien uit de broncode hierboven, is de bedieningsmethode van Watch Dog heel eenvoudig, en het hele proces omvat alleen een nieuwe SFR, namelijkWDCTL。Hieronder volgt een specifieke beschrijving van CC2430 in het Chinese handboek:

Het gebruik van waakhonden kan worden samengevat als:Selecteer modus → selecteer timerinterval → zet de hond → voer de hond

(1) Selecteer modus:

De watchdog-timer heeft twee modi, namelijk "watchdog-modus" en "timer"-modus.

In timermodus is het gelijk aan een normale timer, en wanneer het timerinterval is bereikt, produceert het een interrupt (je kunt het vinden in het ioCC2430.h-bestand met een interruptvector van WDT_VECTOR); In watchdog-modus is er bij het bereiken van een gepland interval geen onderbreking, maar wordt er een resetsignaal naar het systeem gestuurd.

In dit experiment slaagde hetWDCTL. MODE=0Om de Gatekeeper-modus te selecteren.

  (2) Selecteer het geplande interval:

Zoals te zien is in de bovenstaande figuur, zijn er vier klokperiodes om uit te kiezen, en voor het gemak van testen kiezen we het tijdsinterval van 1s (oftewel volgorde).WDCTL.INT=00)。

  (3) Laat de hond los:

OrdeWDCTL.EN=1Om de watchdog-timer te starten.

  (4) Voer de hond:

Zodra de timer begint, begint hij te tellen vanaf 0. Voordat de telling 32768 bereikt (d.w.z. <1s), als we de hond voeren met de volgende code:

  WDCTL =0xa0;
  WDCTL =0x50;  

Daarna wordt de telwaarde van de timer naar 0 gehaald, en begint hij weer te tellen vanaf 0x0000, waardoor het niet een resetsignaal kan uitzenden, dat zich manifesteert op het ontwikkelbord: LED1 blijft altijd aan en knippert niet;

Als we de hond niet voeren (dus deze code niet uitspreken), dan wordt er bij het aantal timer 32768 een resetsignaal uitgegeven en draait het programma vanaf nul, wat zichtbaar is op het ontwikkelbord: LED1 knippert constant en het knipperingsinterval is 1s. (Opmerking: Het hondenvoerprogramma moet strikt consistent zijn met bovenstaande code, en de volgorde als het omgekeerd/fout/minder is geschreven speelt geen rol bij het vrijmaken van 0.) )

CC2430 Tips
Twee extra opmerkingen:
(1) InWatchdog-modusAls de watchdog-timer is ingeschakeld, is het instellen van 0 op WDCTL.EN ongeldig (dit bit kan de rol van het stoppen van de timer niet vervullen);
(2) InTimermodus, je kunt 1 schrijven naar WDCTL.CLR[0] om de timer te wissen; Het inschakelen van 0 op het enable bit WDCTL.EN stopt de timer, terwijl het schrijven van 1 naar het enable bit de timer vanaf 0x0000 opnieuw start.


(4) Experimentele resultaten:

Als je de FeedDog-functie toevoegt, de code uitvoert, en ontdekt dat LED1 altijd aan staat (het systeem reset niet);

Als je de FeedDog-functie uitsorteert, voer dan de code uit en zie dat LED1 op 1s interval knippert (het systeem reset elke 1s).

3. Conclusie

Deze sectie beschrijft het principe en het gebruik van watchdog-tijdsschakelingen. In praktische toepassingen kan, als hoge betrouwbaarheid vereist is, de watchdog in het systeem worden gebruikt. Wanneer het systeem om een of andere reden uitvalt (het kan de hond niet meer voeren), zal de hond die niemand voedt blaffen: "Meester, er is een anomalie, er is een anomalie! ”

Voor een draadloos sensornetwerk is het runtime-energieverbruik een cruciaal aspect van prestatiebeoordeling. In het volgende deel bespreken we de CC2430-systeemslaap en de onderbroken wekroep.






Vorig:Zigbee Journey (7): Verschillende belangrijke CC2430 basisexperimenten - DMA-transmissie
Volgend:Zigbee Journey (9): Verschillende belangrijke basisexperimenten met CC2430 - systematische slaap en onderbroken wakkerheid
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com