0

1-Wire 実装で使用しようとすると_delay_us(condition ? value_if_true : value_if_false)、遅延が機能せず、デバイスからの応答が得られませんが、次のように置き換えると正常に動作します。

if(condition) _delay_us(value_if_true);
else _delay_us(value_if_false);

lcdにインラインif値を表示すると、正しい値が表示されます。

では、この 2 つの表記法にはどのような違いがあるのでしょうか。_delay_us() で動作する場合、どうすればインライン化できますか?

4

2 に答える 2

3

ドキュメントには明確に次のように記載されています。

これらの関数が意図したとおりに機能するためには、コンパイラの最適化を有効にする必要があり、遅延時間はコンパイル時に既知の定数である式でなければなりません。これらの要件が満たされない場合、遅延はさらに長くなり (そして基本的に予測不可能)、浮動小数点計算を使用しないアプリケーションでは、アプリケーションにリンクされた浮動小数点ライブラリ ルーチンによって深刻なコード膨張が発生します。

于 2012-02-06T11:05:45.297 に答える
0

おっと...完全に根拠のない考えですが、投稿する前に考えることを思い出させるためにここに残します。

必要なもの: 状態? _delay_us(value_if_true) : _delay_us(value_if_false)

基本的にif文と同じ構文

考える

(条件)?(条件が true の場合に評価):(条件が false の場合に評価)

于 2012-02-04T21:04:24.880 に答える