# OS_*SecondsToTicks*

## 構文

      #include <nitro/os.h>

      #define OS_MicroSecondsToTicks( microSec )
      #define OS_MicroSecondsToTicks32( microSec )

      #define OS_MilliSecondsToTicks( milliSec )
      #define OS_MilliSecondsToTicks32( milliSec )

      #define OS_SecondsToTicks( sec )
      #define OS_SecondsToTicks32( sec )

      (すべてマクロです。)

## 引数

sec | 秒
milliSec | ミリ秒
microSec | マイクロ秒

## 返り値

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

## 説明

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

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

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

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

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

関数名 | この値まではOK | この値以上はNG
--- | --- | ---
`OS_SecondsToTicks32()` | 128 (秒) | 129 (秒)
`OS_MilliSecondsToTicks32()` | 128154 (ミリ秒) | 128155 (ミリ秒)
`OS_MicroSecondsToTicks32()` | 128154 (マイクロ秒) | 128155 (マイクロ秒)

なお、64ビット演算を行なってオーバーフローとなる値は、`OS_MicroSecondsToTicks*()` では 550419050 マイクロ秒(約6.4日に相当)、`OS_MilliSecondsToTicks*()` では 550419050955 ミリ秒(約17.4年に相当)、`OS_SecondsToTicks*()` では 550419050955 秒(約1万7千年に相当) となっています。

## 参照

`OS_InitTick, OS_GetTick
OS_SetAlarm, OS_SetPeriodicAlarm
OS_TicksTo*Seconds
`

## 履歴

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