माइक्रो-नियंत्रकों के लिए कुशल सी कोड लिखने पर संसाधन? [बन्द है]


15

यहां गंभीर मदद की जरूरत है। मुझे प्रोग्रामिंग पसंद है। मैं हाल ही में सी भाषा के लिए पुस्तकों (जैसे के एंड आर) और लेखों / मंचों को ऑनलाइन पढ़ रहा हूं। यहां तक ​​कि लिनक्स कोड में देखने की कोशिश की (हालांकि, मैं खो गया था जहां शुरू करने के लिए लेकिन छोटे पुस्तकालयों में झांकने से मदद मिली?)।

मैंने एक जावा प्रोग्रामर के रूप में शुरुआत की और जावा में यह बहुत सुंदर और शुष्क है; यदि प्रोग्राम बहुत बड़ा हो जाता है, तो इसे कक्षाओं में स्लाइस करें और फिर फ़ंक्शंस में। जैसे दिशानिर्देश, कोड को पढ़ने योग्य रखते हैं और टिप्पणियां जोड़ते हैं। जानकारी छिपाने और OOP तकनीकों का उपयोग करें। जिनमें से कुछ अभी भी सी के लिए लागू होते हैं।

मैं अब सी में कोडिंग कर रहा हूं और अब तक मुझे एक या दूसरे तरीके से काम करने के लिए कार्यक्रम मिलते हैं। बहुत सारे लोग प्रदर्शन / दक्षता, एल्गोरिथ्म / डिजाइन, अनुकूलन और स्थिरता के बारे में बात करते हैं। कुछ लोग एक और फिर तनाव लेते हैं लेकिन गैर-पेशेवर सॉफ्टवेयर इंजीनियरों के लिए आप अक्सर कुछ न कुछ सुनते हैं जैसे: लिनक्स कर्नेल देव बस कोई कोड नहीं लेंगे।

मेरा सवाल यह है: मैं किसी भी संसाधन को बर्बाद किए बिना 8-बिट माइक्रोकंट्रोलर के लिए एक कोड लिखने की योजना बना रहा हूं । पता है कि मैं जावा बैकग्राउंड से आता हूं इसलिए चीजें अब समान नहीं हैं ... संसाधन / पुस्तकें / लिंक / टिप्स की बहुत सराहना की जाएगी। प्रदर्शन और आकार अब मायने रखता है। 8-बिट माइक्रो-कंट्रोलर के लिए कुशल (सर्वोत्तम प्रथाओं के भीतर) सी कोड पर संसाधन / ट्रिक्स?

इसके अलावा, inline assemblyमाइक्रो-नियंत्रक मानक के करीब चिपके हुए एक महत्वपूर्ण भूमिका निभाता है। लेकिन क्या दक्षता पर अंगूठे का सामान्य नियम है जो सभी पर लागू होता है?

उदाहरण के लिए: कभी भी register unsigned int variable_name;पसंद किया जाता है char। या uint8_t यदि आप बड़ी संख्या की जरूरत नहीं है का उपयोग कर ।

संपादित करें: सभी उत्तर और सुझावों के लिए बहुत बहुत धन्यवाद। मैं ज्ञान बांटने के लिए सभी के प्रयास की सराहना करता हूं।


2
यह अक्सर एक x86 प्रोसेसर पर मामला नहीं होता है, लेकिन एक माइक्रोकंट्रोलर पर, यदि आप यह सुनिश्चित करना चाहते हैं कि आपको प्रदर्शन की हर आखिरी बूंद मिल जाए, तो आप शायद इसके बजाय विधानसभा का उपयोग करना चाहेंगे।
री मियासका

3
@ री: हाथ से तैयार की गई असेंबली शायद ही कभी होती है, यदि कभी कम स्मृति का उपयोग करती है और आधुनिक सी संकलक की तुलना में तेज है। यह असेंबली में कोड करने के लिए समय की बर्बादी है जब यह (जैसा होना चाहिए) सी में किया जाना चाहिए
मैटनज़

1
@mattnz आधुनिक, आप कितने नए बारे में बात कर रहे हैं? सभी ईमानदारी में मैंने लगभग एक दशक में माइक्रोकंट्रोलर के लिए कोड नहीं लिखा है।
री मियाँसाका

