মিলিস () কীভাবে নিজেকে 0 এ পুনরায় সেট করে


14

millis()ফাংশনটির জন্য ডকুমেন্টেশনের দিকে তাকিয়ে বলা হয়েছে:

আরডুইনো বোর্ড বর্তমান প্রোগ্রামটি চালানো শুরু করার পর থেকে মিলিসেকেন্ডের সংখ্যাটি দেয়। এই সংখ্যাটি প্রায় 50 দিন পরে উপচে পড়বে (শূন্যে ফিরে যাবে)।

এটা কীভাবে সম্ভব? millis()ওভারফ্লো যখন তখন আরডুইনো সনাক্ত করছে তখন মানটি 0-এ পুনরায় সেট করে? যদি তাই হয়, এটি এটি কিভাবে করে? আমি কেবল millis()ফাংশনটি দিয়ে ফিরিয়ে দেওয়া ভেরিয়েবলের সাথে হুডের নীচে ঠিক কী চলছে তা জানতে চাই ।

উত্তর:


25

এটি এর একচেটিয়া সম্পত্তি নয় millis()। সীমিত সংখ্যার সংখ্যার যে কোনও কাউন্টার শেষ পর্যন্ত শূন্যে ফিরে আসে। উদাহরণস্বরূপ, 4 অঙ্কের ট্যালি কাউন্টার পরে শূন্যগুলিতে ফিরে আসে 9999

ফণা অধীনে, জন্য পরিবর্তনশীল millis()ধরনের হয় unsigned long, যা Arduino উপর 32 বিট। এই ক্ষেত্রে, 32 বিট (বাইনারি 0 এর এবং 1 এর) ট্যালি কাউন্টারে অঙ্কগুলি (0 থ্রু 9) এর সমান।

সর্বোচ্চ হয় 11111111 11111111 11111111 11111111। একবার যুক্ত হয়ে millis()গেলে আপনি যুক্ত করলে শূন্যে ফিরে আসে 1। সর্বাধিক (32 "একটি") 2^32 - 1, যা 4294967295দশমিক সংখ্যা সিস্টেমের সমান । কাউন্টারটির সর্বোচ্চ মান হ'ল 4,294,967,295 মিলি সেকেন্ড onds আপনি আনুমানিক 49.71 দিন পান এমন দিনগুলিতে রূপান্তরিত।

ট্যালি কোটার


5
উইন্ডোজের পুরানো সংস্করণগুলিও 32-বিট পূর্ণসংখ্যায় একটি মিলিসেকেন্ড গণনা বজায় রেখেছে, ফলে 49 দিনের আপটাইম পরে প্রচুর সফ্টওয়্যার দুর্ব্যবহার করেছে।
রাসেল বোরোগোভ

ধন্যবাদ জুরজ! আমার একটি দীর্ঘকালীন সন্দেহের উত্তর দেয়। আপলোড করা;)
টনি গিল

পিএস: আমি আশা করি আপনি সম্পাদনাগুলি অনুমোদন করেছেন, আমি মনে করি তারা কয়েকটি বাক্য কাঠামো পরিষ্কার করে আপনার দুর্দান্ত উত্তরে যুক্ত করেছে।
টনি গিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.