millis ()가 0으로 재설정되는 방법


14

millis()함수 에 대한 문서를 보면 다음과 같습니다.

Arduino 보드가 현재 프로그램을 실행하기 시작한 이후의 시간 (밀리 초)을 반환합니다. 이 숫자는 약 50 일 후에 오버플로됩니다 (0으로 되돌아 감).

이것이 어떻게 가능합니까? Arduino가 millis()오버플로를 감지 한 후 값을 0으로 재설정합니까? 그렇다면 어떻게합니까? millis()함수 가 반환하는 변수를 사용하여 후드에서 정확히 무슨 일이 일어나고 있는지 알고 싶습니다 .

답변:


25

의 독점 재산이 아닙니다 millis(). 자릿수가 제한된 카운터는 결국 0으로 돌아갑니다. 예를 들어, 4 자리 탈리 카운터는 이후에 0으로 돌아갑니다 9999.

후드에서의 변수 는 Arduino의 32 비트 millis()인 유형 unsigned long입니다. 이 경우 32 비트 (2 진 0과 1)는 탈리 카운터의 숫자 (0 ~ 9)와 비슷합니다.

최대 값은 11111111 11111111 11111111 11111111입니다. 거기에 millis()추가하면를 추가하면 0으로 돌아갑니다 1. 최대 (32 "것들")입니다 2^32 - 1같아지는, 4294967295십진수 시스템. 따라서 카운터의 최대 값은 4,294,967,295 밀리 초입니다. 약 49.71 일이되는 날로 변환되었습니다.

탈리 코터


5
또한 이전 버전의 Windows는 32 비트 정수로 밀리 초 수를 유지하여 49 일 가동 후 많은 소프트웨어가 잘못 작동합니다.
Russell Borogove

감사합니다 JURAJ! 내가 가진 의심의 여지가 있습니다. UPVOTED;)
tony gil

추신 : 편집 내용을 승인하기를 원합니다. 두 문장 구조를 명확히하여 훌륭한 답변에 추가한다고 생각합니다.
tony gil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.