2
एक साधारण टिप: माइक्रोकंट्रोल में, यह अभी भी आम तौर पर सच है कि "यदि यह सरल है, तो यह तेज है"। जटिल चिप्स (एआरएम और ऊपर की ओर) पर हार्डवेयर इतने अनुकूलन करता है कि आप परीक्षण करने तक कभी नहीं जानते।
जेवियर

1
रखरखाव लागत की एक विशाल वृद्धि में @ReiMiyasaka। एक अच्छा सी संकलक एक उच्च अनुभवी प्रोग्रामर के रूप में लगभग समान कोड का उत्पादन कर सकता है।

जवाबों:


33

मेरे पास 20+ साल के एम्बेडेड सिस्टम हैं, जिनमें से ज्यादातर 8 और 16 माइक्रो हैं। आपके प्रश्न का संक्षिप्त उत्तर किसी भी अन्य सॉफ़्टवेयर डेवलपमेंट के समान है - जब तक आपको पता न हो कि आपको इसकी आवश्यकता है, तब तक ऑप्टिमाइज़ न करें, और तब तक ऑप्टिमाइज़ न करें जब तक आपको पता न हो कि आपको क्या ऑप्टिमाइज़ करना है। आप कोड लिखें इसलिए यह पहले विश्वसनीय, पठनीय और बनाए रखने योग्य है। समय से पहले अनुकूलन अधिक है, यदि अधिक नहीं है, तो एम्बेडेड सिस्टम में समस्या

जब आप "किसी भी संसाधन को बर्बाद किए बिना" कार्यक्रम करते हैं, तो क्या आप अपने समय को संसाधन मानते हैं? यदि नहीं, तो कौन आपको आपके समय के लिए भुगतान कर रहा है, और यदि कोई नहीं है, तो क्या आपके पास इससे बेहतर कुछ है। एक बार किसी भी एम्बेडेड सिस्टम डिज़ाइनर को पसंद करने के लिए हार्डवेयर की लागत बनाम इंजीनियरिंग समय की लागत होती है। यदि आप 100 यूनिट शिपिंग कर रहे हैं, तो 100,000 यूनिट में एक बड़ा माइक्रो का उपयोग करें, प्रति यूनिट $ 1.00 की बचत सॉफ्टवेयर विकास के 1 आदमी वर्ष (बाजार में समय की अनदेखी, अवसर लागत आदि) के समान है, 1 मिलियन यूनिट में, आप शुरू करते हैं संसाधन उपयोग के बारे में जुनूनी होने के लिए आरओआई प्राप्त करना, लेकिन सावधान रहें क्योंकि कई एम्बेडेड प्रोजेक्ट ने कभी भी 1 मिलियन का अंक नहीं बनाया क्योंकि वे 1 मिलियन (कम उत्पादन लागत के साथ उच्च प्रारंभिक निवेश) को बेचने के लिए डिज़ाइन किए गए थे, और वहां पहुंचने से पहले वे बस्ट हो गए।

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

a) स्टैक - आपके पास आमतौर पर केवल एक छोटे स्टैक आकार और अक्सर सीमित स्टैक फ्रेम आकार होते हैं। आपको इस बात की जानकारी होनी चाहिए कि हर समय आपका स्टैक उपयोग क्या है। चेतावनी दी है, ढेर समस्याओं सबसे कपटी दोषों में से कुछ का कारण बनता है।

बी) ढेर - फिर से, छोटे ढेर आकार इसलिए अनुचित स्मृति आवंटन के बारे में सावधान रहें। विखंडन एक मुद्दा बन जाता है। इन दोनों के साथ, आपको यह जानना होगा कि जब आप रन आउट करते हैं तो क्या करते हैं - यह ओएस प्रदान किए गए पेजिंग के कारण बड़े सिस्टम पर नहीं होता है। यानी जब मॉलॉक NULL लौटाता है, तो क्या आप इसकी जांच करते हैं और आप क्या करते हैं। हर मॉलो को एक चेक और हैंडलर, कोड ब्लोट की आवश्यकता होती है। एक गाइड के रूप में - यदि कोई विकल्प है तो इसका उपयोग न करें। अधिकांश छोटे सिस्टम इन कारणों से डायनामिक मेमोरी का उपयोग नहीं करते हैं।

