Millis () kendini 0'a nasıl sıfırlar


14

millis()Fonksiyonun belgelerine bakıldığında :

Arduino panosunun geçerli programı çalıştırmaya başlamasından bu yana geçen milisaniye sayısını döndürür. Bu sayı yaklaşık 50 gün sonra taşacak (sıfıra geri dönecektir).

Bu nasıl mümkün olabilir? Arduino millis()taşma olduğunu tespit ederse değeri 0'a sıfırlar mı? Eğer öyleyse, bunu nasıl yapıyor? Sadece millis()fonksiyon tarafından döndürülen değişken ile kaputun altında tam olarak neler olduğunu bilmek istiyorum .

Yanıtlar:


25

Bir münhasır mülkiyet değildir millis(). Sınırlı sayıda basamağa sahip herhangi bir sayaç sonunda sıfıra döner. Örneğin, 4 basamaklı bir sayım sayacı sıfırdan sonra döner 9999.

Kaputun altında, değişken Arduino'da 32 bit olan millis()tiptedir unsigned long. Bu durumda, 32 bit (ikili 0'lar ve 1'ler), sayım sayacındaki rakamlara (0'dan 9'a) benzer.

Maksimum değer 11111111 11111111 11111111 11111111. Bir kez orada, millis()eklediğinizde sıfıra döner 1. Ondalık sayı sisteminde 2^32 - 1eşit olan maksimum (32 "olanlar") 4294967295. Bu nedenle, sayaç için maksimum değer 4.294.967.295 milisaniyedir. Günlere dönüştürüldükten sonra yaklaşık 49.71 gün alırsınız.

taksitli yazar


5
Windows'un eski sürümleri de 32 bit tamsayıda milisaniye sayısını koruyarak 49 günlük çalışma süresinden sonra birçok yazılımın yanlış davranmasına neden oldu.
Russell Borogove

teşekkürler JURAJ! Sahip olduğum bir şüphe cevaplar. UPVOTED;)
tony gil

PS: Umarım düzenlemeleri onaylarsınız, birkaç cümle yapısını netleştirerek mükemmel cevabınızı eklediklerini hissediyorum.
tony gil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.