millis()が自身を0にリセットする方法


14

millis()関数のドキュメントを見ると、次のように書かれています:

Arduinoボードが現在のプログラムの実行を開始してからのミリ秒数を返します。この数は、約50日後にオーバーフローします(ゼロに戻ります)。

これはどのように可能ですか?Arduinoはmillis()オーバーフローを検出してから値を0にリセットしますか?もしそうなら、それはどのようにそれをしますか?millis()関数によって返される変数の内部で何が起こっているのかを正確に知りたいだけです。

回答:


25

これはの排他的なプロパティではありませんmillis()。限られた桁数のカウンタは、最終的にゼロに戻ります。たとえば、4桁の集計カウンターはの後にゼロに戻ります9999

内部では、変数for millis()はtype unsigned longであり、Arduinoでは32ビットです。この場合、32ビット(バイナリの0と1)は、タリーカウンターの数字(0〜9)に似ています。

最大値は11111111 11111111 11111111 11111111です。一度millis()追加すると、ゼロに戻ります1。最大値(32「1」)はです2^32 - 1。これは429496729510進数で表されます。したがって、カウンターの最大値は4,294,967,295ミリ秒です。日数に換算すると、約49.71日になります。

集計者


5
Windowsの古いバージョンでは、32ビット整数のミリ秒カウントも維持されていたため、49日間の稼働後、多くのソフトウェアが誤動作していました。
ラッセルボロゴーブ

ありがとうジュラジ!私が長引く疑問に答えます。UPVOTED;)
トニー・ギル

PS:編集内容を承認していただければ幸いです。いくつかの文章構造を明確にすることで、優れた答えが得られると思います。
トニーギル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.