विविध

माइक्रोकंट्रोलर में कोड अनुकूलन

लेखक: Laura McKinney
निर्माण की तारीख: 4 अप्रैल 2021
डेट अपडेट करें: 16 मई 2024
Anonim
माइक्रोकंट्रोलर्स के लिए सी का अनुकूलन - सर्वोत्तम अभ्यास - खेम राज, कॉमकास्ट आरडीके
वीडियो: माइक्रोकंट्रोलर्स के लिए सी का अनुकूलन - सर्वोत्तम अभ्यास - खेम राज, कॉमकास्ट आरडीके

विषय

लेखक ने इन उपकरणों में व्यापक अंतर्दृष्टि प्राप्त करते हुए dsPic माइक्रो-कंट्रोलर्स के साथ अपनी अंतिम वर्ष की इंजीनियरिंग परियोजना को पूरा किया।

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

  1. कोड का आकार: माइक्रोकंट्रोलर सीमित डेटा और निर्देशों को अपने रैम के सीमित आकार के कारण स्टोर कर सकते हैं। इसलिए कोड को अनुकूलित करने की आवश्यकता है, ताकि उपलब्ध निर्देश और डेटा मेमोरी का उपयोग सबसे कुशल तरीके से किया जा सके।
  2. कोड निष्पादन समय: माइक्रोकंट्रोलर अनुक्रमिक उपकरण हैं जो एक समय में एक निर्देश को निष्पादित करते हैं। प्रत्येक विधानसभा निर्देश खुद को निष्पादित करने के लिए एक निश्चित संख्या में घड़ी चक्र का उपभोग करता है। इसलिए यह सुनिश्चित करने के लिए कि यह कम से कम घड़ी चक्र या विधानसभा निर्देशों में आवश्यक कार्य करता है, कोड को अनुकूलित किया जाना चाहिए। एक कोड का उपयोग कम घड़ी चक्र, तेजी से चलता है। इसका मतलब है कि अनुप्रयोग तेजी से चल सकते हैं क्योंकि प्रसंस्करण समय कम से कम हो जाता है।

यह आलेख उन युक्तियों और युक्तियों को प्रस्तुत करता है जिन्हें माइक्रो-कंट्रोलर कोड के आकार और निष्पादन के समय को कम करने के लिए नियोजित किया जा सकता है।


माइक्रोचिप के MplabX विकास आईडीई का उपयोग उन उदाहरणों को प्रदर्शित करने के लिए किया जाएगा जहां उपयुक्त हैं।

प्रयोगात्मक रूप से कोड निष्पादन समय को कैसे मापें

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

  • कुछ संकलक घड़ी चक्रों को गिनने की क्षमता रखते हैं जो एक कोड का उपभोग करेगा।
  • कुछ डीबगर उदाहरण के लिए माइक्रोचिप से ICD 3 सीधे स्टॉपवॉच के माध्यम से निष्पादन समय को माप सकते हैं।

1. अपने माइक्रोकंट्रोलर की प्रोसेसिंग पावर और मेमोरी साइज़ को जानें

यह हमेशा घड़ी की आवृत्ति (Mhz) नहीं होती है जो माइक्रो-कंट्रोलर के प्रसंस्करण की गति की सच्ची तस्वीर देती है, एक अधिक यथार्थवादी माप MIPS (प्रति सेकंड मेगा निर्देश) या एक सेकंड में MCU निर्देशों की संख्या निष्पादित कर सकती है।

MCU आमतौर पर उच्च अंत श्रेणी में 60-70 MIPS से लेकर 20 MIPS 8-बिट AVR तक होते हैं। एक उच्च एमआइपी माइक्रो-नियंत्रक अधिक महंगा होने की संभावना है, एक कम-अंत डिवाइस तो यहां आपके पास लागत और प्रसंस्करण गति के बीच व्यापार बंद है।


