Yanıtlar:
Bekçi zamanlayıcısı (WDT) varsayılan olarak açıktır, daha karmaşık uygulamalarda olması yararlı bir şeydir, ancak birçok yeni insanı harekete geçirir. WDT kodlarında genellikle WDT'ye hizmet vermezler veya WDT olayını işlemek için bir kesme servis rutini (ISR) içermezler, bu nedenle çipleri sıfırlamaya devam ettiğinde çok sinirli olurlar. Buna ek olarak, örnek programlar çoğunlukla WDT'yi göstermeye çalışmaz, bu yüzden kapalıdır.
Düzenleme: Bekçi zamanlayıcısı "ölü adamın anahtarı" olarak adlandırılmış olabilir. Varsayılan davranışı, bellenim periyodik olarak her şeyin yolunda gittiğini bilmediği sürece mikro denetleyiciyi sıfırlamaktır. Bu "köpeği beslemek" veya "köpeği tekmelemek" olarak bilinir. Bu şekilde, ürün yazılımınız bir döngüye sıkışırsa veya beklendiği gibi çalışmayı durdurursa, bekçi beslenmez ve çipi sıfırlar (umarım yeni, çalışır bir duruma).
WDT'yi, hayal edebileceğiniz her şeyi diğer görevleri gerçekleştirmek için periyodik kesinti olarak da kullanabilirsiniz. Sadece ilgili ISR'yi yazmalısınız.
Samuel'in yanlışlıkla WDT'yi takan insanlar hakkındaki görüşüne ek olarak, başlangıçta devre dışı bırakılmasının başka bir önemli nedeni daha var.
Uygulamanız normalde zamanlayıcıyı doğru şekilde sıfırlayabilse bile, başlatma kodu sırasında bunu iki nedenden dolayı yapamayabilir:
Sonuç olarak, WDT'yi hiçbir zaman etkinleştirmemiş olsanız bile yaptığınız ilk şey olarak devre dışı bırakmak iyi bir uygulamadır .
Kullanmak isterseniz, başlatma kodunuzun son adımı olarak kesintileri açmadan hemen önce yeniden etkinleştirebilirsiniz.
int _system_pre_init(void)
önce yürütür işlevi,main