Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 9306|Vastaus: 0

Zigbee Journey (8): Useita tärkeitä CC2430-peruskokeita – vahtikoirat

[Kopioi linkki]
Julkaistu 30.10.2014 23.23.37 | | | |
1. Ylä- ja alakerrosten yhdistäminen

Riippumatta siitä, kuinka hyvä käyttöjärjestelmä on, olipa se nykyinen Win7 tai tuleva Win8 ja Win9, BlueScreen on aina olemassa, puhumattakaan pienestä mikrokontrollerista~ Arvaamattomat syyt, kuten sähköhäiriö, sähkökatko, sähköstaattinen purkaus jne., voivat aiheuttaa sulautetun järjestelmän epänormaalin toiminnan.

Tarkalleen ottaen Watch Dogin tulisi olla watchdog-ajastin, joka on piirirakenne, jota käytetään erityisesti mikro-ohjainohjelman toiminnan seuraamiseen. Perusperiaate on: kun watchdog-ajastin käynnistetään, se alkaa laskea nollasta, ja jos ohjelma ei tyhjennä sitä ajoissa määritellyn aikavälin puitteissa, watchdog-ajastin nollaa järjestelmän (vastaa tietokoneen uudelleenkäynnistystä), kuten alla olevassa kuvassa (piirros Wordilla, piirros on enemmän eggache~):

Esittelemme yksinkertaisen vahtikoiran levitysmenetelmän: Kuinka päästää koira irti? Miten ruokkia? Mitä tapahtuu, jos et ruoki sitä?

2. Vahtikoiran tarina(1) Johdanto kokeeseen

Jos koira saa ruokaa, järjestelmä toimii normaalisti; Jos et ruoki koiraa, järjestelmä käynnistyy jatkuvasti.

(2) Ohjelman vuokaavio

(3) Kokeellinen lähdekoodi ja analyysi/*
    Kokeen kuvaus: Vahtikoirakokeessa, jos koiraa ei ruokita, järjestelmä käynnistyy uudelleen.
*/

#include

#define johti1 P1_0         
#define led2 P1_1         
#define johti 3 P1_2         
#define johti 4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
voidxtal_init(void)
{
  UNI &= ~0x04;            //都上电
  kun(! (UNI &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Valitse 32MHz:n kideoskillaattori
  UNI |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
voidled_init(void)
{
  P1SEL =0x00;              P1 on tavallinen I/O-portti
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3 ulostulo
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

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

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

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
voidViive(void)
{
  Allekirjoittamaton 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--);
}

/*主函数
-------------------------------------------------------*/
voidpää(void)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 =0;         //点亮led1
  
  kun(1)
  {
    FeetDog();      Koirien ruokintakomento (järjestelmä ei nollaudu liittymisen jälkeen, eikä pieni valo vilku; Jos se on merkitty, järjestelmä jatkaa nollautumista ja pieni valo vilkkuu joka sekunnin välein)
  }
}

Kuten yllä olevasta lähdekoodista näet, Watch Dogin toimintatapa on hyvin yksinkertainen, ja koko prosessi sisältää vain uuden SFR:n, nimittäinWDCTL。Seuraavassa on tarkka kuvaus CC2430:sta kiinalaisessa käsikirjassa:

Valvontakoirien käyttö voidaan tiivistää seuraavasti:Valitse tila → valitse ajastinväli → laita koira → ruokkia koiraa

(1) Valitse tila:

Watchdog-ajastimella on kaksi tilaa, nimittäin "watchdog mode" ja "timer"-tila.

Ajastintilassa se vastaa normaalia ajastinta, ja kun ajastinväli saavutetaan, se tuottaa keskeytyksen (löydät sen ioCC2430.h-tiedostosta, jonka keskeytysvektori on WDT_VECTOR); Valvontatilassa, kun aikataulutettu väli saavutetaan, keskeytystä ei ole, vaan järjestelmälle lähetetään nollaussignaali.

Tässä kokeessa se meni läpiWDCTL. MODE=0valitakseen portinvartija-tilan.

  (2) Valitse aikataulutettu väli:

Kuten yllä olevasta kuvasta on esitetty, valittavana on neljä kellojaksoa, ja testauksen helpottamiseksi valitsemme aikaväliksi 1s (eli järjestyksen).WDCTL.INT=00)。

  (3) Päästä koira irti:

JärjestysWDCTL.EN=1Käynnistää vahtikoiran ajastin.

  (4) Ruoki koiraa:

Kun ajastin käynnistyy, se alkaa laskea nollasta. Ennen kuin sen määrä saavuttaa 32768 (eli <1s), jos ruokimme koiraa seuraavalla koodilla:

  WDCTL =0xa0;
  WDCTL =0x50;  

Sitten ajastimen lukumääräarvo tyhjennetään nollaan, ja se alkaa laskea 0x0000 uudestaan, mikä estää palautussignaalin lähettämisen, joka näkyy kehityskortilla: LED1 on aina päällä eikä vilkku;

Jos emme ruoki koiraa (eli kommentoi tätä koodia), niin kun ajastinmäärä saavuttaa 32768, käynnistyy nollaussignaali ja ohjelma käynnistyy alusta alkaen, mikä näkyy kehityskortilla: LED1 vilkkuu jatkuvasti ja välkkymisväli on 1s. (Huomautus: Koiran ruokintaohjelman on oltava täysin yllättävän koodin mukainen, eikä järjestys käännetty/väärin/kirjoitettu vähemmän ei vaikuta nollan puhdistamiseen.) )

CC2430-vinkit
Kaksi lisähuomautusta:
(1) SisälläVahtikoiratilaJos watchdog-ajastin on otettu käyttöön, 0:n asettaminen WDCTL.EN:ksi on virheellinen (eli tämä bitti ei voi pysäyttää ajastinta);
(2) SisälläAjastintila, voit kirjoittaa 1 osoitteeseen WDCTL.CLR[0] tyhjentääksesi ajastimen; Kirjoittamalla 0 enable bittiin WDCTL.EN ajastin pysäytetään, kun taas kirjoittamalla 1 enable bitille ajastimen uudelleen 0x0000 eteenpäin.


(4) Kokeelliset tulokset:

Jos lisäät FeedDog-toiminnon, suoritat koodin ja huomaat, että LED1 on aina päällä (järjestelmä ei nollaudu);

Jos mainitset FeedDog-toiminnon, suorita koodi ja huomaa, että LED1 vilkkuu 1 sekunnin välein (järjestelmä nollautuu joka 1 sekunti).

3. Johtopäätös

Tässä osiossa kuvataan valvontalaitteiden ajoituspiirien periaate ja käyttötarkoitus. Käytännön sovelluksissa, jos tarvitaan korkeaa luotettavuutta, vahtikoiraa voidaan käyttää järjestelmässä. Kun järjestelmä jostain syystä menee alas (se ei voi enää ruokkia koiraa), koira, jota kukaan ei ruoki, haukkuu: "Isäntä, on poikkeama, on poikkeama! ”

Langattomalle anturiverkolle sen ajonaikainen virrankulutus on olennainen osa suorituskyvyn arviointia. Seuraavassa osiossa käsittelemme CC2430-järjestelmän lepotilaa ja sen keskeytettyä herätyskelloa.






Edellinen:Zigbee Journey (7): Useita tärkeitä CC2430-peruskokeita – DMA:n siirto
Seuraava:Zigbee Journey (9): Useita tärkeitä perus CC2430-kokeita – systemaattinen uni ja keskeytetty valveillaolo
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com