|
1. Verbindung der oberen und unteren Ebenen Egal wie gut das Betriebssystem ist, egal ob das aktuelle Win7 oder das zukünftige Win8 und Win9, es wird immer einen BlueScreen geben, ganz zu schweigen von einem kleinen Mikrocontroller~ Unvorhersehbare Gründe wie elektrisches Rauschen, Stromausfall, elektrostatische Entladung usw. können einen abnormalen Betrieb des eingebetteten Systems verursachen. Der Watch Dog sollte genauer gesagt ein Watchdog-Timer sein, eine Schaltungsstruktur, die speziell dazu verwendet wird, den laufenden Status des Mikrocontrollerprogramms zu überwachen. Das Grundprinzip lautet: Nach dem Start des Watchdog-Timers beginnt er von 0 zu zählen; wenn das Programm ihn nicht rechtzeitig innerhalb des angegebenen Zeitintervalls löscht, setzt der Watchdog-Timer das System zurück (entspricht einem Neustart des Computers), wie in der untenstehenden Abbildung gezeigt (in Wort gezeichnet, die Zeichnung ist mehr Eiergeruch~):
Stellen wir eine einfache Anwendungsmethode für den Wachhund vor: Wie lässt man einen Hund los? Wie sollte man füttern? Was passiert, wenn du ihn nicht fütterst? 2. Die Geschichte des Wachhundes(1) Einführung in das ExperimentWenn der Hund gefüttert wird, läuft das System normal; Wenn du den Hund nicht fütterst, startet das System ständig neu. (2) Programmflussdiagramm
(3) Experimenteller Quellcode und Analyse/*
Experimentbeschreibung: Im Wachhund-Experiment startet das System immer wieder neu, wenn der Hund nicht gefüttert wird.
*/
#include
#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
Leerextal_init(Leere)
{ SCHLAF &= ~0x04; //都上电
während(! (SCHLAF &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Wählen Sie einen 32-MHz-Kristalloszillator SCHLAF |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
Leereled_init(Leere)
{ P1SEL =0x00; P1 ist der normale I/O-Port P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 Ausgang
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
Leerewatchdog_Init(Leere)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
LeereFeetDog(Leere)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
LeereVerzögerung(Leere)
{
Unsigniert Intn;
für(n=50000; n>0; n--);
für(n=50000; n>0; n--);
für(n=50000; n>0; n--);
für(n=50000; n>0; n--);
für(n=50000; n>0; n--);
für(n=50000; n>0; n--);
für(n=50000; n>0; n--);
}
/*主函数
-------------------------------------------------------*/
Leeremain(Leere)
{ xtal_init(); led_init(); watchdog_Init();
Delay(); led1 =0; //点亮led1
während(1) { FeetDog(); Hundefütterungsbefehl (das System setzt sich nach dem Beitritt nicht zurück, und das kleine Licht blinkt nicht; Wenn es annotiert wird, setzt sich das System weiter zurück, und das kleine Licht blinkt alle 1 Sekunden) }
}
Wie Sie aus dem obigen Quellcode sehen können, ist die Betriebsweise von Watch Dog sehr einfach, und der gesamte Prozess beinhaltet nur ein neues SFR, nämlichWDCTL。Im Folgenden eine spezifische Beschreibung von CC2430 im chinesischen Handbuch:
Der Einsatz von Wachhunden lässt sich wie folgt zusammenfassen:Modus auswählen → Timer-Intervall auswählen → den Hund → den Hund füttern (1) Modus auswählen: Der Watchdog-Timer hat zwei Modi, nämlich "Watchdog-Modus" und "Timer"-Modus. Im Timer-Modus ist es äquivalent zu einem normalen Timer, und wenn das Timerintervall erreicht ist, erzeugt es einen Interrupt (diesen findet man in der ioCC2430.h-Datei mit einem Interruptvektor von WDT_VECTOR); Im Watchdog-Modus gibt es bei Erreichen eines geplanten Intervalls keine Unterbrechung, stattdessen wird ein Reset-Signal an das System gesendet. In diesem Experiment bestand erWDCTL. MODE=0um den Gatekeeper-Modus auszuwählen. (2) Wählen Sie das geplante Intervall: Wie in der obigen Abbildung gezeigt, gibt es vier Taktperioden zur Auswahl, und zur Prüfungsbequemlichkeit wählen wir das Zeitintervall von 1 Sekunden (d. h. Reihenfolge).WDCTL.INT=00)。 (3) Den Hund freilassen: BestellungWDCTL.EN=1um den Watchdog-Timer zu starten. (4) Füttere den Hund: Sobald der Timer startet, beginnt er ab 0 zu zählen. Bevor die Zählung 32.768 (d. h. <1s) erreicht, wenn wir den Hund mit folgendem Code füttern: WDCTL =0xa0; WDCTL =0x50;
Dann wird der Zählwert des Timers auf 0 gelöscht, und dann beginnt er erneut von 0x0000 zu zählen, was verhindert, dass ein Reset-Signal gesendet wird, das sich auf der Entwicklungsplatine manifestiert: LED1 ist immer an und blinkt nicht; Wenn wir den Hund nicht füttern (also diesen Code kommentieren), wird bei 32768 Timer ein Reset-Signal ausgegeben, und das Programm läuft von Grund auf, was sich auf der Entwicklungsplatine zeigt: LED1 blinkt ständig, und das Blinkintervall beträgt 1 Sekunden. (Hinweis: Das Hundefütterungsprogramm muss strikt mit dem obigen Code konsistent sein, und die Reihenfolge "Umgekehrt/falsch/geschrieben weniger spielt keine Rolle beim Löschen von 0.) ) CC2430 TippsZwei zusätzliche Anmerkungen: (1) InWachhund-ModusWenn der Watchdog-Timer aktiviert wurde, ist die Einstellung 0 auf WDCTL.EN ungültig (d. h. dieses Bit kann nicht die Rolle des Stoppens des Timers übernehmen); (2) InTimer-Modus, du kannst 1 in WDCTL.CLR[0] schreiben, um den Timer zu löschen; Das Schreiben von 0 auf das Entable-Bit WDCTL.EN stoppt den Timer, während das Schreiben von 1 im Enable-Bit den Timer von 0x0000 neu startet.
(4) Versuchsergebnisse:Wenn du die FeedDog-Funktion hinzufügst, den Code ausführst und feststellst, dass LED1 immer an ist (das System setzt nicht zurück); Wenn du die FeedDog-Funktion kommentierst, führst du den Code aus und stellst fest, dass LED1 in 1s-Intervallen blinkt (das System setzt sich alle 1s zurück). 3. FazitDieser Abschnitt beschreibt das Prinzip und die Anwendung von Wachhund-Zeitschaltungen. In praktischen Anwendungen kann bei hoher Zuverlässigkeit der Wachhund im System eingesetzt werden. Wenn das System aus irgendeinem Grund ausfällt (es kann den Hund nicht mehr füttern), bellt der Hund, den niemand füttert: "Meister, es gibt eine Anomalie, da ist eine Anomalie! ” Für ein drahtloses Sensornetzwerk ist sein Stromverbrauch zur Laufzeit ein entscheidender Aspekt der Leistungsbewertung. Im nächsten Abschnitt werden wir den Systemschlaf von CC2430 und seinen unterbrochenen Weckruf besprechen.
|