Làm thế nào millis () đặt lại chính nó về 0


14

Nhìn vào tài liệu cho millis()hàm, nó nói:

Trả về số mili giây kể từ khi bo mạch Arduino bắt đầu chạy chương trình hiện tại. Con số này sẽ tràn (trở về số không), sau khoảng 50 ngày.

Làm thế nào điều này có thể? Là Arduino phát hiện khi millis()tràn sau đó đặt lại giá trị về 0? Nếu vậy, làm thế nào để làm điều đó? Tôi chỉ muốn biết chính xác những gì đang diễn ra dưới mui xe với biến đang được hàm trả về millis().

Câu trả lời:


25

Nó không phải là một tài sản độc quyền của millis(). Bất kỳ bộ đếm nào có số chữ số giới hạn cuối cùng sẽ trở về không. Ví dụ, bộ đếm kiểm đếm 4 chữ số trở về số không sau 9999.

Dưới mui xe, biến cho millis()loại unsigned longlà 32 bit trên Arduino. Trong trường hợp này, 32 bit (nhị phân 0 và 1) tương tự như các chữ số (0 đến 9) trên bộ đếm kiểm đếm.

Tối đa là 11111111 11111111 11111111 11111111. Khi đó, millis()trở về không khi bạn thêm 1. Tối đa (32 "cái") là 2^32 - 1, bằng 4294967295với hệ thống số thập phân. Do đó, giá trị tối đa cho bộ đếm là 4.294.967.295 mili giây. Chuyển đổi thành ngày bạn nhận được khoảng 49,71 ngày.

kiểm đếm


5
Các phiên bản cũ của Windows cũng duy trì số mili giây trong số nguyên 32 bit, khiến nhiều phần mềm hoạt động sai sau 49 ngày hoạt động.
Russell Borogove

cảm ơn JURAJ! Trả lời một nghi ngờ kéo dài tôi đã có. UPVOTED;)
tony gil

PS: Tôi hy vọng bạn chấp thuận các chỉnh sửa, tôi cảm thấy rằng chúng thêm vào câu trả lời tuyệt vời của bạn bằng cách làm rõ một vài cấu trúc câu.
tony gil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.