|
1. Collegamento tra i livelli superiori e inferiori Non importa quanto sia buono il sistema operativo, che sia l'attuale Win7 o il futuro Win8 e Win9, ci sarà sempre un BlueScreen, per non parlare di un piccolo microcontrollore~ Ragioni imprevedibili come rumore elettrico, interruzione di corrente, scarica elettrostatica, ecc., possono causare un funzionamento anomalo del sistema embedded. Il Watch Dog, per essere precisi, dovrebbe essere un timer watchdog, che è una struttura di circuito utilizzata appositamente per monitorare lo stato di funzionamento del programma microcontrollore. Il principio base è: dopo aver avviato il timer watchdog, inizierà a contare da 0, se il programma non lo cancella entro l'intervallo di tempo specificato, il timer watchdog resetterà il sistema (equivalente a riavviare il computer), come mostrato nella figura qui sotto (disegnato in Word, il disegno è più uovo doloroso~):
Presentiamo un semplice metodo di applicazione per il cane da guardia: come lasciare andare un cane? Come nutrirlo? Cosa succede se non lo nutri? 2. La storia del cane da guardia(1) Introduzione all'esperimentoSe il cane è nutrito, il sistema funziona normalmente; Se non dai da mangiare al cane, il sistema continua a riavviarsi. (2) Diagramma di flusso del programma
(3) Codice sorgente sperimentale e analisi/*
Descrizione dell'esperimento: nell'esperimento del cane da guardia, se il cane non viene nutrito, il sistema continua a riavviarsi.
*/
#include
#define guidato P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
Voidxtal_init(Void)
{ SONNO &= ~0x04; //都上电
mentre(! (SONNO &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Scegli un oscillatore a cristallo a 32MHz SONNO |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
Voidled_init(Void)
{ P1SEL =0x00; P1 è la normale porta I/O P1DIR |=0x0F; Uscita P1.0 P1.1 P1.2 P1.3
Led1 =1; //关闭所有LED Led2 =1; led3 =1; Led4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
Voidwatchdog_Init(Void)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
VoidFeetDog(Void)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
VoidRitardo (Void)
{
senza firmatura intn;
per(n=50000; n>0; n--);
per(n=50000; n>0; n--);
per(n=50000; n>0; n--);
per(n=50000; n>0; n--);
per(n=50000; n>0; n--);
per(n=50000; n>0; n--);
per(n=50000; n>0; n--);
}
/*主函数
-------------------------------------------------------*/
Voidmain(Void)
{ xtal_init(); led_init(); watchdog_Init();
Ritardo(); Led1 =0; //点亮led1
mentre(1) { FeetDog(); Comando di alimentazione per cani (il sistema non si resetta dopo l'unione e la piccola luce non lampeggia; Se annotato, il sistema continuerà a resettarsi e la piccola luce lampeggerà ogni 1 secondo) }
}
Come si può vedere dal codice sorgente sopra, il metodo operativo di Watch Dog è molto semplice, e l'intero processo coinvolge solo un nuovo SFR, ovveroWDCTL。Di seguito è riportata una descrizione specifica di CC2430 nel manuale cinese:
L'uso dei watchdog può essere riassunto così:Seleziona modalità → seleziona intervallo timer → metti il cane → dargli da mangiare (1) Modalità di selezione: Il timer watchdog ha due modalità, ovvero "modalità watchdog" e "timer". In modalità timer, è equivalente a un timer normale, e quando si raggiunge l'intervallo timer, produce un'interruzione (puoi trovarla nel file ioCC2430.h con un vettore di interruzione di WDT_VECTOR); In modalità watchdog, quando si raggiunge un intervallo programmato, non c'è interruzione, ma viene inviato un segnale di reset al sistema. In questo esperimento, è stato superatoWDCTL. MODE=0per selezionare la modalità gatekeeper. (2) Selezionare l'intervallo programmato: Come mostrato nella figura sopra, ci sono quattro periodi di orologio tra cui scegliere e, per comodità di test, scegliamo l'intervallo di tempo di 1s (cioè l'ordine).WDCTL.INT=00)。 (3) Libera il cane: OrdineWDCTL.EN=1per avviare il timer del cane da guardia. (4) Nutrire il cane: Una volta iniziato il timer, inizia a contare da 0. Prima che il suo conteggio raggiunga 32768 (cioè <1), se diamo da mangiare al cane con il seguente codice: WDCTL =0xa0; WDCTL =0x50;
Poi il valore del timer verrà cancellato a 0, e poi ricomincerà a contare da 0x0000, impedendo così di inviare un segnale di reset, che si manifesta sulla scheda di sviluppo: LED1 sarà sempre acceso e non lampeggiarà; Se non diamo il feed al cane (cioè, commentiamo questo codice), quando il conteggio del timer raggiunge 32768, verrà emesso un segnale di reset e il programma si avvierà da zero, cosa che si manifesta sulla scheda di sviluppo: LED1 lampeggia costantemente e l'intervallo di flashing è 1s. (Nota: Il programma di alimentazione per cani deve essere strettamente coerente con il codice sopra indicato, e l'ordine invertito/sbagliato/scritto meno non avrà un ruolo nel cancellare lo 0.) ) Consigli CC2430Due note aggiuntive: (1) InModalità cane da guardiaSe il timer watchdog è stato abilitato, impostare 0 su WDCTL.EN è invalido (cioè, questo bit non può svolgere il ruolo di fermare il timer); (2) InModalità timer, puoi scrivere 1 in WDCTL.CLR[0] per cancellare il timer; Scrivere 0 nel bit di abilitazione WDCTL.EN fermerà il timer, mentre scrivere 1 nel bit di abilitazione riavvierà il timer da 0x0000 in poi.
(4) Risultati sperimentali:Se aggiungi la funzione FeedDog, esegui il codice e scopri che LED1 è sempre acceso (il sistema non si resetta); Se commenti la funzione FeedDog, esegui il codice e scopri che LED1 lampeggia ogni 1s (il sistema si resetta ogni 1s). 3. ConclusioneQuesta sezione descrive il principio e l'uso dei circuiti di temporizzazione watchdog. In applicazioni pratiche, se è richiesta un'elevata affidabilità, il watchdog può essere utilizzato nel sistema. Quando il sistema si blocca per qualche motivo (non può più nutrire il cane), il cane che nessuno dà da mangiare abbaiera: "Padrone, c'è un'anomalia, c'è un'anomalia! ” Per una rete di sensori wireless, il consumo energetico in tempo reale è un aspetto critico della valutazione delle prestazioni. Nella sezione successiva, parleremo del sistema di sospensione CC2430 e del suo richiamo di risveglio interrotto.
|