c) हार्डवेयर इंटरप्ट करता है - आपको यह जानना होगा कि इनको सुरक्षित और समय पर कैसे हैंडल किया जाए। आपको यह भी जानना होगा कि सुरक्षित री-एंट्रेंस कोड कैसे बनाया जाए। उदाहरण के लिए, सी स्टैंडर्ड लिबास आमतौर पर री-एंट्रेंट नहीं होते हैं, इसलिए इन्टरल हैंडलर्स के अंदर इस्तेमाल नहीं किया जाना चाहिए।

डी) विधानसभा - लगभग हमेशा समय से पहले अनुकूलन। कम से कम उस राशि को प्राप्त करने के लिए सबसे कम राशि (इनलाइन) की जरूरत होती है जो C अभी नहीं कर सकता है। एक अभ्यास के रूप में, हाथ से तैयार की गई विधानसभा (खरोंच से) में एक छोटी सी विधि लिखें। सी। में वही करें जो प्रदर्शन को मापता है। मुझे यकीन है कि सी तेज होगा, मुझे पता है कि यह अधिक पठनीय, बनाए रखने योग्य और विस्तार योग्य होगा। अब अभ्यास के भाग 2 के लिए - असेंबली और सी में एक उपयोगी कार्यक्रम लिखें। एक
और अभ्यास के रूप में, लिनक्स कर्नेल का कितना भाग असेंबल किया जाता है, यह पढ़ा है, लिनक्स कर्नेल के बारे में नीचे का पैराग्राफ।

यह जानना योग्य है कि यह कैसे करना है, यह एक या दो सामान्य माइक्रो के लिए भाषाओं में कुशल होने के लायक भी हो सकता है।

ई) "पंजीकृत अहस्ताक्षरित चर_नाम", "रजिस्टर" है, और हमेशा रहा है, संकलक को संकेत, निर्देश नहीं, 70 के दशक की शुरुआत में (40 साल पहले), यह समझ में आया। 2012 में, यह कीस्ट्रोक्स की बर्बादी है क्योंकि कंपाइलर बहुत स्मार्ट हैं, और माइक्रोएस निर्देश इतने जटिल हैं।

अपने लिनक्स कमेंट पर वापस - आपके यहाँ समस्या यह है कि हम केवल 1 मिलियन यूनिट्स की बात नहीं कर रहे हैं, हम 100 मिलियन की बात कर रहे हैं, हमेशा के लिए। इंजीनियरिंग के समय और लागत के रूप में इसे इष्टतम रूप से प्राप्त करने के लिए जितना संभव हो उतना मूल्य है। हालांकि बहुत ही बेहतरीन इंजीनियरिंग अभ्यास का एक अच्छा उदाहरण, यह सबसे एम्बेडेड सिस्टम डेवलपर्स के लिए व्यावसायिक आत्महत्या होगा जैसा कि वंशावली की आवश्यकता होती है।


4
Mattnz: यह .stackexchange साइटों पर सबसे प्रिय उत्तरों में से एक है।
अहमद मसूद

1
मैं इस उत्तर पर सुधार नहीं कर सकता। मैं केवल यह जोड़ सकता हूं कि असेंबली कोड डालना शायद ही कभी प्रदर्शन के लिए समझ में आता है, लेकिन यह I / O चिप्स या अन्य हार्डवेयर चालें जैसी चीजों के लिए समझ में आ सकता है जो सी में करना आसान नहीं हो सकता है
माइक डनलवेई

@mattnz अच्छी तरह से जवाब देने के लिए धन्यवाद। +1
AceofSpades

1
कभी-कभी सटीक समय के लिए @MikeDunlavey कोडांतरक की आवश्यकता होती है। बस एक वीडियो ओवरले समाप्त हो गया है जो I / O पिन पर NTSC वीडियो बनाने के लिए बिट बैंगिंग का उपयोग करता है, समय के संदर्भ में है - 3clock चक्र के लिए वोल्टेज उच्च, फिर 6 के लिए कम ....
मार्टिन बेकेट

