ID非公開

2020/10/19 7:44

33回答

Arduino の millis()関数のオーバーフローについて。

補足

起動時間がオーバーフローすることを危惧してはいますが 測りたい時間差自体はごくごく短い時間です。得られる時間差は < uint32_t です。

ベストアンサー

0

ajyantaさんへ こんな計算する人が非常に多いのです。 zikoku + keikajikan > millis(); 一周する49日を待たなくても最悪の場合1msでバグります。 質問者様はuint32_t以内の時間計測の話をしておられます。

その他の回答(2件)

0

違いますよ。 例えば zikoku が10とします。で、milliscec が1周して(オーバーフローして)10とします。 keikajikann =10−10=0ですか?、この場合は違いますよね。 時間は継続して測れますが経過時間を計算するときに注意がいるということです。

「追記」例が極端すぎて誤解を与えるようなので追加説明しておきます。 zikokuが2**32-1付近でmillis()が5の場合は質問者さんの理解のとおりで良いです。 5-(2**32 - 1) = 6 (数学ではないコンピュータの計算) ちゃんと経過時間6ミリ秒と計算できます。

0

それで良いです。

補足しなくても、 > uint32_t keikajikan としているのだから、keikajikanは0から2^32までの数値を想定している質問なのは明らかです。 それで正しく動作します。