प्रोग्राम MSP430 पर वॉचडॉग टाइमर को क्यों रोकते हैं?


11

MSP430 के लिए कई नमूना कार्यक्रमों में उनकी पहली पंक्ति है:

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

वे यह क्यों करते हैं?

जवाबों:


15

वॉचडॉग टाइमर (डब्लूडीटी) डिफ़ॉल्ट रूप से चालू है, अधिक जटिल अनुप्रयोगों में होना एक उपयोगी बात है, लेकिन बहुत सारे नए लोगों को यात्रा करता है। वे अक्सर अपने कोड में WDT की सेवा नहीं लेते हैं या WDT ईवेंट को संभालने के लिए एक इंटरप्ट सर्विस रूटीन (ISR) शामिल करते हैं, इसलिए, जब उनकी चिप रीसेट होती रहती है तो वे बहुत निराश हो जाते हैं। इसके अतिरिक्त, नमूना कार्यक्रम, अधिकांश भाग के लिए, WDT को प्रदर्शित करने की कोशिश नहीं कर रहे हैं, इसलिए इसे बंद कर दिया गया है।

संपादित करें: वॉचडॉग टाइमर को "मृत आदमी का स्विच" नाम दिया जा सकता था। इसका डिफ़ॉल्ट व्यवहार माइक्रोकंट्रोलर को रीसेट करना है जब तक कि फर्मवेयर समय-समय पर यह नहीं बताता है कि सब कुछ ठीक चल रहा है। इसे "कुत्ते को खिलाना" या "कुत्ते को मारना" के रूप में जाना जाता है। इस तरह, यदि आपका फर्मवेयर लूप में फंस जाता है या अन्यथा अपेक्षा के अनुसार काम करना बंद कर देता है, तो वॉचडॉग को फीड नहीं किया जाता है और चिप को रीसेट कर देगा (उम्मीद है कि एक नए सिरे से काम कर रहा है)।

आप अन्य कार्यों को करने के लिए आवधिक व्यवधान के रूप में WDT का उपयोग भी कर सकते हैं, जो भी आप कल्पना कर सकते हैं। आपको बस संबंधित ISR लिखना होगा।


+1 धन्यवाद, हालांकि मैं और अन्य पाठक इसे देख सकते हैं, यह बहुत ही संक्षिप्त विवरण जानना अच्छा होगा कि डब्ल्यूडीटी चिप क्यों रीसेट करता है। (हालांकि इसे जोड़ने के बारे में चिंता न करें, आपका उत्तर स्वीकार करने के लिए पर्याप्त है जैसा कि यह है (अन्य संभावित उत्तरों के लिए कुछ और घंटों के इंतजार के बाद))
नेक्रोमैंसर

मुझे लगता है कि मुझे इस सवाल का उल्लेख करना चाहिए था कि मैं एक पूर्ण नौसिखिया हूं, जिसके पास कोई सुराग नहीं है कि वॉचडॉग टाइमर क्या है :)
नेक्रोमैंटर

2
@necromancer आह, कोई चिंता नहीं, मैंने प्रासंगिक जानकारी जोड़ी है।
शमूएल

2
सैमुअल- लगभग सभी मामलों में आपको WDT को रीसेट करने के लिए ISR का उपयोग नहीं करना चाहिए। यह लगभग हमेशा गलत काम है। इंटरप्रिट्स नियमित रूप से जारी रह सकते हैं, जबकि कार्यक्रम के अन्य भाग ला-ला भूमि में बंद हैं। यह कभी-कभी संभव / आवश्यक होता है (ISR और फर्मवेयर के अन्य भागों के बीच संचार के साथ जो प्रभावी रूप से WDT के दूसरे स्तर को निर्धारित करता है) लेकिन नौसिखिया को पहले दृष्टिकोण के रूप में सुझाव नहीं दिया जाना चाहिए।
स्पेरो पेफेनी

9

लोगों द्वारा गलती से WDT को ट्रिप करने के बारे में सैमुअल की बात के अलावा, एक और महत्वपूर्ण कारण है कि इसे शुरू में अक्षम किया जाना चाहिए।

यहां तक ​​कि अगर आपका एप्लिकेशन सामान्य रूप से टाइमर को सही ढंग से रीसेट करने में सक्षम है, तो यह दो बार शुरू करने के लिए प्रारंभिक कोड के दौरान ऐसा करने में सक्षम नहीं हो सकता है:

  • प्रारंभ में एक एकल WDT टिक की तुलना में अधिक समय लग सकता है, लेकिन अक्षम होने के लिए व्यवधान की आवश्यकता होती है। इसका मतलब है कि अगर आप भरोसा करते हैं, कहते हैं, टाइमर को रीसेट करने के लिए एक टाइमर ISR, तो आप एक अनंत बूट लूप में आ सकते हैं।
  • आपको जरूरी नहीं कि सभी MCU पर टाइमर रजिस्टर की स्थिति पता हो (यानी, अगला टिक उम्मीद से ज्यादा जल्दी हो सकता है, क्योंकि रजिस्टर 0 पर शुरू नहीं हो सकता है)।

नतीजतन, डब्ल्यूडीटी को अक्षम करने के लिए यह अच्छा अभ्यास है जो आप करते हैं, भले ही आपने इसे कभी भी सक्षम न किया हो

यदि आप इसका उपयोग करना चाहते हैं, तो आप अपने अंतर्विरोध कोड के अंतिम चरण के रूप में, इंटरप्ट को चालू करने से तुरंत पहले इसे फिर से सक्षम कर सकते हैं।


+1 जवाब में जोड़ने के लिए धन्यवाद। मुझे पता चला है कि आप इसे int _system_pre_init(void)फंक्शन के इस्तेमाल से पहले अक्षम कर सकते हैं , जो पहले निष्पादित होता हैmain
नेक्रोमैंसर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.