|
1. 上層と下層の接続 どんなに優れたOSであっても、現在のWin7であれ将来のWin8やWin9であれ、常にブルースクリーンは発生し、小さなマイコンも例外ではありません~電気ノイズ、停電、静電気放電などの予測不能な原因が組み込みシステムの異常動作を引き起こすことがあります。 正確にはウォッチドッグはウォッチドッグタイマーであるべきで、これはマイコンプログラムの実行状態を監視するために特別に使用される回路構造です。 基本的な原理は、ウォッチドッグタイマーを起動すると0からカウントを開始します。プログラムが指定された時間間隔内にタイマーをクリアしなければ、タイマーがシステムをリセットします(コンピュータの再起動に相当)。以下の図(Wordで描いたもので、絵はよりエガチです~)。
簡単な番犬の適用方法を紹介しましょう:犬をどうやって放すか? どうやって餌をやる? もし餌を与えなかったらどうなる? 2. 番犬の物語(1) 実験への導入犬に餌を与えればシステムは正常に動作します。 もし犬に餌をあげなければ、システムは何度も再起動します。 (2) プログラムフローチャート
(3) 実験的ソースコードと解析/*
実験説明:ウォッチドッグ実験では、犬に餌を与えなければシステムは何度も再起動します。
*/
#include
#define リード1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
虚無xtal_init(虚無)
{ 眠り &= ~0x04; //都上电
ただし(! (眠りと0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; 32MHzのクリスタルオシレーターを選びましょう 眠り |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
虚無led_init(虚無)
{ P1SEL =0x00; P1は通常のI/Oポートです P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 出力
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
虚無watchdog_Init(虚無)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
虚無FeetDog(虚無)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
虚無遅延(虚無)
{
署名なし 知力n;
に対して(n=50000; n>0; n--);
に対して(n=50000; n>0; n--);
に対して(n=50000; n>0; n--);
に対して(n=50000; n>0; n--);
に対して(n=50000; n>0; n--);
に対して(n=50000; n>0; n--);
に対して(n=50000; n>0; n--);
}
/*主函数
-------------------------------------------------------*/
虚無メイン(虚無)
{ xtal_init(); led_init(); watchdog_Init();
Delay(); led1 =0; //点亮led1
ただし(1) { FeetDog(); 犬の餌やりコマンド(システムが参加後にリセットされず、小さなランプも点滅しない; 注釈が付けられるとシステムはリセットを続け、小さなランプは1秒ごとに点滅します) }
}
上記のソースコードからもわかるように、Watch Dogの操作方法は非常にシンプルで、全体のプロセスは新しいSFRのみを含みます。WDCTL。以下は中国語マニュアルにあるCC2430の具体的な説明です:
ウォッチドッグの使用は次のように要約できます:モードを選択し→タイマー間隔を選んで→犬に餌をあげ→ (1) モード選択: ウォッチドッグタイマーには「ウォッチドッグモード」と「タイマー」モードの2つのモードがあります。 タイマーモードでは通常のタイマーと同等であり、タイマー間隔に達すると割り込みを生成します(割り込みベクトルがWDT_VECTORのioCC2430.hファイルで確認できます)。 ウォッチドッグモードでは、予定された間隔に到達しても中断はなく、代わりにリセット信号がシステムに送信されます。 この実験では、合格しましたWDCTL。 MODE=0ゲートキーパーモードを選択するために。 (2) 予定された間隔を選択する: 上の図に示されているように、4つのクロック周期から選べます。テストの便宜のために、1s(すなわち順序)の時間間隔を選びます。WDCTL.INT=00)。 (3) 犬を解放する: 秩序WDCTL.EN=1ウォッチドッグタイマーを起動するために。 (4) 犬に餌をやる: タイマーが始まると、0からカウントが始まります。 犬の数が32768(すなわち<1秒)に達する前に、次のコードで犬に餌を与えると: WDCTL =0xa0; WDCTL =0x50;
その後、タイマーのカウント値は0にクリアされ、再び0x0000からカウントが始まります。これにより、開発ボード上で表示されるリセット信号の送信が妨げられます。LED1は常に点灯し、点滅しません。 もし犬に餌を与えなければ(つまりこのコードをコメントアウトしなければ)、タイマーカウントが32768に達したときにリセット信号が出され、プログラムは一から実行されます。これは開発ボード上で示されます:LED1は常に点滅し、点滅間隔は1です。 (注:犬の餌やりプログラムは上記のコードと厳密に整合しておらず、順序が逆/誤り/書き方が少なくても0のクリアには影響しません。) ) CC2430のヒントさらに2つの注意点があります: (1)ウォッチドッグモードウォッチドッグタイマーが有効化されている場合、0をWDCTL.ENに設定しても無効になります(つまり、このビットはタイマーを停止する役割を果たせません)。 (2) 入ってタイマーモードタイマーをクリアするにはWDCTL.CLR[0]に1を書き込めます。 有効ビットWDCTL.ENに0を書き込むとタイマーが停止し、有効ビットに1を書き込むとタイマーが0x0000から再スタートします。
(4) 実験結果:FeedDog関数を追加してコードを実行すると、LED1が常に点灯していることがわかります(システムはリセットされません)。 FeedDogの関数をコメントアウトすると、コードを実行するとLED1が1秒ごとに点滅します(システムは1秒ごとにリセットされます)。 3. 結論この節では、ウォッチドッグタイミング回路の原理と使用について説明します。 実用的な場合、高い信頼性が必要な場合、システム内でウォッチドッグを使用することが可能です。 システムが何らかの理由でダウンすると(犬に餌が出なくなった)、誰も餌をあげない犬が吠えます。「マスター、異常があります、異常があります! ” 無線センサーネットワークにおいて、その実行時の消費電力は性能評価の重要な側面です。 次のセクションでは、CC2430システムのスリープとその中断されたウェイクアップコールについて説明します。
|