# OS_TicksTo*Seconds*

## 構文

      #include <nitro/os.h>

      #define OS_TicksToMicroSeconds( tick )
      #define OS_TicksToMicroSeconds32( tick )

      #define OS_TicksToMilliSeconds( tick )
      #define OS_TicksToMilliSeconds32( tick )

      #define OS_TicksToSeconds( tick )
      #define OS_TicksToSeconds32( tick )

      (すべてマクロです。)

## 引数

tick | チック値

## 返り値

引数で指定したチック値に対応する実時間値

## 説明

引数で指定したチック値に対応する実時間値を取得します。

チック値の1単位はシステムクロックの64分周になります。

`OS_TicksToMicroSeconds*()` はチック値をマイクロ秒に変換します。
`OS_TicksToMilliSeconds*()` はチック値をミリ秒に変換します。
`OS_TicksToSeconds*()` はチック値を秒に変換します。
これらの関数はすべてマクロとして定義されています。

関数名に 〜32 がついているものは、内部計算を 32 ビットで行ないます。ついていないものは 64 ビットで行ないます。32 ビット版は 64 ビット版に比べ、より小さな値でオーバーフローが起きて正しい結果を得ることが出来ませんが、オーバーフローしない場合ならばコード量が小さく演算速度も速いというメリットがあります。ですが、極度に差があるというほどでもありませんので、バグを回避するためにも通常は関数名に 〜32 のついていない方を使用することをお奨めします。なお定数を引数にした場合はコンパイル時に事前計算がなされて得られる値も定数になります。

32ビットで演算する場合はオーバーフローに注意して下さい。オーバーフローが起きる値は以下の表の通りです。

関数名 | この値まではOK | この値以上はNG
--- | --- | ---
`OS_TicksToSeconds32()` | 67108863 (tick単位) この値は約2秒に相当します。 | 67108864 (tick単位)
`OS_TicksToMilliSeconds32()` | 67108863 (tick単位) この値は約2002ミリ秒=約2秒に相当します。 | 67108864 (tick単位)
`OS_TicksToMicroSeconds32()` | 67108 (tick単位) この値は 約2002マイクロ秒=約0.000002秒に相当します。 | 67109 (tick単位)

なお、64ビット演算を行なってオーバーフローとなる値は、`OS_TicksToMicroSeconds*()` では 約2.8x10の14乗 tick単位 (約99日に相当)、`OS_TicksToMilliSeconds*()` と `OS_TicksToSeconds*()` では 2.8x10の17乗 tick単位 (約272年に相当) となっています。

## 参照

`OS_InitTick, OS_GetTick
OS_SetAlarm, OS_SetPeriodicAlarm
OS_*SecondsToTicks`

## 履歴

2005/10/07 32ビット演算と64ビット演算の分け方を変更
2005/10/06 32ビット演算のオーバーフローを考慮し変更
2004/02/25 Count→Tick に変更
2004/02/24 初版