@ मर्टिन: यह सही समझ में आता है। मुझे उस स्तर पर कोडित किए हुए एक लंबा समय हो गया है।
माइक डनलैवी

3

आपका प्रश्न ("संसाधनों को बर्बाद किए बिना") बहुत सामान्य है, इसलिए बहुत सलाह देना मुश्किल है। शाब्दिक रूप से लिया गया, यदि आप संसाधनों को बर्बाद नहीं करना चाहते हैं, तो शायद आपको एक कदम वापस लेना चाहिए और मूल्यांकन करना चाहिए कि क्या आपको कुछ भी करने की आवश्यकता है, अर्थात, क्या आप अन्य तरीकों से समस्या को हल कर सकते हैं।

इसके अलावा, उपयोगी सलाह आपके अवरोधों पर बहुत निर्भर है - आप किस तरह की प्रणाली का निर्माण कर रहे हैं और किस तरह के सीपीयू का उपयोग कर रहे हैं? क्या यह एक कठिन वास्तविक समय प्रणाली है? आपके पास कोड और डेटा के लिए कितनी मेमोरी है? क्या यह मूल रूप से सभी सी ऑपरेशन (सबसे विशेष रूप से, गुणन और विभाजन) और किस प्रकार के लिए समर्थन करता है? अधिक आम तौर पर: पूरी डेटा शीट पढ़ें और इसे समझें

सबसे महत्वपूर्ण सलाह: इसे सरल रखें।

उदा: जटिल डेटा संरचनाओं (हैश, पेड़, संभवतः लिंक की गई सूचियों) के बारे में भूल जाएं और निश्चित आकार के सरणियों का उपयोग करें। अधिक जटिल डेटा संरचनाओं का उपयोग माप के बाद ही साबित हो जाता है कि सरणियाँ बहुत धीमी हैं।

इसके अलावा, ओवरडिज़ाइन न करें (कुछ जावा / सी # देवों की प्रवृत्ति होती है): बहुत अधिक लेयरिंग के बिना, सीधे प्रक्रियात्मक कोड लिखें। अमूर्त एक लागत है!

वैश्विक चर और गोटो का उपयोग करने के विचार के साथ सहज हो जाओ [अपवादों की अनुपस्थिति में सफाई के लिए बहुत उपयोगी];)

यदि आपको व्यवधानों से जूझना है, तो पुनर्जन्म के बारे में पढ़ें। रेंटेंट कोड लिखना बहुत गैर-तुच्छ है।


3

