4

私はこの機能を使用しています:

__delay_cycles(var); 

次のエラーが表示されます。

への引数_delay_cyclesは定数式でなければなりません

けっこうだ!しかし、どうすればこれをバイパスできますか? 毎回異なる値でプログラムを遅らせる必要があります。RS232 からデータを受信し、それをint変数に格納しています。この関数を使用する必要があり、その構造を変更できません。AtMega16を使用しています。

4

3 に答える 3

3

すぐに頭に浮かぶ 1 つの提案は__delay_cycles()、一定の引数を使用して呼び出しますが、それをループで実行し、ループの反復回数を変えることです。

ループはオーバーヘッドを追加するため、精度が必要な場合は、(定数) 引数から 1 つのループ反復の (定数) コストを差し引く必要があります__delay_cycles()

于 2011-11-08T20:53:14.137 に答える
2

その機能を使用しないでください。C 言語の規則に従って動作しないのは、明らかに非標準のテキサス ジャンクです。代わりにオンチップ タイマーを使用して独自の遅延関数を作成するか、ネット上で見つけてください。作業時間は 1 時間未満です。これは、さまざまな非標準のがらくたの意味を熟考するのに費やす時間よりも間違いなく少ない時間です。

組み込み業界にこれほど多くのくだらないコンパイラがある本当の理由は、組み込みプログラマーが、C 標準から逸脱する理由がまったくない場合でも、非標準のがらくたを常に与えられることを受け入れているためです。

于 2011-11-09T12:26:47.830 に答える
0
if(var==1)
  __delay_cycles(1);
else if(var==2)
  __delay_cycles(2);
else if(var==3)
  __delay_cycles(3);

...等々。

于 2011-11-08T21:40:43.720 に答える