Bagaimana millis () mengatur ulang dirinya sendiri ke 0


14

Melihat dokumentasi untuk millis()fungsi tersebut, dikatakan:

Mengembalikan jumlah milidetik sejak dewan Arduino mulai menjalankan program saat ini. Jumlah ini akan melimpah (kembali ke nol), setelah sekitar 50 hari.

Bagaimana ini mungkin? Apakah Arduino mendeteksi ketika millis()meluap kemudian mengatur ulang nilai ke 0? Jika demikian, bagaimana cara melakukannya? Saya hanya ingin tahu apa yang sebenarnya terjadi di bawah tenda dengan variabel yang dikembalikan oleh millis()fungsi.

Jawaban:


25

Ini bukan properti eksklusif millis(). Penghitung apa pun dengan jumlah digit terbatas akhirnya kembali ke nol. Misalnya, penghitung penghitungan 4 digit kembali ke nol setelahnya 9999.

Di bawah tenda, variabel untuk millis()adalah tipe unsigned long, yaitu 32 bit pada Arduino. Dalam hal ini, 32 bit (biner 0 dan 1) mirip dengan digit (0 sampai 9) pada penghitungan penghitungan.

Maksimumnya adalah 11111111 11111111 11111111 11111111. Sesampai di sana, millis()kembali ke nol ketika Anda menambahkan 1. Maksimal (32 ")" adalah 2^32 - 1, yang sama 4294967295dengan sistem angka desimal. Nilai maksimum untuk penghitung, oleh karena itu, 4.294.967.295 milidetik. Dikonversi ke hari Anda mendapatkan sekitar 49,71 hari.

penghitungan couter


5
Windows versi lama juga mempertahankan hitungan milidetik dalam bilangan bulat 32-bit, yang menyebabkan banyak perangkat lunak berperilaku buruk setelah 49 hari beroperasi.
Russell Borogove

terima kasih JURAJ! Menjawab keraguan saya yang masih ada. UPVOTED;)
tony gil

PS: Saya harap Anda menyetujui suntingan, saya merasa itu menambah jawaban Anda dengan mengklarifikasi beberapa struktur kalimat.
tony gil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.