• 締切済み

フリーランタイマーの時間差分の計測について

フリーランタイマー(MAXは2byte:0xFFFFとしている)の現在値と前回値の差分を出すとき、 前回値の方が現在値よりも大きくなった場合(要は前回値がMAX付近だった時)は、 MAX値から前回値を引いた値を、現在値に加算して差分を出すという考えは正しいでしょうか ご教授お願いします

みんなの回答

  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.2

> MAX値から前回値を引いた値を、現在値に加算 なら、 差 = MAX値 - 前回値 + 現在値 ですが、 MAX = 0xFFFF 前回値 = 0xFFFF 現在値 = 0x0000 の場合、 差 = 0xFFFF - 0xFFFF + 0x0000 = 0 正解は1なので、結果の良し悪しではなく間違いです。 正しくは、 差 = MAX値 - 前回値 + 現在値 + 1 です。 ただし、#1の方のとおり、オーバーフローを利用すれば、常に 現在値 - 前回値 で問題ありません。

回答No.1

一般的に言えば、誤りです。タイマーが1週以上してる可能性もあるので。 前回の計測から今回の計測まで絶対に1周以上回っていない、という前提が成り立つなら、それでも殆ど問題ありませんが その場合は(Intelのような、減算によるアンダーフローで例外が飛ばないCPUの場合は)、単に減算する方が良い結果になります。 例) 前回:0xf000 今回:0x0050 として 0x0050 + (0xffff - 0xf000) = 0x104f 0x0050 - 0xf000 = 0x1050 (16bit整数型を用いる場合。)

関連するQ&A