Banyak program sampel untuk MSP430 memiliki baris pertama sebagai:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Mengapa mereka melakukan ini?
Banyak program sampel untuk MSP430 memiliki baris pertama sebagai:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Mengapa mereka melakukan ini?
Jawaban:
Pengawas waktu (WDT) diaktifkan secara default, ini adalah hal yang berguna untuk dimiliki dalam aplikasi yang lebih kompleks, tetapi membuat banyak orang baru tersandung. Mereka sering tidak akan menservis WDT dalam kode mereka atau memasukkan interrupt service routine (ISR) untuk menangani acara WDT, jadi, ketika chip mereka terus disetel ulang, mereka menjadi sangat frustrasi. Selain itu, sebagian besar program sampel tidak mencoba mendemonstrasikan WDT sehingga dimatikan.
Sunting: Pengawas waktu bisa bernama "mati orang beralih". Perilaku standarnya adalah mengatur ulang mikrokontroler kecuali jika firmware secara berkala memberi tahu semuanya berjalan baik. Ini dikenal sebagai "memberi makan anjing" atau "menendang anjing". Dengan cara ini, jika firmware Anda macet dalam satu lingkaran atau berhenti beroperasi seperti yang diharapkan, pengawas tidak diumpankan dan akan mereset chip (mudah-mudahan ke kondisi kerja yang baru).
Anda juga dapat menggunakan WDT sebagai interupsi berkala untuk melakukan tugas-tugas lain, apa pun yang dapat Anda bayangkan. Anda hanya perlu menulis ISR yang relevan.
Selain poin Samuel tentang orang yang secara tidak sengaja tersandung WDT, ada alasan penting lain mengapa harus dinonaktifkan pada awalnya.
Bahkan jika aplikasi Anda biasanya dapat mengatur ulang timer dengan benar, itu mungkin tidak dapat melakukannya selama kode inisialisasi, karena dua alasan:
Akibatnya, sebaiknya Anda menonaktifkan WDT sebagai hal pertama yang Anda lakukan, bahkan jika Anda tidak pernah mengaktifkannya .
Jika Anda memang ingin menggunakannya, Anda dapat mengaktifkannya kembali segera sebelum menyalakan interupsi, sebagai langkah terakhir dari kode initilasi Anda.
int _system_pre_init(void)
fungsi, yang dijalankan sebelumnyamain