|
1. Ülemiste ja alumiste korruste ühendamine Ükskõik kui hea operatsioonisüsteem ka poleks, olgu see praegune Win7 või tulevane Win8 ja Win9, on alati olemas sinine ekraan, rääkimata väikesest mikrokontrollerist~ Ettearvamatud põhjused nagu elektrimüra, elektrikatkestus, elektrostaatiline laeng jne võivad põhjustada manussüsteemi ebanormaalset tööd. Täpsemalt peaks Watch Dog olema valvekoera taimer, mis on vooluringi struktuur, mida kasutatakse spetsiaalselt mikrokontrolleri programmi tööseisundi jälgimiseks. Põhipõhimõte on: pärast valvekoera taimeri käivitamist hakkab see loendama nullist, kui programm ei puhasta seda õigel ajal määratud ajavahemiku jooksul, lähtestab valvetaimer süsteemi (võrreldav arvuti taaskäivitamisega), nagu näidatud alloleval joonisel (Wordis joonistatud, joonis on rohkem munavalu~):
Tutvustame lihtsat valvekoera pealekandmise meetodit: Kuidas lasta koeral minna? Kuidas toita? Mis juhtub, kui sa teda ei toida? 2. Valvekoera lugu(1) Sissejuhatus eksperimendileKui koer on toidetud, töötab süsteem normaalselt; Kui sa koera ei toida, käivitub süsteem pidevalt. (2) Programmi vooskeem
(3) Eksperimentaalne lähtekood ja analüüs/*
Eksperimendi kirjeldus: Valvekoera katses, kui koera ei toideta, käivitub süsteem pidevalt uuesti.
*/
#include
#define juhtis1 P1_0
#define juhtis2 P1_1
#define juhtis3 P1_2
#define juhtis4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
tühixtal_init(tühi)
{ UNI &= ~0x04; //都上电
samal ajal(! (UNI &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Vali 32MHz kristall-ostsillaator UNI |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
tühiled_init(tühi)
{ P1SEL =0x00; P1 on tavaline I/O port P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 väljund
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
tühiwatchdog_Init(tühi)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
tühiFeetDog(tühi)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
tühiViivitus(tühi)
{
Allkirjastamata 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--);
}
/*主函数
-------------------------------------------------------*/
tühipea(tühi)
{ xtal_init(); led_init(); watchdog_Init();
Delay(); led1 =0; //点亮led1
samal ajal(1) { FeetDog(); Koera toitmise käsk (süsteem ei lähtestu pärast liitumist ja väike tuli ei vilgu; Kui see on märgistatud, jätkab süsteem lähtestumist ja väike tuli vilgub iga 1 sekundi järel) }
}
Nagu näete ülaltoodud lähtekoodist, on Watch Dogi töömeetod väga lihtne ning kogu protsess hõlmab ainult uut SFR-i, nimeltWDCTL。Järgmine on CC2430 konkreetne kirjeldus Hiina käsiraamatus:
Valvekoerte kasutamist võib kokku võtta järgmiselt:Vali režiim → vali taimeri intervall → pane koer → toita koera (1) Valikurežiim: Valvekoera taimeril on kaks režiimi: "valvekoera režiim" ja "taimer" režiim. Taimeri režiimis on see ekvivalentne tavalise taimeriga ning kui taimeri intervall on täis, tekib katkestus (leiad selle ioCC2430.h failist, kus katkestusvektor on WDT_VECTOR); Valvekoera režiimis, kui saavutatakse määratud intervall, katkestust ei esine, vaid saadetakse süsteemile lähtestussignaal. Selles eksperimendis see läbisWDCTL. MODE=0et valida väravahoidja režiim. (2) Vali ajastatud intervall: Nagu ülaloleval joonisel näidatud, on valida nelja kellaperioodi vahel ning mugavuse huvides valime ajavahemiku 1s (st järjekord).WDCTL.INT=00)。 (3) Vabasta koer: JärjekordWDCTL.EN=1Et käivitada valvekoera taimer. (4) Toida koera: Kui taimer käivitub, hakkab see loendama nullist. Enne kui koera arv jõuab 32768-ni (st <1s), kui toidame koera järgmise koodiga: WDCTL =0xa0; WDCTL =0x50;
Seejärel kustutatakse taimeri loendusväärtus nulliks ja see hakkab uuesti lugema 0x0000, mis takistab lähtestussignaali saatmist, mis ilmub arendusplaadil: LED1 on alati põlemas ega vilgu; Kui me koera ei toida (st ei kommenteeri seda koodi), siis kui taimerite arv jõuab 32768-ni, väljastatakse lähtestussignaal ja programm hakkab nullist käivituma, mis avaldub arendusplaadil: LED1 vilgub pidevalt ja vilkumisintervall on 1s. (Märkus: Koerte toitmise programm peab olema rangelt kooskõlas ülaltoodud koodiga ning järjekord on pööratud/vale/kirjutatud vähem ei mängi rolli 0 puhastamisel.) ) CC2430 näpunäitedKaks lisamärkust: (1) SisseValvekoera režiimKui valvetaimer on lubatud, on 0 seadistamine WDCTL.EN-ile kehtetu (st see bitt ei saa taimeri peatada); (2) SisseTaimeri režiim, saate kirjutada 1 aadressile WDCTL.CLR[0], et taimer tühjendada; 0 kirjutamine lubamisbitile WDCTL.EN peatab taimeri, samal ajal kui 1 kirjutamine lubamisbitile taaskäivitab taimeri 0x0000 algusest.
(4) Eksperimentaalsed tulemused:Kui lisad FeedDog funktsiooni, käivitad koodi ja leiad, et LED1 on alati sisse lülitatud (süsteem ei lähtestu); Kui kommenteerid FeedDog funktsiooni, käivita kood ja leia, et LED1 vilgub iga 1 sekundi tagant (süsteem lähtestab iga 1 sekundi järel). 3. KokkuvõteSee osa kirjeldab valvekoera ajastusahelate põhimõtet ja kasutust. Praktilistes rakendustes, kui on vaja kõrget töökindlust, saab süsteemis kasutada valvekoera. Kui süsteem mingil põhjusel kokku kukub (koera enam toita ei saa), haugub koer, keda keegi ei toida: "Meister, on anomaalia, on anomaalia! ” Traadita sensorivõrgu puhul on selle tööaegne energiatarve jõudluse hindamisel kriitilise tähtsusega. Järgmises osas räägime CC2430 süsteemi unest ja selle katkestatud äratuskõnest.
|