2016-09-25 13 views
1

私はC言語で小さなカーネルを作成していますが、待つべき秒数を含むパラメータを取る関数が必要です。自分のスリープや遅延関数をC言語で作成する方法

forループを使用しようとしましたが、機能しませんでした。

私はC標準ライブラリを使用することができず、カーネルに(C言語で)待機するよう指示する方法が必要です。これどうやってするの?

ループ:ループを使用して

int c = 1, d = 1; 

for (c = 1 ; c <= 32767 ; c++) 
    for (d = 1 ; d <= 32767 ; d++){} 
+0

ループを使用してコードを共有します。何がうまくいかなかったのですか? –

+0

forループは機能しますが、速くて差が出ません。 @ AT-2016 –

+0

これが役立つかどうかはわかりません。しかし、それは本当に面白そうです - http://wiki.osdev.org/Inline_Assembly –

答えて

2

は動作しますが、それにかかる時間は、お使いのCPUの速度と任意のコンパイラの最適化に大きく依存することになります。ターゲットハードウェアを知っているときに便利です(特定のマイクロコントローラの書き込みなど)。

ループの本体にNOPを含める必要があります。特定のコードブロックで最適化を無効にするには、コンパイラが#pragmaまたは特別なコメントをサポートしているかどうかも確認してください。

NOPの定義については、コンパイラのドキュメントを参照してください。

#define Nop() {_asm nop _endasm} 

またはあなたのコンパイラがインラインアセンブリをサポートしている場合asm("nop")を書くことでは:ほとんどのコンパイラは、使用して独自に定義することができます_nop()または_nop_()

という名前のマクロを定義します。

+0

「*特定のマイクロコントローラ*」:ここで唯一の答えです。 – alk

+1

ありがとう、兄。それは素晴らしい作品です! –

関連する問題