यहाँ कुछ विचार और विचार दिए गए हैं:
ROM का अधिक रचनात्मक रूप से उपयोग करें।
कुछ भी आप ROM में स्टोर कर सकते हैं। चीजों की गणना करने के बजाय, ROM में लुक-अप टेबल स्टोर करें। (सुनिश्चित करें कि आपका कंपाइलर आपके लुक-अप टेबल को रीड-ओनली सेक्शन में आउटपुट कर रहा है। रनटाइम में मेमोरी एड्रेस प्रिंट करें!) ROM में अपनी इंटरप्ट वेक्टर टेबल को स्टोर करें। बेशक, कुछ परीक्षणों को चलाने के लिए देखें कि आपके रैम की तुलना में आपके रोम कितने विश्वसनीय हैं।
स्टैक के लिए अपनी सर्वश्रेष्ठ रैम का उपयोग करें।
स्टैक में एसईयू संभवतः दुर्घटनाओं का सबसे संभावित स्रोत है, क्योंकि यह वह जगह है जहां सूचकांक चर, स्थिति चर, वापसी पते और विभिन्न प्रकार के संकेत आमतौर पर रहते हैं।
टाइमर-टिक और वॉचडॉग टाइमर दिनचर्या को लागू करें।
आप प्रत्येक टाइमर टिक के साथ "स्वच्छता जांच" दिनचर्या चला सकते हैं, साथ ही सिस्टम लॉकिंग को संभालने के लिए एक वॉचडॉग रूटीन चला सकते हैं। आपका मुख्य कोड समय-समय पर प्रगति को इंगित करने के लिए एक काउंटर भी बढ़ा सकता है, और विवेक-जांच दिनचर्या यह सुनिश्चित कर सकती है कि यह हुआ है।
सॉफ़्टवेयर में त्रुटि-सुधार-कोड लागू करें ।
आप त्रुटियों का पता लगाने और / या त्रुटियों को ठीक करने में सक्षम होने के लिए अपने डेटा में अतिरेक जोड़ सकते हैं। यह प्रसंस्करण समय जोड़ देगा, संभवतः लंबे समय तक विकिरण के संपर्क में आने वाले प्रोसेसर को छोड़ देगा, इस प्रकार त्रुटियों की संभावना बढ़ जाएगी, इसलिए आपको व्यापार-बंद पर विचार करना चाहिए।
कैश को याद रखें।
अपने सीपीयू कैश के आकार की जाँच करें। हाल ही में आपके द्वारा एक्सेस या संशोधित किया गया डेटा संभवतः कैश के भीतर होगा। मेरा मानना है कि आप कम से कम कुछ कैश (एक बड़े प्रदर्शन लागत पर) को अक्षम कर सकते हैं; आपको यह देखने की कोशिश करनी चाहिए कि कैसे SEUs के लिए अतिसंवेदनशील हैं। यदि कैश रैम की तुलना में कठिन हैं, तो आप नियमित रूप से महत्वपूर्ण डेटा पढ़ और फिर से लिख सकते हैं ताकि यह सुनिश्चित हो सके कि यह कैश में रहता है और रैम को लाइन में वापस लाता है।
पृष्ठ-दोष संचालकों का चतुराई से उपयोग करें।
यदि आप स्मृति पृष्ठ को वर्तमान में नहीं चिह्नित करते हैं, तो सीपीयू पृष्ठ दोष जारी करेगा जब आप इसे एक्सेस करने का प्रयास करेंगे। आप एक पेज-फ़ॉल्ट हैंडलर बना सकते हैं, जो रीड रिक्वेस्ट सर्विस करने से पहले कुछ जाँच करता है। (पीसी ऑपरेटिंग सिस्टम इसका उपयोग पारदर्शी रूप से उन पेजों को लोड करने के लिए करते हैं जिन्हें डिस्क पर स्वैप किया गया है।)
महत्वपूर्ण चीजों (जो सब कुछ हो सकता है) के लिए विधानसभा भाषा का उपयोग करें।
असेंबली लैंग्वेज के साथ, आप जानते हैं कि रजिस्टर में क्या है और रैम में क्या है; आप जानते हैं कि CPU किस विशेष रैम तालिकाओं का उपयोग कर रहा है, और आप अपने जोखिम को कम रखने के लिए गोल चक्कर में चीजों को डिज़ाइन कर सकते हैं।
objdump
वास्तव में उत्पन्न असेंबली भाषा को देखने के लिए उपयोग करें , और यह निर्धारित करें कि आपकी प्रत्येक दिनचर्या में कितना कोड है।
यदि आप लिनक्स जैसे बड़े ओएस का उपयोग कर रहे हैं तो आप परेशानी के लिए पूछ रहे हैं; वहाँ सिर्फ इतनी जटिलता और बहुत सी चीजें गलत हैं।
याद रखें कि यह संभावनाओं का खेल है।
एक टिप्पणीकार ने कहा
त्रुटियों को पकड़ने के लिए आप जो भी दिनचर्या लिखते हैं, वह उसी कारण से स्वयं विफल हो जाएगी।
हालांकि यह सही है, चेक बाइट के लिए कोड और डेटा के 100 बाइट्स में त्रुटियों की संभावना सही ढंग से कार्य करने के लिए आवश्यक है, अन्यत्र त्रुटियों की संभावना से बहुत छोटा है। यदि आपकी ROM बहुत विश्वसनीय है और लगभग सभी कोड / डेटा वास्तव में ROM में हैं तो आपके अंतर और भी बेहतर हैं।
निरर्थक हार्डवेयर का उपयोग करें।
समान कोड वाले 2 या अधिक समान हार्डवेयर सेटअप का उपयोग करें। यदि परिणाम भिन्न होते हैं, तो एक रीसेट चालू होना चाहिए। 3 या अधिक उपकरणों के साथ आप "वोटिंग" प्रणाली का उपयोग करके यह पहचानने का प्रयास कर सकते हैं कि किसके साथ समझौता किया गया है।