एक वैकल्पिक दृश्य: माइक्रोकंट्रोलर मेमोरी से बाहर नहीं चलते हैं।
कम से कम, ठीक से प्रोग्राम किए जाने पर नहीं। एक माइक्रोकंट्रोलर की प्रोग्रामिंग बिल्कुल सामान्य उद्देश्य प्रोग्रामिंग की तरह नहीं है, इसे ठीक से करने के लिए आपको इसके बाधाओं और तदनुसार कार्यक्रम के बारे में पता होना चाहिए। यह सुनिश्चित करने के लिए उपकरण हैं। उन्हें खोजें और जानें - कम से कम लिंकर स्क्रिप्ट और चेतावनी को कैसे पढ़ें।
हालांकि जैसा कि मजेंको और अन्य कहते हैं, एक बुरी तरह से प्रोग्राम किया गया माइक्रोकंट्रोलर मेमोरी से बाहर चला सकता है, और फिर अनंत लूप सहित कुछ भी कर सकता है (जो कम से कम वॉचडॉग टाइमर को इसे रीसेट करने का मौका देता है। आपने वॉचडॉग टाइमर को सक्षम किया था, क्या आपने नहीं किया? )
माइक्रोकंट्रोलर के लिए सामान्य प्रोग्रामिंग नियम इससे बचते हैं: उदाहरण के लिए, सभी मेमोरी या तो स्टैक पर आवंटित की जाती है या स्टैटिकली (विश्व स्तर पर) आवंटित की जाती है; "नया" या "मॉलॉक" निषिद्ध है। इसलिए पुनरावृत्ति है, ताकि उप-प्रकार के घोंसले की अधिकतम गहराई का विश्लेषण किया जा सके और उपलब्ध स्टैक में फिट किया जा सके।
इस प्रकार आवश्यक अधिकतम संग्रहण की गणना तब की जा सकती है जब प्रोग्राम को संकलित या लिंक किया जाता है, और आपके द्वारा लक्षित किए जा रहे विशिष्ट प्रोसेसर के लिए मेमोरी साइज (अक्सर लिंकर स्क्रिप्ट में एन्कोडेड) के साथ तुलना की जाती है।
तब माइक्रोकंट्रोलर मेमोरी से बाहर नहीं चला सकता है, लेकिन आपका प्रोग्राम हो सकता है। और उस मामले में, आप करने के लिए मिलता है
- इसे फिर से लिखें, छोटा, या
- एक बड़ा प्रोसेसर चुनें (वे अक्सर विभिन्न मेमोरी साइज़ के साथ उपलब्ध होते हैं)।
माइक्रोकंट्रोलर प्रोग्रामिंग के लिए नियमों का एक सामान्य सेट MISRA-C है , जिसे मोटर उद्योग द्वारा अपनाया गया है।
मेरे विचार में सबसे अच्छा अभ्यास SPARK-2014- Ada के सबसेट का उपयोग करना है । एडीए वास्तव में एवीआर, एमएसपी 430 और एआरएम कॉर्टेक्स जैसे छोटे नियंत्रकों को यथोचित रूप से लक्षित करता है, और स्वाभाविक रूप से सी की तुलना में माइक्रोकंट्रोलर प्रोग्रामिंग के लिए एक बेहतर मॉडल प्रदान करता है।
अब स्पार्क उपकरण उन एनोटेशन सहित कार्यक्रम का विश्लेषण करेंगे, और इसके बारे में (या संभावित त्रुटियों की रिपोर्ट) गुण साबित करेंगे। आपको गलत मेमोरी एक्सेस या पूर्णांक ओवरफ्लो से निपटने के लिए समय या कोड स्थान को बर्बाद करने की आवश्यकता नहीं है क्योंकि वे कभी भी साबित नहीं हुए हैं।
यद्यपि SPARK के साथ अधिक अप-फ्रंट कार्य शामिल है, अनुभव यह दिखा रहा है कि यह एक उत्पाद को तेज़ी से और सस्ता कर सकता है क्योंकि आप रहस्यमय रिबूट और अन्य अजीब व्यवहार का पीछा करते हुए समय नहीं बिताते हैं।
MISRA-C और SPARK की तुलना