

#include <nitro/os.h>void OS_SpinWait( u32 cycles );
void OS_SpinWaitCpuCycles( u32 cycles );
void OS_SpinWaitSysCycles( u32 cycles );
| cycles | 待機するサイクル数 。OS_SpinWait() の場合、ベースサイクルの2逓倍 を基準とします。OS_SpinWaitCpuCycles() の場合、CPUサイクル を基準とします。OS_SpinWaitSysCycles() の場合、ベースサイクル を基準とします。 |
なし。
CPU を最低でも cycles で指定されたサイクル数、空ループさせます。
これは単純な空のループ処理を行なうだけの関数ですので、割り込み許可状態によるループ中に発生する割り込みなどによって、関数からの復帰予定時刻が大幅に遅れる場合も考えられますのでご注意ください。
関数からの復帰は、関数呼び出しなどのオーバーヘッドにより指定したサイクル数より若干遅れます。
OS_SpinWaitCpuCycles() はCPUサイクルを基準とします。
OS_SpinWaitSysCycles() はベースサイクルを基準とします。NITRO/TWLモードや、CPU周波数の切り替えに依存しません。
OS_SpinWait() はNITROとの互換性を考慮して、CPUの動作周波数に関わらず一定の値を基準とします。ARM9の場合、ベースサイクルの2逓倍を基準とします。ARM7の場合、ベースサイクルを基準とします。NITRO では、OS_SpinWait() を「CPUサイクルを基準とした空ループ」としていました。しかし、TWLではCPU周波数を切り替えることが出来るため、NITROのソースを利用したときの利便性を考えてこのようにしています。
サイクル数 cycles が基準とする周波数は以下のようになります。
OS_SpinWait()
プラットフォーム cyclesの基準となる周波数 ARM9 ARM7 NITRO 67.03MHz 33.51MHz TWL
OS_SpinWaitCpuCycles()
プラットフォーム cyclesの基準となる周波数 ARM9 ARM7 NITRO 67.03MHz 33.51MHz TWL 67.03MHz(等速動作時)
134.06MHz(倍速動作時)
OS_SpinWaitSysCycles()
プラットフォーム cyclesの基準となる周波数 ARM9 ARM7 NITRO 33.51MHz TWL
2007/09/27 OS_SpinWaitCpuCycles, OS_SpinWaitSysCycles() について記述
2004/02/27 初版