मेरे पास 20+ साल के एम्बेडेड सिस्टम हैं, जिनमें से ज्यादातर 8 और 16 माइक्रो हैं। आपके प्रश्न का संक्षिप्त उत्तर किसी भी अन्य सॉफ़्टवेयर डेवलपमेंट के समान है - जब तक आपको पता न हो कि आपको इसकी आवश्यकता है, तब तक ऑप्टिमाइज़ न करें, और तब तक ऑप्टिमाइज़ न करें जब तक आपको पता न हो कि आपको क्या ऑप्टिमाइज़ करना है। आप कोड लिखें इसलिए यह पहले विश्वसनीय, पठनीय और बनाए रखने योग्य है। समय से पहले अनुकूलन अधिक है, यदि अधिक नहीं है, तो एम्बेडेड सिस्टम में समस्या
जब आप "किसी भी संसाधन को बर्बाद किए बिना" कार्यक्रम करते हैं, तो क्या आप अपने समय को संसाधन मानते हैं? यदि नहीं, तो कौन आपको आपके समय के लिए भुगतान कर रहा है, और यदि कोई नहीं है, तो क्या आपके पास इससे बेहतर कुछ है। एक बार किसी भी एम्बेडेड सिस्टम डिज़ाइनर को पसंद करने के लिए हार्डवेयर की लागत बनाम इंजीनियरिंग समय की लागत होती है। यदि आप 100 यूनिट शिपिंग कर रहे हैं, तो 100,000 यूनिट में एक बड़ा माइक्रो का उपयोग करें, प्रति यूनिट $ 1.00 की बचत सॉफ्टवेयर विकास के 1 आदमी वर्ष (बाजार में समय की अनदेखी, अवसर लागत आदि) के समान है, 1 मिलियन यूनिट में, आप शुरू करते हैं संसाधन उपयोग के बारे में जुनूनी होने के लिए आरओआई प्राप्त करना, लेकिन सावधान रहें क्योंकि कई एम्बेडेड प्रोजेक्ट ने कभी भी 1 मिलियन का अंक नहीं बनाया क्योंकि वे 1 मिलियन (कम उत्पादन लागत के साथ उच्च प्रारंभिक निवेश) को बेचने के लिए डिज़ाइन किए गए थे, और वहां पहुंचने से पहले वे बस्ट हो गए।
उस ने कहा, जिन चीजों पर आपको (छोटे) एम्बेडेड सिस्टम के साथ विचार करने और जागरूक होने की आवश्यकता है, क्योंकि ये इसे काम करना बंद कर देंगे, अनपेक्षित तरीकों से, न केवल इसे धीमा करें।
a) स्टैक - आपके पास आमतौर पर केवल एक छोटे स्टैक आकार और अक्सर सीमित स्टैक फ्रेम आकार होते हैं। आपको इस बात की जानकारी होनी चाहिए कि हर समय आपका स्टैक उपयोग क्या है। चेतावनी दी है, ढेर समस्याओं सबसे कपटी दोषों में से कुछ का कारण बनता है।
बी) ढेर - फिर से, छोटे ढेर आकार इसलिए अनुचित स्मृति आवंटन के बारे में सावधान रहें। विखंडन एक मुद्दा बन जाता है। इन दोनों के साथ, आपको यह जानना होगा कि जब आप रन आउट करते हैं तो क्या करते हैं - यह ओएस प्रदान किए गए पेजिंग के कारण बड़े सिस्टम पर नहीं होता है। यानी जब मॉलॉक NULL लौटाता है, तो क्या आप इसकी जांच करते हैं और आप क्या करते हैं। हर मॉलो को एक चेक और हैंडलर, कोड ब्लोट की आवश्यकता होती है। एक गाइड के रूप में - यदि कोई विकल्प है तो इसका उपयोग न करें। अधिकांश छोटे सिस्टम इन कारणों से डायनामिक मेमोरी का उपयोग नहीं करते हैं।
c) हार्डवेयर इंटरप्ट करता है - आपको यह जानना होगा कि इनको सुरक्षित और समय पर कैसे हैंडल किया जाए। आपको यह भी जानना होगा कि सुरक्षित री-एंट्रेंस कोड कैसे बनाया जाए। उदाहरण के लिए, सी स्टैंडर्ड लिबास आमतौर पर री-एंट्रेंट नहीं होते हैं, इसलिए इन्टरल हैंडलर्स के अंदर इस्तेमाल नहीं किया जाना चाहिए।
डी) विधानसभा - लगभग हमेशा समय से पहले अनुकूलन। कम से कम उस राशि को प्राप्त करने के लिए सबसे कम राशि (इनलाइन) की जरूरत होती है जो C अभी नहीं कर सकता है। एक अभ्यास के रूप में, हाथ से तैयार की गई विधानसभा (खरोंच से) में एक छोटी सी विधि लिखें। सी। में वही करें जो प्रदर्शन को मापता है। मुझे यकीन है कि सी तेज होगा, मुझे पता है कि यह अधिक पठनीय, बनाए रखने योग्य और विस्तार योग्य होगा। अब अभ्यास के भाग 2 के लिए - असेंबली और सी में एक उपयोगी कार्यक्रम लिखें। एक
और अभ्यास के रूप में, लिनक्स कर्नेल का कितना भाग असेंबल किया जाता है, यह पढ़ा है, लिनक्स कर्नेल के बारे में नीचे का पैराग्राफ।
यह जानना योग्य है कि यह कैसे करना है, यह एक या दो सामान्य माइक्रो के लिए भाषाओं में कुशल होने के लायक भी हो सकता है।
ई) "पंजीकृत अहस्ताक्षरित चर_नाम", "रजिस्टर" है, और हमेशा रहा है, संकलक को संकेत, निर्देश नहीं, 70 के दशक की शुरुआत में (40 साल पहले), यह समझ में आया। 2012 में, यह कीस्ट्रोक्स की बर्बादी है क्योंकि कंपाइलर बहुत स्मार्ट हैं, और माइक्रोएस निर्देश इतने जटिल हैं।
अपने लिनक्स कमेंट पर वापस - आपके यहाँ समस्या यह है कि हम केवल 1 मिलियन यूनिट्स की बात नहीं कर रहे हैं, हम 100 मिलियन की बात कर रहे हैं, हमेशा के लिए। इंजीनियरिंग के समय और लागत के रूप में इसे इष्टतम रूप से प्राप्त करने के लिए जितना संभव हो उतना मूल्य है। हालांकि बहुत ही बेहतरीन इंजीनियरिंग अभ्यास का एक अच्छा उदाहरण, यह सबसे एम्बेडेड सिस्टम डेवलपर्स के लिए व्यावसायिक आत्महत्या होगा जैसा कि वंशावली की आवश्यकता होती है।