माइक्रो-कंट्रोलर्स में डेटा और प्रोग्राम कोड स्टोर करने के लिए अलग मेमोरी होती है। दोनों का आकार डेटशीट से पाया जा सकता है। यदि आपका कोड काफी बड़ा है, तो आपको बड़े मेमोरी साइज़ के साथ MCU की आवश्यकता हो सकती है।

2. कोड आकार में अनुकूलन के लिए चर की पसंद

माइक्रो-कंट्रोलर्स में सीमित डेटा मेमोरी होती है, जो आमतौर पर 1 से 4 केबीट्स तक होती है। इस मामले में संग्रहित होने की अपेक्षित सीमा के अनुसार सबसे उपयुक्त परिवर्तनीय प्रकार चुनना बुद्धिमानी है। नीचे दी गई तालिका इन चरों को सारांशित करती है:

C- भाषा में प्रयुक्त चर का सारांश।

चर प्रकारबाइट्स में आकाररेंज

बूल

1

केवल 0 या 1

चार

1


-128 से 127

पूर्णांक

2

-32,768 से 32,767

अहस्ताक्षरित int

2

0 से 65,535 रु

लंबा

4

-2,147,483,648 से 2,147,483,647

नाव

4

6 दशमलव स्थानों तक सटीक

दोहरा

8

15 दशमलव स्थानों तक सटीक

लंबा दोहरा

10

19 दशमलव स्थानों तक सटीक

उदाहरण:

  • यदि दो चर X और Y जोड़े जाने हैं और परिणाम Z में संग्रहीत किया जाना है, लेकिन Z का मान अधिक होने की उम्मीद है, तो 65,535 इसके अलावा तब Z को दीर्घ घोषित किया जा सकता है और X और Y को अहस्ताक्षरित घोषित किया जा सकता है int, X और Y के मान भी नकारात्मक जाने की उम्मीद नहीं है। यह डेटा मेमोरी में 04 बाइट्स को बचाएगा जो अन्यथा उपयोग किया जाएगा यदि सभी चर को लंबे समय तक घोषित किया जाना था।
  • दो चर X और Y, जिनके मान पूरी संख्या में होने की उम्मीद है, उन्हें विभाजित किया जाना है, लेकिन विभाजन के परिणाम में दशमलव आ सकता है, तो X और Y को अंतर घोषित किया जा सकता है और परिणाम के आधार पर फ्लोट या डबल घोषित किया जा सकता है परिशुद्धता की आवश्यकता है।

बड़ी संख्या में तत्वों वाले सरणियों की घोषणा करते समय डेटा प्रकार की पसंद महत्वपूर्ण हो सकती है।

3. कोड निष्पादन समय में अनुकूलन के लिए चर की पसंद

  • यह एक स्थापित तथ्य है कि फ्लोटिंग-पॉइंट गणना निर्धारित-पॉइंट गणना से अधिक समय लेती है। फ़्लोटिंग-पॉइंट वैरिएबल का उपयोग न करें जहाँ दशमलव मान की आवश्यकता नहीं है। जहां भी संभव हो अहस्ताक्षरित पूर्णांक के साथ काम करें।
  • स्थानीय चर वैश्विक चर के लिए पसंद किए जाते हैं। यदि किसी फ़ंक्शन में एक वैरिएबल का उपयोग किया जाता है, तो उसे उस फ़ंक्शन में घोषित किया जाना चाहिए, क्योंकि वैश्विक चर का उपयोग करना स्थानीय चरों की तुलना में धीमा है।
  • 8-बिट MCU एक एकल बाइट-आकार वाले चर का उपयोग करने के लिए तेज़ी से मिलेगा और 16-बिट MCU एक 2-बाइट चर को प्राप्त पते की लंबाई के कारण उपयोग करने में आसान होगा।

4. अंकगणित संचालन का अनुकूलन

