सेल्फ ड्राइविंग कार पार्ट 1 के लिए एंबेडेड सी
पूर्णांक प्रकार
तो आप WAYMO जैसी सेल्फ-ड्राइविंग कार या Nest जैसे स्मार्ट थर्मोस्टेट के लिए एम्बेडेड कोड लिखने के लिए तैयार हैं। आप एक कोड लिखना चाहते हैं जो एक विशिष्ट प्रोसेसर के पास कुछ सेंसर डेटा का विश्लेषण करने के लिए निर्णय लेने के लिए सही मोड़ या गर्मी चालू करने जैसे निर्णय लेने के लिए जाएगा।
आइए वापस बैठते हैं, और थोड़ा गहराई से सोचते हैं। आइए समस्या को तोड़ें। आइए समस्या के केवल एक विशेष भाग पर ध्यान दें।
उदाहरण के तौर पर, मैं केवल एक ही समस्या के बारे में बात करने जा रहा हूं जो स्वयं-ड्राइविंग वाहन के वर्तमान स्थान को संसाधित करेगा जिसे तकनीकी शब्दावली में LOCALIZATION कहा जाता है। जो मेरे अनुभव में तकनीकी रूप से सबसे कठिन समस्या है।
स्थानीयकरण समस्या में, कई सेंसर डेटा होते हैं जो वर्तमान स्थान के बारे में निर्णय लेने में मदद करते हैं, जिस दिशा में वह जा रहा है और साथ ही मुद्रा (TRX की तरह कूदना)। हम यह सोचने पर ध्यान केंद्रित करेंगे कि वाहन आगे बढ़ने वाला है और हमें केवल यह जानने की जरूरत है कि यह कितना आगे बढ़ा।
आइए समस्या को और सरल करें। हम यह मान लेंगे कि जिस तरह से गंजे लोग FAST & FURIOUS में गाड़ी चलाते हैं, वैसे ही टायर का कोई फिसलन नहीं होगा। और यह भी मान लें कि टायर पूरी तरह से गोल है और परिधि में परिवर्तित टायर का प्रत्येक घुमाव आपको आत्मविश्वास से बता सकता है कि हम कितनी दूरी आगे बढ़े हैं।
यह देखते हुए, हम टायर के आकार को जानते हैं, हमें बस यह जानने की जरूरत है कि टायर कितनी बार घुमाया गया। उसके लिए, हमारे पास एक सेंसर है जिसे एनकोडर कहा जाता है, जो व्हील रोटेशन का ट्रैक रखता है।
आप एक एन्कोडर को बाइक के पहिये के रूप में सोच सकते हैं। तस्वीर में, यह पहिया में बोला हुआ दिखाता है। आप तस्वीर से देख सकते हैं कि पहिए के लिए करीब 48 तीलियां हैं।
अब अगर मैं साइकिल के आगे के कांटे में फंसा हुआ एक छोटा व्यक्ति बन जाऊं, और मुझे एक बकरी पर बंधी आंख की तरह एक-दिशात्मक दृष्टि है, तो मैं एक समय में केवल एक ही बात कर सकता हूं।
अगर मैं यह निर्धारित करना चाहता हूं कि पहिया प्रति मिनट कितनी बार घूमता है, तो मैं स्टॉपवॉच के साथ वहां रहूंगा और जितनी बार मैं बोलता हूं उसे गिनूंगा। मान लीजिए मैंने एक मिनट में 960 बोले गए गिने। यानी मेरा पहिया 20 बार घूमा।
मान लीजिए मेरे पहिये की परिधि 2200 मिमी है। इसका मतलब है कि मेरी साइकिल ने 2200*20 = 44000 मिमी या 44 मीटर की यात्रा की। यह ठीक उसी तरह है जैसे किसी वाहन में कोणीय स्थिति रिज़ॉल्वर/एनकोडर।
लेकिन असल जिंदगी में नंबर गिनने वाले वाहन के कांटे या धुरी में कोई मैं बैठा नहीं है। एक एम्बेडेड नियंत्रक हमारे लिए ऐसा करने जा रहा है।
आइए अब सोचें कि इसके लिए महत्वपूर्ण डिजाइन विचार क्या हैं। मेरे एम्बेडेड नियंत्रक में, मैं इस डेटा को स्टोर करना चाहता हूं। अब मैं इसे कैसे परिभाषित करूं?
इसलिए हमें हमेशा एम्बेडेड एप्लिकेशन के लिए निम्नलिखित प्रमुख प्रदर्शन मैट्रिक्स का उपयोग करके अपनी रुचि के चर के लिए डेटाटाइप चुनना चाहिए:
- स्मृति:
2. भंडारण:
हमें उस चर का उपयोग करने की आवश्यकता हो सकती है जिसे हम कुछ करने के लिए एक छोटे कार्यक्रम में घोषित कर रहे हैं। इसलिए यदि हम एक बड़े चर का उपयोग करते हैं, तो प्रोग्राम/निष्पादन योग्य आकार बड़ा होने वाला है और भंडारण को खा जाता है।
3. प्रसंस्करण शक्ति:
पहले जैसा ही तर्क। यदि आप बड़े चर प्रकार को परिभाषित करते हैं, तो प्रोसेसर को चर से संबंधित किसी भी चीज़ को संसाधित करने में अधिक समय लगने वाला है। तो फिर, जितना छोटा आप फिट हो सकते हैं उतना बेहतर है।
4. हार्डवेयर विशिष्ट:
कभी-कभी, आप जिस हार्डवेयर का उपयोग कर रहे हैं, उसमें डेटाटाइप पर प्रतिबंध हो सकता है। आपको उस पर जांच करने की जरूरत है। उस विशेष हार्डवेयर सेट के लिए रजिस्टर में उपयोग किया जाने वाला मेमोरी मैप आपके चर के लिए डेटा प्रकार चुनते समय एक बाधा हो सकता है।
अब एक विशेष आर्किटेक्चर के लिए उपरोक्त कथन को देखते हैं। यदि हम अपने एन्कोडर डेटा के लिए 32-बिट इंस्ट्रक्शन सेट आर्किटेक्चर (आईएसए) लेते हैं, तो हमें इंटरगर प्रकार पर ध्यान केंद्रित करने की आवश्यकता है जो यह समर्थन कर सकता है।
यह आर्किटेक्चर शॉर्ट / शॉर्ट इंट का समर्थन कर सकता है जिसमें 16 बिट्स का विशिष्ट आकार होता है, जो कि अहस्ताक्षरित के लिए 0 से 65,535 और हस्ताक्षरित के लिए -32,768 से 32767 तक होता है।
यह आर्किटेक्चर इंट डेटा टाइप को भी सपोर्ट कर सकता है जो 32 बिट तक जा सकता है। यह अहस्ताक्षरित के लिए 0 से 4,294,967,296 या हस्ताक्षरित के लिए -2.147e9 से +2.147e9 तक की सीमा बनाता है।
मान लीजिए कि व्हील स्पीड सेंसिंग के लिए हम जिस एन्कोडर का उपयोग कर रहे हैं, वह बिल्कुल बाइक व्हील स्पोक्स के समान है। तो हमें 48 तक गिनने की जरूरत है। लेकिन क्या आप हमारे व्हील स्पीड सेंसिंग के लिए सीधे इंट या शॉर्ट का उपयोग करना चाहते हैं। यहां तक कि अगर हम शॉर्ट इंट का उपयोग करते हैं, तब भी मैं जिस तरह से उपयोग करने की आवश्यकता से अधिक मेमोरी का उपयोग कर रहा हूं। इसके अतिरिक्त, यदि मैं इस डेटा का उपयोग करके कोई प्रसंस्करण करने की योजना बना रहा हूं (उदाहरण के लिए, संचार के लिए नमूनाकरण), तो मैं और भी अधिक भंडारण के साथ-साथ प्रसंस्करण शक्ति का उपयोग कर समाप्त करूंगा। एक चेन रिएक्शन की तरह लगता है ना?
तो स्मृति उपयोग के विस्फोट को रोकने के लिए, हम कुछ और कर सकते हैं। और वैज्ञानिकों और प्रारंभिक वास्तुकला विशेषज्ञों के लिए धन्यवाद। हम <stdint.h> लाइब्रेरी का उपयोग कर सकते हैं। निम्नलिखित बोनस के साथ आता है:
- यह हमें इंट वैरिएबल के सटीक वाइड को परिभाषित करने में मदद कर सकता है।
- यह हमें पोर्टेबिलिटी के लिए भी मदद करता है
- पठनीयता में भी हमारी मदद करता है
हम बस इसे int8_t का उपयोग करके परिभाषित करते हैं। यदि हमें गिनने के लिए आवश्यक संख्या 128 से ऊपर जाती है, लेकिन 255 से नीचे रहती है, तब भी हम डेटाटाइप uint8_t का उपयोग करके 8 बिट इंटरगर का उपयोग कर सकते हैं। इस तरह हम अन्य जटिल कार्यों के लिए प्रोसेसर मेमोरी के साथ-साथ अन्य गोला बारूद को बचाते हैं।
तो यहां विभिन्न प्रकार हैं जिनका आप उपयोग कर सकते हैं
int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t
संक्षेप में, अपने एम्बेडेड एप्लिकेशन के लिए डेटाटाइप तय करते समय हमेशा निम्नलिखित के प्रति बहुत चौकस रहें।
- स्पष्टता और मजबूती के लिए हमेशा पोर्टेबल, निश्चित आकार के प्रकारों का उपयोग करें
- सिस्टम के लोगों के साथ परामर्श करें या आवश्यक सीमा और सबसे छोटे प्रकार का अनुमान लगाने के लिए फिजिक्स का उपयोग करें।