Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 9306|Svare: 0

Zigbee Journey (8): Flere viktige CC2430 grunnleggende eksperimenter – vaktbikkjer

[Kopier lenke]
Publisert på 30.10.2014 23:23:37 | | | |
1. Sammenkobling av øvre og nedre nivåer

Uansett hvor godt operativsystemet er, enten det er dagens Win7 eller fremtidige Win8 og Win9, vil det alltid være en BlueScreen, for ikke å snakke om en liten mikrokontroller~ Uforutsigbare årsaker som elektrisk støy, strømbrudd, elektrostatisk utladning osv. kan forårsake unormal drift av det innebygde systemet.

Watch Dog, for å være presis, bør være en watchdog-timer, som er en kretsstruktur spesielt brukt for å overvåke kjørestatusen til mikrokontrollerprogrammet. Grunnprinsippet er: etter å ha startet watchdog-timeren, vil den begynne å telle fra 0, hvis programmet ikke klarer å rydde den innen det angitte tidsintervallet, vil watchdog-timeren tilbakestille systemet (tilsvarende å starte datamaskinen på nytt), som vist i figuren under (tegnet i Word, tegningen er mer Eggache~):

La oss introdusere en enkel metode for bruk av vakthund: Hvordan slippe en hund fri? Hvordan mate? Hva skjer hvis du ikke mater den?

2. Historien om vakthunden(1) Introduksjon til eksperimentet

Hvis hunden blir matet, fungerer systemet normalt; Hvis du ikke mater hunden, starter systemet stadig på nytt.

(2) Programflytskjema

(3) Eksperimentell kildekode og analyse/*
    Eksperimentbeskrivelse: I vakthund-eksperimentet, hvis hunden ikke får mat, starter systemet stadig på nytt.
*/

#include

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

/*系统时钟初始化
-------------------------------------------------------*/
Tomromxtal_init(Tomrom)
{
  SOV &= ~0x04;            //都上电
  mens(! (SØVN &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Velg en 32 MHz krystalloscillator
  SØVN |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Tomromled_init(Tomrom)
{
  P1SEL =0x00;              P1 er den vanlige I/O-porten
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3-utgang
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

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

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

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
TomromForsinkelse(Tomrom)
{
  Usignert Intn;
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
Tomromhoved(Tomrom)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 =0;         //点亮led1
  
  mens(1)
  {
    FeetDog();      Hundematingskommando (systemet tilbakestilles ikke etter tilkobling, og det lille lyset blinker ikke; Hvis det er annotert, vil systemet fortsette å tilbakestille, og det lille lyset vil blinke hvert 1. sekund)
  }
}

Som du kan se fra kildekoden ovenfor, er driftsmetoden til Watch Dog veldig enkel, og hele prosessen involverer kun en ny SFR, nemligWDCTL。Følgende er en spesifikk beskrivelse av CC2430 i den kinesiske manualen:

Bruken av vaktbikkjer kan oppsummeres som:Velg modus → velg tidsintervall → sett hunden → mat hunden

(1) Velg modus:

Watchdog-timeren har to moduser, nemlig "watchdog-modus" og "timer"-modus.

I timer-modus tilsvarer det en vanlig timer, og når timerintervallet nås, vil det produsere et avbrudd (du finner det i ioCC2430.h-filen med en avbruddsvektor på WDT_VECTOR); I vakthundmodus, når et planlagt intervall nås, er det ingen avbrytelse, i stedet sendes et tilbakestillingssignal til systemet.

I dette eksperimentet bestod denWDCTL. MODE=0for å velge portvoktermodus.

  (2) Velg det planlagte intervallet:

Som vist i figuren ovenfor, finnes det fire klokkeperioder å velge mellom, og for å teste bekvemmelighet velger vi tidsintervallet 1 sekunder (dvs. rekkefølge).WDCTL.INT=00)。

  (3) Slipp hunden fri:

RekkefølgeWDCTL.EN=1For å starte vakthund-timeren.

  (4) Gi hunden mat:

Når timeren starter, begynner den å telle fra 0. Før tellingen når 32 768 (dvs. <1s), hvis vi mater hunden med følgende kode:

  WDCTL =0xa0;
  WDCTL =0x50;  

Deretter vil telleverdien på timeren bli slettet til 0, og deretter vil den begynne å telle fra 0x0000 igjen, noe som hindrer den i å sende et reset-signal, som manifesteres på utviklingskortet: LED1 vil alltid være på og vil ikke blinke;

Hvis vi ikke mater hunden (altså kommenterer denne koden), vil et tilbakestillingssignal bli sendt når timertellingen når 32768, og programmet vil starte fra bunnen av, noe som vises på utviklingskortet: LED1 blinker konstant, og blinkintervallet er 1 sekunder. (Merk: Hundefôringsprogrammet må være strengt konsistent med koden ovenfor, og rekkefølgen reversert/feil/skrevet mindre vil ikke spille noen rolle i å fjerne 0.) )

CC2430-tips
To tilleggsnotater:
(1) IVakthundmodusHvis watchdog-timeren er aktivert, er det ugyldig å sette 0 til WDCTL.EN (dvs. denne biten kan ikke fungere som å stoppe timeren);
(2) ITimermodus, du kan skrive 1 til WDCTL.CLR[0] for å fjerne timeren; Å skrive 0 til aktiveringsbiten WDCTL.EN vil stoppe timeren, mens å skrive 1 til aktiveringsbiten vil starte timeren på nytt fra 0x0000 på.


(4) Eksperimentelle resultater:

Hvis du legger til FeedDog-funksjonen, kjører koden, og oppdager at LED1 alltid er på (systemet tilbakestilles ikke);

Hvis du kommenterer FeedDog-funksjonen, kjør koden og finn at LED1 blinker med 1 sekunds intervaller (systemet tilbakestilles hvert 1. sekund).

3. Konklusjon

Denne seksjonen beskriver prinsippet og bruken av vakthund-tidskretser. I praktiske anvendelser, dersom høy pålitelighet kreves, kan vakthunden brukes i systemet. Når systemet går ned av en eller annen grunn (det kan ikke mate hunden lenger), vil hunden som ingen mater bjeffe: «Mester, det er en anomali, det er en anomali! ”

For et trådløst sensornettverk er strømforbruket under kjøring et kritisk aspekt ved ytelsesevaluering. I neste seksjon skal vi diskutere CC2430 systemdvale og dens avbrutte vekker.






Foregående:Zigbee Journey (7): Flere viktige grunnleggende CC2430-eksperimenter - DMA-overføring
Neste:Zigbee Journey (9): Flere viktige grunnleggende CC2430-eksperimenter – systematisk søvn og avbrutt våkenhet
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com