|
1. Augšējā un apakšējā līmeņa savienošana Neatkarīgi no tā, cik laba ir operētājsistēma, neatkarīgi no tā, vai tā ir pašreizējā Win7 vai nākotnes Win8 un Win9, vienmēr būs BlueScreen, nemaz nerunājot par nelielu mikrokontrolleri ~ Neparedzami iemesli, piemēram, elektriskais troksnis, strāvas padeves pārtraukums, elektrostatiskā izlāde utt., var izraisīt nenormālu iegultās sistēmas darbību. Precīzāk, sargsunim jābūt sargsuņa taimerim, kas ir ķēdes struktūra, ko īpaši izmanto, lai uzraudzītu mikrokontrollera programmas darbības statusu. Pamatprincips ir šāds: pēc sargsuņa taimera palaišanas tas sāks skaitīt no 0, ja programma to nenotīrīs noteiktajā laika intervālā, sargsuņa taimeris atiestatīs sistēmu (līdzvērtīgs datora restartēšanai), kā parādīts zemāk redzamajā attēlā (uzzīmēts vārdā, zīmējums ir vairāk olu sāpes~):
Iepazīstināsim ar vienkāršu sargsuņa lietošanas metodi: Kā ļaut sunim iet? Kā barot? Kas notiks, ja jūs to nebarosiet? 2. Sargsuņa stāsts(1) Ievads eksperimentāJa suns tiek barots, sistēma darbojas normāli; Ja jūs nebarojat suni, sistēma turpina restartēties. (2) Programmas plūsmas diagramma
(3) Eksperimentālais pirmkods un analīze/*
Eksperimenta apraksts: Sargsuņa eksperimentā, ja suns netiek barots, sistēma turpina restartēties.
*/
#include
#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
Tukšumsxtal_init (Tukšums)
{ MIEGS &= ~0x04; //都上电
kamēr(! (MIEGS &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Izvēlieties 32MHz kristāla oscilatoru MIEGS |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
Tukšumsled_init (Tukšums)
{ P1SEL =0x00; P1 ir parastais I/O ports P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 izeja
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
Tukšumswatchdog_Init (Tukšums)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
TukšumsPēdu suns(Tukšums)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
TukšumsKavēšanās(Tukšums)
{
bez paraksta intn;
par(n =50000; n>0; n--);
par(n =50000; n>0; n--);
par(n =50000; n>0; n--);
par(n =50000; n>0; n--);
par(n =50000; n>0; n--);
par(n =50000; n>0; n--);
par(n =50000; n>0; n--);
}
/*主函数
-------------------------------------------------------*/
Tukšumsgalvenais(Tukšums)
{ xtal_init (); led_init (); watchdog_Init ();
Kavēšanās (); led1 =0; //点亮led1
kamēr(1) { Pēdu suns (); Suņu barošanas komanda (sistēma pēc pievienošanās netiek atiestatīta, un mazā gaisma nemirgo; Ja tas ir anotēts, sistēma turpinās atiestatīt, un mazā gaisma mirgos ik pēc 1 sekundes) }
}
Kā redzat no iepriekš minētā avota koda, Watch Dog darbības metode ir ļoti vienkārša, un viss process ietver tikai jaunu SFR, protiWDCTL。Tālāk ir sniegts konkrēts CC2430 apraksts ķīniešu rokasgrāmatā:
Sargsuņu izmantošanu var apkopot kā:Izvēlieties režīmu → atlasiet taimera intervālu → ievietojiet suni → barot suni (1) Izvēlieties režīmu: Sargsuņa taimerim ir divi režīmi, proti, "sargsuņa režīms" un "taimeris" režīms. Taimera režīmā tas ir līdzvērtīgs parastam taimeri, un, sasniedzot taimera intervālu, tas radīs pārtraukumu (to var atrast failā ioCC2430.h ar pārtraukuma vektoru WDT_VECTOR); Sargsuņa režīmā, kad tiek sasniegts plānotais intervāls, nav pārtraukuma, tā vietā sistēmai tiek nosūtīts atiestatīšanas signāls. Šajā eksperimentā tas pagājaWDCTL. REŽĪMS=0, lai atlasītu vārtsarga režīmu. (2) Izvēlieties plānoto intervālu: Kā parādīts iepriekš redzamajā attēlā, ir četri pulksteņa periodi, no kuriem izvēlēties, un testēšanas ērtībai mēs izvēlamies laika intervālu 1s (t.i., secība).WDCTL.INT=00)。 (3) Atbrīvojiet suni: PasūtītWDCTL.LV=1, lai iedarbinātu sargsuņa taimeri. (4) Barojiet suni: Kad taimeris sākas, tas sāk skaitīt no 0. Pirms tā skaits sasniedz 32768 (t.i., <1s), ja mēs barojam suni ar šādu kodu: WDCTL =0xa0; WDCTL =0x50;
Tad taimera skaitīšanas vērtība tiks notīrīta līdz 0, un pēc tam tā atkal sāks skaitīt no 0x0000, kas neļauj tai nosūtīt atiestatīšanas signālu, kas izpaužas izstrādes panelī: LED1 vienmēr būs ieslēgts un nemirgos; Ja mēs nebarojam suni (t.i., komentējam šo kodu), tad, kad taimera skaits sasniedz 32768, tiks izdots atiestatīšanas signāls, un programma darbosies no nulles, kas izpaužas izstrādes panelī: LED1 pastāvīgi mirgo, un mirgojošais intervāls ir 1s. (Piezīme: suņu barošanas programmai ir stingri jāatbilst iepriekš minētajam kodam, un secība ir apgriezta / nepareiza / uzrakstīta mazāk nebūs nozīmes 0 notīrīšanā.) ) CC2430 padomiDivas papildu piezīmes: (1)Skatīties suņa režīmuJa sargsuņa taimeris ir iespējots, iestatījums 0 uz WDCTL.EN nav derīgs (t.i., šis bits nevar spēlēt taimera apturēšanas lomu); (2) IekšāTaimera režīms, varat rakstīt 1 uz WDCTL.CLR[0], lai notīrītu taimeri; Ierakstot 0 uz iespējoto bitu WDCTL.LV, taimeris tiks apturēts, bet, ierakstot 1 uz iespējoto bitu, taimeris tiks restartēts no 0x0000.
(4) Eksperimenta rezultāti:Ja pievienojat funkciju FeedDog, palaidiet kodu un konstatējiet, ka LED1 vienmēr ir ieslēgts (sistēma netiek atiestatīta); Ja komentējat funkciju FeedDog, palaidiet kodu un konstatējiet, ka LED1 mirgo ar 1 sekundes intervālu (sistēma tiek atiestatīta ik pēc 1 sekundes). 3. SecinājumsŠajā sadaļā aprakstīts sargsuņu laika ķēžu princips un izmantošana. Praktiskos pielietojumos, ja nepieciešama augsta uzticamība, sistēmā var izmantot sargsuni. Kad sistēma kāda iemesla dēļ pazūd (tā vairs nevar barot suni), suns, kuru neviens nebaro, mizos: "Meistars, ir anomālija, ir anomālija! ” Bezvadu sensoru tīklam tā darbības laika enerģijas patēriņš ir kritisks veiktspējas novērtēšanas aspekts. Nākamajā sadaļā mēs apspriedīsim CC2430 sistēmas miega režīmu un tā pārtraukto modināšanas zvanu.
|