|
1. Menghubungkan tingkat atas dan bawah Tidak peduli seberapa bagus sistem operasinya, apakah itu Win7 saat ini atau Win8 dan Win9 masa depan, akan selalu ada BlueScreen, belum lagi mikrokontroler kecil ~ Alasan yang tidak dapat diprediksi seperti kebisingan listrik, kegagalan daya, pelepasan muatan listrik statis, dll., Dapat menyebabkan pengoperasian sistem tertanam yang tidak normal. Watch Dog, tepatnya, harus menjadi pengatur waktu pengawas, yang merupakan struktur sirkuit yang secara khusus digunakan untuk memantau status berjalan program mikrokontroler. Prinsip dasarnya adalah: setelah memulai timer pengawas, itu akan mulai menghitung dari 0, jika program tidak menghapusnya tepat waktu dalam interval waktu yang ditentukan, pengatur waktu pengawas akan mengatur ulang sistem (setara dengan me-restart komputer), seperti yang ditunjukkan pada gambar di bawah ini (digambar dalam kata, gambarnya lebih sakit telur~):
Mari kita perkenalkan metode aplikasi anjing penjaga sederhana: Bagaimana cara melepaskan anjing? Bagaimana cara memberi makan? Apa yang akan terjadi jika Anda tidak memberinya makan? 2. Kisah anjing penjaga(1) Pengantar percobaanJika anjing diberi makan, sistem berjalan normal; Jika Anda tidak memberi makan anjing, sistem terus memulai ulang. (2) Bagan alir program
(3) Kode sumber dan analisis eksperimental/*
Deskripsi eksperimen: Dalam percobaan pengawas, jika anjing tidak diberi makan, sistem terus memulai ulang.
*/
#include
#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
kosongxtal_init(kosong)
{ TIDUR &= ~0x04; //都上电
sementara(! (TIDUR &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Pilih osilator kristal 32MHz TIDUR |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
kosongled_init(kosong)
{ P1SEL =0x00; P1 adalah port I/O normal P1DIR |=0x0F; Keluaran P1.0 P1.1 P1.2 P1.3
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
kosongwatchdog_Init(kosong)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
kosongKakiAnjing(kosong)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
kosongPenundaan(kosong)
{
tidak ditandatangani intn;
untuk(n=50000; n>0; n--);
untuk(n=50000; n>0; n--);
untuk(n=50000; n>0; n--);
untuk(n=50000; n>0; n--);
untuk(n=50000; n>0; n--);
untuk(n=50000; n>0; n--);
untuk(n=50000; n>0; n--);
}
/*主函数
-------------------------------------------------------*/
kosongutama(kosong)
{ xtal_init(); led_init(); watchdog_Init();
Penundaan(); led1 =0; //点亮led1
sementara(1) { KakiAnjing(); Perintah memberi makan anjing (sistem tidak diatur ulang setelah bergabung, dan lampu kecil tidak berkedip; Jika diberi anotasi, sistem akan terus diatur ulang, dan lampu kecil akan berkedip setiap 1 detik) }
}
Seperti yang Anda lihat dari kode sumber di atas, metode pengoperasian Watch Dog sangat sederhana, dan seluruh prosesnya hanya melibatkan SFR baru, yaituWDCTL。Berikut ini adalah deskripsi spesifik CC2430 dalam manual Cina:
Penggunaan pengawas dapat diringkas sebagai:Pilih Mode → pilih interval pengatur waktu → letakkan anjing → memberi makan anjing (1) Pilih mode: Timer pengawas memiliki dua mode, yaitu mode "watchdog" dan mode "timer". Dalam mode pengatur waktu, ini setara dengan pengatur waktu normal, dan ketika interval pengatur waktu tercapai, itu akan menghasilkan interupsi (Anda dapat menemukannya di file ioCC2430.h dengan vektor interupsi WDT_VECTOR); Dalam mode pengawas, ketika interval terjadwal tercapai, tidak ada gangguan, melainkan sinyal reset dikirim ke sistem. Dalam percobaan ini, itu lulusWDCTL. MODE = 0untuk memilih mode penjaga gerbang. (2) Pilih interval terjadwal: Seperti yang ditunjukkan pada gambar di atas, ada empat periode jam untuk dipilih, dan untuk kenyamanan pengujian, kami memilih interval waktu 1 detik (yaitu, urutan).WDCTL.INT=00)。 (3) Lepaskan anjing: PesanWDCTL.EN=1untuk memulai timer pengawas. (4) Beri makan anjing: Setelah timer dimulai, itu mulai menghitung dari 0. Sebelum hitungannya mencapai 32768 (yaitu <1s), jika kita memberi makan anjing dengan kode berikut: WDCTL =0xa0; WDCTL =0x50;
Kemudian nilai hitungan pengatur waktu akan dihapus menjadi 0, dan kemudian akan mulai menghitung dari 0x0000 lagi, yang mencegahnya mengirim sinyal reset, yang dimanifestasikan pada papan pengembangan: LED1 akan selalu menyala dan tidak akan berkedip; Jika kita tidak memberi makan anjing (yaitu, mengomentari kode ini), maka ketika jumlah pengatur waktu mencapai 32768, sinyal reset akan dikeluarkan, dan program akan berjalan dari awal, yang dimanifestasikan pada papan pengembangan: LED1 terus berkedip, dan interval berkedip adalah 1 detik. (Catatan: Program pemberian makan anjing harus benar-benar konsisten dengan kode di atas, dan urutannya dibalik/salah/ditulis kurang tidak akan berperan dalam menghapus 0.) ) CC2430 TipsDua catatan tambahan: (1) DalamMode anjing pengawasJika pengatur waktu pengawas telah diaktifkan, pengaturan 0 ke WDCTL.EN tidak valid (yaitu, bit ini tidak dapat memainkan peran menghentikan pengatur waktu); (2) DalamMode pengatur waktu, Anda dapat menulis 1 ke WDCTL.CLR[0] untuk menghapus timer; Menulis 0 ke bit enable WDCTL.EN akan menghentikan timer, sementara menulis 1 ke bit enable akan memulai ulang timer dari 0x0000 aktif.
(4) Hasil eksperimen:Jika Anda menambahkan fungsi FeedDog, jalankan kode, dan temukan bahwa LED1 selalu menyala (sistem tidak mengatur ulang); Jika Anda mengomentari fungsi FeedDog, jalankan kode dan temukan bahwa LED1 berkedip pada interval 1 detik (sistem diatur ulang setiap 1 detik). 3. KesimpulanBagian ini menjelaskan prinsip dan penggunaan sirkuit waktu pengawas. Dalam aplikasi praktis, jika keandalan tinggi diperlukan, pengawas dapat digunakan dalam sistem. Ketika sistem turun karena alasan tertentu (tidak dapat memberi makan anjing lagi), anjing yang tidak diberi makan akan menggonggong: "Tuan, ada anomali, ada anomali! ” Untuk jaringan sensor nirkabel, konsumsi daya runtime-nya merupakan aspek penting dari evaluasi kinerja. Di bagian selanjutnya, kita akan membahas tidur sistem CC2430 dan panggilan bangun yang terputus.
|