बहुत सारे Arduinos में प्रयुक्त ATmega328 एक 8-बिट माइक्रोकंट्रोलर है। इसका मतलब है कि रजिस्टर 8-बिट हैं, डेटा बस 8-बिट है, पोर्ट 8-बिट हैं। सिस्टम में कुछ न्यूनतम 16-बिट पहलू हैं (जैसे टाइमर में से एक), लेकिन लगभग सब कुछ 8-बिट्स है।
इसलिए, अधिकांश ऑपरेशन एक बार में 8-बिट्स को संभालते हैं। 8-बिट्स (यानी 16-बिट या 32-बिट पूर्णांक और फ़्लोटिंग पॉइंट नंबर) को छोड़कर किसी भी चीज़ पर काम करने के लिए आवश्यक रूप से सॉफ़्टवेयर इम्यूलेशन के रूप में वर्णित किया जा सकता है, जहां कंपाइलर इन बड़े चर पर काम करने के लिए कई निर्देशों का उपयोग करता है।
8-बिट स्पष्ट रूप से 8-बिट पोर्ट को संबोधित करने के लिए पर्याप्त है। यह कई लूप काउंटर, रिटर्न वैल्यू और एएससीआईआई कैरेक्टर से निपटने के लिए भी पर्याप्त है। यह वास्तव में पर्याप्त नहीं है जब संख्या के साथ काम कर रहा है। एक हस्ताक्षरित 8-बिट इंट (int8_t) केवल -128-> +127 का प्रतिनिधित्व कर सकता है। Unsigned (uint8_t) केवल 0 -> 255 का प्रतिनिधित्व कर सकता है।
8-बिट पूर्णांक काफी सीमित हैं। C / C ++ int को कम से कम -32,678 -> +32,767 का प्रतिनिधित्व करना चाहिए ताकि int16_t पर नक्शे - सबसे छोटा आकार जो ऐसा करेगा। यह सीमा और दक्षता का एक अच्छा संतुलन देता है। यह विशेष रूप से महत्वपूर्ण है जब शुरुआती सीख रहे हैं - अतिप्रवाह वास्तव में ऐसा कुछ नहीं है जो गैर-प्रोग्रामर समझें।
हालांकि ऐसा करने का एक प्रदर्शन प्रभाव है, क्योंकि अधिकांश 16-बिट ऑपरेशन 8-बिट ऑपरेशन के रूप में कम से कम दो बार लेते हैं, और कई रजिस्टरों के रूप में दो बार उपयोग करते हैं। इससे आपको कोई फर्क पड़ सकता है या नहीं।
हम में से कई लोग देशी प्रकारों जैसे कि int8_t और uint8_t पर स्विच करते हैं क्योंकि यह आपको कहीं अधिक नियंत्रण प्रदान करता है।
int
Arduino ड्यू पर 4 बाइट्स है। एकshort
सभी मौजूदा Ardunios पर 2 बाइट हो जाएगा, लेकिन मैं उपयोग करने के लिए दूसरों की सलाह पर जोर देनाint16_t
याuint16_t
।