अंकगणित संचालन को निम्नलिखित तरीकों से अनुकूलित किया जा सकता है।

  1. साइन या किसी अन्य त्रिकोणमितीय फ़ंक्शन या किसी अन्य ऑपरेशन का मूल्यांकन करने के बजाय पूर्व-परिकलित मानों के लुक-अप तालिकाओं का उपयोग करें, जिसका परिणाम कोड में पहले से जाना जा सकता है।
  2. यदि एक साइन लुक-अप तालिका पहले से ही मेमोरी में संग्रहीत होती है, तो 90 डिग्री के बराबर सरणी पॉइंटर को आगे बढ़ाकर एक कोसाइन का मूल्यांकन किया जा सकता है।
  3. चार अंकगणितीय ऑपरेशनों में, विभाजन और गुणा में सबसे अधिक प्रसंस्करण समय लगता है, व्यवहार में यह सैकड़ों-माइक्रो-सेकंड की सीमा में या फ्लोटिंग-पॉइंट मानों के मामले में हो सकता है।
  4. विभाजन और गुणा के बजाय बिट शिफ्ट निर्देशों का उपयोग करें। एक सही बदलाव निर्देश 3 3 को 2 से विभाजित करने का कार्य करता है3 जहां एक बाएं शिफ्ट निर्देश 1 के रूप में 2 से गुणा करना होगा1.

5. गहन गणना के लिए एक डीएसपी सक्षम माइक्रोकंट्रोलर का उपयोग करें

कुछ सूक्ष्म नियंत्रकों में एक डीएसपी प्रसंस्करण इकाई होती है, फिर उनके वास्तुकला में निर्मित पारंपरिक ALU। यह डीएसपी इंजन कम से कम घड़ी चक्र (ज्यादातर मामलों में एक) में कई बार तेजी से और फिर ALU में अंकगणितीय गणना करने के लिए तैयार है।

एक डीएसपी प्रोसेसर निर्देश तेजी से बाहर ले जा सकता है तो एक ALU हैं:

  • बिट शिफ्ट और निर्देश बारी बारी से।
  • गुणन, विभाजन और अन्य अंकगणितीय ऑपरेशन।
  • सिन और अन्य त्रिकोणमितीय कार्यों का मूल्यांकन।
  • सभी डीएसपी परिचालन जैसे एफएफटी, डीएफटी, दृढ़ संकल्प और एफआईआर फ़िल्टरिंग।

एक माइक्रोकंट्रोलर के डीएसपी इंजन का उपयोग करने की आवश्यकता है कि:

  • अलग डीएसपी पुस्तकालयों को परियोजना में शामिल किया गया है।
  • कार्यों के नाम सी-भाषा के मानक गणित पुस्तकालय से अलग हैं। इन पुस्तकालयों और कार्यों का दस्तावेज़ीकरण संबंधित निर्माताओं की वेबसाइट से लिया जा सकता है।
  • डीएसपी इंजन एक अलग चर प्रकार 'आंशिक' का उपयोग करता है। डीएसपी पुस्तकालय कार्यों के साथ आगे बढ़ने से पहले आंशिक प्रकार चर का उपयोग करना सीखें।

ध्यान दें कि मानक गणित पुस्तकालय फ़ंक्शन डीएसपी इंजन को लागू नहीं करेंगे क्योंकि वे ALU विधानसभा निर्देशों में अनुवादित हो जाते हैं।

6. इंटरप्ट के साथ काम करें

विशिष्ट कार्य करने के लिए व्यवधान का उपयोग करें जैसे:

  • एडीसी मूल्यों को पढ़ना।
  • UART से भेजना और प्राप्त करना।
  • पीडब्लूएम ड्यूटी साइकिल रजिस्टर को अपडेट करना।
  • कर सकते हैं या I2C संचार।

फ़ंक्शन कॉल या इनलाइन कोड के माध्यम से मुख्य बॉडी में प्रदर्शन करने की तुलना में इंटरप्ट इन कार्यों को जल्दी से सेवा देगा।

