कैसे मिलिस () खुद को 0 पर रीसेट करता है


14

millis()फ़ंक्शन के लिए दस्तावेज़ को देखते हुए , यह कहता है:

Arduino बोर्ड चालू कार्यक्रम चलाने के बाद से मिलीसेकंड की संख्या लौटाता है। लगभग 50 दिनों के बाद यह संख्या ओवरफ्लो हो जाएगी (शून्य पर वापस जाएँ)।

यह कैसे संभव है? क्या millis()अतिप्रवाह का पता लगाना जब अतिप्रवाह होता है तो मान 0 पर रीसेट हो जाता है? यदि हां, तो यह कैसे करता है? मैं सिर्फ यह जानना चाहता हूं कि millis()फंक्शन के द्वारा लौटाए जा रहे वेरिएबल के साथ हुड के नीचे क्या चल रहा है।

जवाबों:


25

यह कोई विशेष संपत्ति नहीं है millis()। सीमित अंकों की संख्या वाला कोई भी काउंटर अंततः शून्य पर लौट आता है। उदाहरण के लिए, एक 4 अंकों का टैली काउंटर शून्य के बाद रिटर्न करता है 9999

हुड के तहत, चर millis()प्रकार का है unsigned long, जो कि अरुडिनो पर 32 बिट्स है। इस मामले में, 32 बिट्स (बाइनरी 0 और 1) टैली काउंटर पर अंकों (0 थ्रू 9) के समान हैं।

अधिकतम है 11111111 11111111 11111111 11111111। एक बार millis()जब आप जोड़ते हैं तो शून्य पर लौटता है 1। अधिकतम (32 "वाले") है 2^32 - 1, जो 4294967295दशमलव संख्या प्रणाली में बराबर है। इसलिए, काउंटर का अधिकतम मूल्य 4,294,967,295 मिलीसेकंड है। दिनों में परिवर्तित आपको लगभग 49.71 दिन मिलते हैं।

टैली कप्टर


5
विंडोज के पुराने संस्करणों ने भी 32-बिट पूर्णांक में एक मिलीसेकंड गिनती बनाए रखी, जिससे बहुत सारे सॉफ़्टवेयर 49 दिनों के अपटाइम के बाद दुर्व्यवहार करते हैं।
रसेल बोरोगोव

धन्यवाद JURAJ! एक सुस्त शक का जवाब मेरे पास था। UPVOTED;)
tony gil

पुनश्च: मुझे उम्मीद है कि आप संपादन को मंजूरी दे देंगे, मुझे लगता है कि वे आपके उत्कृष्ट उत्तर को कुछ वाक्य संरचनाओं को स्पष्ट करके जोड़ते हैं।
टोनी गिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.