क्या सभी जालों को हमेशा परिभाषित किया जाना चाहिए?


18

मैंने dsPIC 30F4013 के साथ अब दो मामले देखे हैं जहां एक अपरिभाषित जाल के कारण नियंत्रक रीसेट कर रहा था। ये जाल पहले क्यों बढ़ रहे थे यह अभी भी एक रहस्य है, लेकिन यह मेरा तात्कालिक प्रश्न नहीं है। मुझे लगता है कि यह एक अच्छा प्रोग्रामिंग अभ्यास होगा जो हमेशा सभी जालों को परिभाषित करता है, भले ही जाल कभी भी न हों, इसलिए मुझे यादृच्छिक रीसेट के बजाय कम से कम एक स्पष्ट त्रुटि संदेश मिलता है। क्या यह एक मानक अभ्यास है जिससे मैं अनजान हूँ? क्या इस प्रथा के नुकसान हैं जिन पर मुझे विचार करना चाहिए?


4
आपके प्रश्न का उत्तर नहीं है, लेकिन मैं थोड़ी देर पहले dsPIC और PIC24 सिस्टम पर उन प्रकार के लक्षणों से पीड़ित था। मेरे मामले में जाल कोड के बिट्स से उत्पन्न हुआ, जहां मैं 16-बिट मानों के लिए डी-रेफ़रिंग पॉइंटर्स था और इन पॉइंटर्स में स्वयं अजीब (नहीं-भी) मान थे, क्योंकि वे एक गोलाकार कॉम्स बफर में इंगित कर रहे थे - और मेरे पास पहले से नहीं था यह जानने का तरीका कि क्या 16-बिट मान एक विषम या सीमा पर शुरू होगा। XC16 कंपाइलर यहां हार्डवेयर के हैंगअप से आपकी सुरक्षा नहीं करता है। मैंने इन कार्यों के लिए एक रैपर मैक्रो लिखना समाप्त कर दिया, जिसने 2 8-बिट पॉइंटर डी-रेफ को मजबूर किया।
ब्राह्मण

जवाबों:


13

मेरा अनौपचारिक नियम है:

  1. यदि एक बाधा सक्षम है, तो आपके पास कोड होना चाहिए जो इसे संभालता है।
  2. यदि आप किसी बाधा के लिए कोड नहीं लिखते हैं, तो उसे अक्षम करें।
  3. यदि आप इसे अक्षम नहीं कर सकते हैं, तो इसके लिए कोड लिखें।

उस नियम के बिना भी, हालांकि, डेटा शीट स्पष्ट रूप से आपके प्रश्न का उत्तर देती है:

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

( स्रोत , खंड 8.3, पहला नोट)

यह देखते हुए कि आप नहीं कर सकते हैं जाल मुखौटा है, तो आप चाहिए उन्हें संभाल। यदि आप किसी विशेष फैशन में जाल से निपटने की इच्छा नहीं रखते हैं, तो उचित तरीका एक RESETनिर्देश निष्पादित करना है ।


हाँ। मेरे पास सभी जालों के लिए लक्ष्य के साथ एक मानक मॉड्यूल है।
ओलिन लेथ्रोप

16

हां, यह एक अच्छा विचार है - केवल नकारात्मक पक्ष थोड़ा अतिरिक्त कोड आकार है, और आपको यह तय करना होगा कि जाल के साथ क्या करना है (सीरियल पोर्ट पर एक संदेश उत्सर्जित करें? "FAILED" प्रकाश चालू करें? चुपचाप रिबूट?) )


4
मैं आमतौर पर प्रोसेसर को अनंत एनओपी / गोटो लूप में चलाता हूं। इस तरह से स्टैक ट्रैप से दूषित नहीं हुआ है, और डिबगिंग के समय मेरे पास इसे खोले जाने और जो हुआ उसका पता लगाने का मौका है। मुझे अक्सर जाल नहीं मिलता है, लेकिन 80% समय इसका एक अजीब पता जाल होता है, आमतौर पर क्योंकि कचरा एक सूचक के रूप में लोड होता है। कभी-कभी स्टैक पॉइंटर दूषित हो जाता है और विषम पता जाल का उत्पादन करता है। उन पर डिबग करना कठिन है क्योंकि स्टैक अब नहीं है। सौभाग्य से, यह वास्तव में दुर्लभ है।
ओलिन लेथ्रोप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.