इंटरप्रिट्स केवल आवश्यक होने पर भी ट्रिगर होंगे, जबकि अगर मुख्य बॉडी में कोड किया गया है, तो कोड (1) लूप के हर पुनरावृत्ति में निष्पादित होगा।

7. बेस्ट अवेलेबल कम्पाइलर्स का इस्तेमाल करें

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

8. सशर्त रूप से बुद्धिमानी से उपयोग करें

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

9. इनलाइन फंक्शन्स का उपयोग करें

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

  • इसके साथ 'स्टेटिक' कीवर्ड का उपयोग करके एक फ़ंक्शन को इनलाइन घोषित किया जा सकता है।

10. घटे हुए लूप का उपयोग करें

एक बढ़े हुए लूप एक वृद्ध लूप की तुलना में कम विधानसभा कोड उत्पन्न करेगा।

ऐसा इसलिए है क्योंकि वृद्धिशील लूप में, लूप इंडेक्स अधिकतम मान तक पहुंचने के लिए लूप इंडेक्स की तुलना हर लूप में अधिकतम मान के साथ करने के लिए एक तुलना निर्देश की आवश्यकता होती है। एक डीप्रेशन लूप में इसके विपरीत, इस तुलना की अब और जरूरत नहीं है क्योंकि लूप इंडेक्स के डीग्रेडेड परिणाम शून्य पर पहुंचने पर SREG में शून्य ध्वज सेट कर देगा।

यह देखते हुए कि लूप को सौ बार चलना पड़ता है, लूप से एक निर्देश को कम करने से यह एक सौ बार निष्पादित होने से बच जाता है, इसलिए जब लूप को कई बार चलना पड़ता है तो प्रभाव अधिक महत्वपूर्ण होता है।

ऊपर लपेटकर

ये युक्तियां सहायक हो सकती हैं, लेकिन उनका सही अनुप्रयोग और सामर्थ्य प्रोग्रामर के कौशल और उसके कोड पर उसके आदेश पर निर्भर करता है। याद रखें, कार्यक्रम का आकार हमेशा निष्पादन के समय को निर्धारित नहीं करता है, कुछ निर्देश अधिक घड़ी चक्र का उपभोग कर सकते हैं तो दूसरे को एक बार फिर कार्यक्रम के कौशल को अपनी भूमिका निभानी चाहिए।

यह लेख लेखक के सर्वोत्तम ज्ञान के लिए सटीक और सत्य है। सामग्री केवल सूचना या मनोरंजन के उद्देश्यों के लिए है और व्यवसाय, वित्तीय, कानूनी या तकनीकी मामलों में व्यक्तिगत सलाह या पेशेवर सलाह के लिए स्थानापन्न नहीं है।

हम सलाह देते हैं

आज पॉप

BenQ eReading: आधुनिक क्रिएटिव के लिए परफेक्ट एलईडी डेस्क लैंप?
कंप्यूटर

BenQ eReading: आधुनिक क्रिएटिव के लिए परफेक्ट एलईडी डेस्क लैंप?

मेरी रुचि के क्षेत्रों में कंप्यूटर, ऑडियो रिकॉर्डिंग तकनीक और स्टूडियो सेटअप और बीच में किसी भी तरह के हार्डवेयर शामिल हैं।जैसा कि आप मेरे अन्य लेखों से अलग हो सकते हैं, मैं एलईडी प्रकाश व्यवस्था के ...
CPU के मुख्य कार्य क्या हैं?
कंप्यूटर

CPU के मुख्य कार्य क्या हैं?

लेखक इलेक्ट्रॉनिक्स, कंप्यूटर और हस्तशिल्प के बारे में भावुक है।सीपीयू, या सेंट्रल प्रोसेसिंग यूनिट, हर कंप्यूटर का दिल और दिमाग दोनों है। हम में से बहुत से लोग यह नहीं जानते हैं कि यह इकाई कंप्यूटर क...