โปรแกรมตัวอย่างจำนวนมากสำหรับ MSP430 มีบรรทัดแรกดังนี้:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
ทำไมพวกเขาทำเช่นนี้?
โปรแกรมตัวอย่างจำนวนมากสำหรับ MSP430 มีบรรทัดแรกดังนี้:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
ทำไมพวกเขาทำเช่นนี้?
คำตอบ:
ตัวจับเวลาจ้องจับผิด (WDT) เปิดใช้งานตามค่าเริ่มต้นมันเป็นสิ่งที่มีประโยชน์ที่จะมีในแอพพลิเคชั่นที่มีความซับซ้อนมากขึ้น พวกเขามักจะไม่ให้บริการ WDT ในรหัสของพวกเขาหรือรวมถึงบริการการขัดจังหวะ (ISR) เพื่อจัดการกับเหตุการณ์ WDT ดังนั้นเมื่อชิปของพวกเขาตั้งค่าใหม่พวกเขาจะผิดหวังมาก นอกจากนี้โปรแกรมตัวอย่างส่วนใหญ่ไม่ได้พยายามสาธิต WDT ดังนั้นจึงถูกปิด
แก้ไข: ตัวจับเวลาจ้องจับผิดอาจมีชื่อว่า "สวิตช์คนตาย" พฤติกรรมเริ่มต้นของมันคือการรีเซ็ตไมโครคอนโทรลเลอร์ยกเว้นว่าเฟิร์มแวร์จะแจ้งให้ทราบเป็นระยะ ๆ ว่าทุกอย่างทำงานได้ดี เรื่องนี้เป็นที่รู้จักกันในชื่อ "เลี้ยงสุนัข" หรือ "เตะหมา" วิธีนี้หากเฟิร์มแวร์ของคุณติดอยู่ในลูปหรือหยุดทำงานตามที่คาดไว้จ้องจับผิดจะไม่ถูกป้อนและจะรีเซ็ตชิป (หวังว่าจะเป็นสถานะใหม่และใช้งานได้)
คุณยังสามารถใช้ WDT เพื่อขัดจังหวะเป็นระยะเพื่อทำงานอื่น ๆ ไม่ว่าคุณจะจินตนาการอะไร คุณเพียงแค่ต้องเขียน ISR ที่เกี่ยวข้อง
นอกจากประเด็นของซามูเอลเกี่ยวกับผู้คนที่บังเอิญสะดุดกับ WDT แล้วยังมีอีกเหตุผลที่สำคัญว่าทำไมจึงควรปิดใช้งานในตอนแรก
แม้ว่าโดยปกติแอปพลิเคชันของคุณจะสามารถรีเซ็ตตัวจับเวลาได้อย่างถูกต้อง แต่ก็อาจไม่สามารถทำได้ในช่วงรหัสเริ่มต้นด้วยเหตุผลสองประการ:
ดังนั้นจึงเป็นการดีที่จะปิดการใช้งาน WDT เป็นสิ่งแรกที่คุณทำแม้ว่าคุณจะไม่ได้เปิดใช้งานก็ตาม
หากคุณต้องการใช้งานคุณสามารถเปิดใช้งานใหม่ได้ทันทีก่อนเปิดการขัดจังหวะซึ่งเป็นขั้นตอนสุดท้ายของรหัสการเริ่มต้นของคุณ
int _system_pre_init(void)
ฟังก์ชั่นซึ่งดำเนินการก่อนmain