मैं मैत्न्ज़ के उत्तर से सहमत हूँ - अधिकांश भाग के लिए। मैंने ३० साल पहले over० over५ पर प्रोग्रामिंग शुरू की, फिर Z80, फिर जल्दी से .०३१ में माइग्रेट हो गया। उसके बाद मैं ६ went३०० श्रृंखला के माइक्रोकंट्रोलर, फिर 86०x ,६, एक्सस्केल, एमएक्सएल और (देर से late बिट पिक्स, जो मैं गया था, के पास गया। अनुमान का मतलब है कि मैं पूरा चक्कर लगा चुका हूं। रिकॉर्ड के लिए, मैं कह सकता हूं कि FAE के कई प्रमुख माइक्रोप्रोसेसर निर्माता अभी भी कोडांतरक का उपयोग करते हैं, उद्देश्यपूर्ण कोड पुन: उपयोग के लिए ऑब्जेक्ट ओरिएंटेड फैशन में।

मुझे स्वीकृत उत्तर में जो नहीं दिख रहा है वह लक्ष्य प्रोसेसर प्रकार और / या प्रस्तावित वास्तुकला की चर्चा है। क्या यह सीमित मेमोरी के साथ 0.50 $ 8 कड़वा है? क्या यह पाइपलाइनिंग और फ्लैश के 8 मीटर के साथ एक एआरएम 9 कोर है? स्मृति प्रबंधन सहसंसाधक? क्या इसमें OS होगा? एक समय (1) लूप? एक उपभोक्ता उपकरण जिसमें 100000 इकाइयों का उत्पादन होता है? बड़े विचारों और सपनों के साथ एक स्टार्ट अप कंपनी?

हालांकि मैं इस बात से सहमत हूं कि आधुनिक कंपाइलर अनुकूलन का एक बड़ा काम करते हैं, मैंने कभी भी 30 साल में एक परियोजना पर काम नहीं किया है जहां मैंने डिबगर को बंद नहीं किया और उत्पन्न विधानसभा कोड को देखने के लिए देखें कि हुड के नीचे क्या चल रहा था ( आमतौर पर एक दुःस्वप्न जब पाइपलाइनिंग और अनुकूलन खेल में आते हैं), इसलिए विधानसभा का ज्ञान महत्वपूर्ण है।

और मेरे पास कभी सीईओ, वीपी ऑफ इंजीनियरिंग, ग्राहक नहीं थे, जिन्होंने मुझे एक गैलन कंटेनर में गैलन या सामान रखने की कोशिश करने के लिए धक्का नहीं दिया, या एक हार्डवेयर समस्या को ठीक करने के लिए सॉफ़्टवेयर समाधान का उपयोग करके $ .05 बचाएं (अरे यह सिर्फ सॉफ्टवेयर है सही? इतनी मेहनत?) मेमोरी (कोड या डेटा) ऑप्टिमाइज़ेशन हमेशा गिना जाएगा।

मेरी बात यह है कि यदि आप प्रोजेक्ट को शुद्ध प्रोग्रामिंग दृष्टिकोण से देखते हैं तो आपको एक संकरा स्कोप सॉल्यूशन वार मिलने वाला है। मैट्नज़ के पास यह अधिकार है - इसे काम करते हुए प्राप्त करें, फिर इसे तेजी से, छोटे, बेहतर तरीके से काम कर लें, लेकिन आपको कोडिंग के बारे में सोचने से पहले भी आवश्यकताओं और डिलिवरेबल्स पर बहुत समय बिताना होगा।


हाय Gio, कृपया अपने पोस्ट में अनावश्यक HTML से बचें, और इसके बजाय Markdown सिंटैक्स का उपयोग करें। आपके लिए <br />बस एन्टर प्रेस कर सकते हैं, और पैराग्राफ के लिए बस उनके बीच एक खाली लाइन छोड़ सकते हैं। इसके अलावा जब आप किसी अन्य उत्तर का संदर्भ देते हैं, तो कृपया इसमें एक लिंक जोड़ें। इस बिंदु पर केवल कुछ उत्तर हो सकते हैं, लेकिन कई पृष्ठों पर वितरित किए जा सकते हैं, और अधिक हो सकते हैं, और यह बहुत स्पष्ट नहीं होगा कि आप किस उत्तर का मतलब है। मेरे संपादन देखने के लिए संशोधन इतिहास देखें।
यनीस

@ Gio अन्य महत्वपूर्ण कारकों का उल्लेख करने के लिए धन्यवाद। +1 :)
AceofSpades

+1 - मेरे उत्तर का अच्छा विस्तार।
3

1

"क्लोज़-टू-हार्डवेयर" प्रोग्रामिंग कैसे करें, इसके बारे में मंट्ज़ जवाब बहुत अच्छी तरह से बताता है। यह आखिरकार C का मतलब क्या है।

हालाँकि, मैं यह जोड़ना चाहूंगा कि जब "क्लास" का सख्त कीवर्ड C में मौजूद नहीं है - तो हार्डवेयर के करीब होने पर भी C में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के संदर्भ में सोचना काफी सीधा है ।

आप इस जवाब पर विचार कर सकते हैं: सी कार्यक्रमों के लिए ओओ सर्वोत्तम अभ्यास जो इस बिंदु को बताते हैं।

यहाँ कुछ संसाधन हैं जो आपको C में अच्छे ऑब्जेक्ट ओरिएंटेड कोड लिखने में मदद करेंगे।

ए। C
b में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग । यह एक अच्छी जगह है जहां लोग विचारों का आदान-प्रदान करते हैं
c। और यहाँ पूरी किताब है

एक और अच्छा संसाधन मैं आपको सुझाव देना चाहता हूं:

महान कोड श्रृंखला लिखें । यह दो खंड की पुस्तक है। पहली पुस्तक में निचले स्तर के कार्यों में मशीनों के बहुत आवश्यक पहलुओं को शामिल किया गया है। दूसरी पुस्तक "निम्न स्तर पर सोच - उच्च स्तरीय लेखन" है


1

आपके पास कुछ मुद्दे हैं। क्या आप चाहते हैं कि यह प्रोजेक्ट / कोड पोर्टेबल हो? पोर्टेबिलिटी में आपके प्रदर्शन और आकार की लागत होती है, क्या आप अपनी पसंद और कार्य के मंच को अतिरिक्त आकार और कम प्रदर्शन को बर्दाश्त कर सकते हैं?

हाँ, बिल्कुल 8 बिट मशीन पर अहस्ताक्षरित इन्ट्रेट्स या शॉर्ट्स के बजाय अहस्ताक्षरित चार्ट पर लौटना, प्रदर्शन और आकार में सुधार करने का एक तरीका है। इसी तरह 16 बिट मशीन पर अहस्ताक्षरित शॉर्ट्स और 32 बिट मशीन अहस्ताक्षरित इन्टस का उपयोग करें। आप यह आसानी से देख सकते हैं कि यदि आप उदाहरण के लिए सिस्टम में पोर्टेबिलिटी के लिए हर जगह बिना प्रिंट किए हुए इन्ट्स का उपयोग करते हैं, जो कि (आरएमआर उदाहरण के लिए सबसे कम बिजली, सबसे छोटे उपकरण बाजारों में अपना रास्ता नीचे धकेलते हैं) उस कोड पर एक बहुत बड़ा रोमांटिक हॉग है एक 8 बिट माइक्रो। आप बेशक बिना इंट या शॉर्ट या चार के बिना अहस्ताक्षरित का उपयोग कर सकते हैं और संकलक को इष्टतम आकार चुनने दें।

न केवल इनलाइन विधानसभा, बल्कि सामान्य रूप से विधानसभा भाषा। इनलाइन असेंबली बहुत ही गैर-पोर्टेबल है और केवल एएसएम फ़ंक्शन को कॉल करने से बेहतर लिखना मुश्किल है। हाँ, आप कॉल सेटअप को जलाते हैं और वापस आते हैं लेकिन आसान विकास, बेहतर रखरखाव और नियंत्रण की कीमत पर। नियम अभी भी लागू होता है, इसे केवल एएसएम में लिखें यदि आपको वास्तव में आवश्यकता है, तो क्या आपने यह निष्कर्ष निकालने के लिए काम किया है कि संकलक आउटपुट इस क्षेत्र में आपकी समस्या है और आप इसे करके कितना प्रदर्शन प्राप्त कर सकते हैं। फिर पोर्टेबिलिटी और मेंटेनेंस के लिए, जैसे ही आप C और asm को मिक्स करना शुरू करते हैं, और हर बार जब आप C और asm को मिक्स करते हैं, तो आप अपनी पोर्टेबिलिटी को नुकसान पहुंचा सकते हैं, और जो इस पर काम कर रहा है या इस पर निर्भर करते हुए प्रोजेक्ट को कम रख सकते हैं। एक उत्पाद है जिसे आप अभी विकसित कर रहे हैं और किसी और को सड़क को बनाए रखना है। एक बार जब आप उस विश्लेषण को कर लेते हैं तो आपको स्वतः पता चल जाता है कि आपको इनलाइन जाना है या सीधे असेंबली में जाना है। मेरे पास क्षेत्र में 25+ वर्ष हैं, हर दिन सी और एएसएम मिश्रण लिखते हैं, हार्डवेयर / सॉफ्टवेयर परत पर / पर रहते हैं और, ठीक है, कभी भी इनलाइन एसएमएम का उपयोग न करें। यह शायद ही कभी प्रयास के लायक है, बहुत विशिष्ट संकलक, मैं जहां भी संभव हो (लगभग हर जगह) संकलक गैर-विशिष्ट कोड लिखता हूं।

आपके पूरे प्रश्न की कुंजी आपके सी कोड को अलग करना है। जानें कि संकलक आपके कोड के साथ क्या करता है, और समय के साथ, यदि आप चाहते हैं, तो आप संकलक को हेरफेर करना सीख सकते हैं जो आप उस कोड को उत्पन्न करने के लिए चाहते हैं जो बिना asm का उपयोग किए। अधिक समय के साथ आप संकलक को हेरफेर करना सीख सकते हैं, कई लक्ष्यों के लिए कुशल कोड का निर्माण करने के लिए कोड का उपयोग किए बिना कोड को अधिक पोर्टेबल बनाते हैं। आपको यह देखने में कोई समस्या नहीं होनी चाहिए कि अहस्ताक्षरित चार एक बिट बिट में अहस्ताक्षरित की तुलना में एक फ़ंक्शन से स्थिति वापसी के रूप में बेहतर काम क्यों करता है, इसी तरह अहस्ताक्षरित चार्ट 16 और 32 बिट सिस्टम पर अधिक महंगा हो जाता है (कुछ आर्किटेक्चर आपकी मदद करते हैं बाहर, कुछ नहीं)।

कुछ 8 बिट माइक्रोकंट्रोलर, सभी?, बहुत संकलक अनफ्रेंडली हैं और कोई संकलक अच्छा कोड नहीं बनाता है। उन उपकरणों के लिए एक संकलक बाजार बनाने के लिए पर्याप्त मांग नहीं है, उन लक्ष्यों के लिए एक महान संकलक बनाने के लिए इसलिए जो संकलक हैं वे अधिक व्यापार, गैर-एसएसएम प्रोग्रामर को आकर्षित करने के लिए हैं, और इसलिए नहीं कि संकलक हाथ से लिखे गए से बेहतर है । इस दुनिया में आने वाले हाथ और कूल्हे उस मॉडल को बदल रहे हैं क्योंकि आपके पास ऐसे लक्ष्य हैं जिनके पास संकलक हैं जो उन पर बहुत काम कर चुके हैं, संकलक जो बहुत अच्छे कोड का उत्पादन करते हैं, आदि। प्रोसेसर के साथ माइक्रो के लिए जैसे कि आपके पास अभी भी है। मामला जहां आपको नीचे गिरना है, लेकिन यह उतनी बार नहीं है, यह केवल संकलक को बताना बहुत आसान है कि आप क्या चाहते हैं कि इसका उपयोग न करें। ध्यान दें कि एक संकलक में हेरफेर कुछ बदसूरत, अपठनीय कोड नहीं है, वास्तव में यह विपरीत, अच्छा साफ, सीधा कोड है, शायद कुछ वस्तुओं को फिर से व्यवस्थित करना। अपने कार्यों के आकार और मापदंडों की संख्या को नियंत्रित करते हुए, उस प्रकार के संकलक के आउटपुट में बहुत अंतर होता है। बचें घी-विशेषज्ञ संकलक या भाषा, KISS की सुविधाओं, यह सरल बेवकूफ रखने के लिए, अक्सर काफी बेहतर है और तेजी से कोड पैदा करता है।


आप अपने द्वारा उत्पादित उत्पादों के प्रकार को नहीं बताते हैं, मुझे लगता है कि यह बहुत अधिक मात्रा, कम मार्जिन या पागल मार्जिन के साथ विशिष्ट आला बाजार है। व्यवसाय के स्तर पर निर्णय लेने के लिए यह महत्वपूर्ण है कि क्या आप एक छोटे से 8 बिट माइक्रो और हैंड क्राफ्टेड असेंबलर, या एक बड़े माइक्रो और सी का उपयोग करें। आपकी (हटाए गए?) टिप्पणी के अनुरुप - मैं 8 बिट माइक्रो के साथ काम करता हूं, हालांकि हम? आवश्यकता से अधिक सूक्ष्म के साथ शुरू करें और जब बीओएम लागत एक मुद्दा बन जाता है, तब ही संशोधित करें) बाजार के लिए समय, अफीम की लागत और परिशोधन विकास लागत हमें बीओएम में 10 या 20 सेंट जोड़ने की अनुमति देते हैं।
मटनज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.