ワーニング:The order of volatile accesses is undefined in this statement
テクニカル・ノート 99411
アーキテクチャ:
All
コンポーネント:
compiler
更新日:
2018/02/20 4:23
はじめに
以下のようなワーニングメッセージは、Cの文中に2つ以上のvolatile変数がある場合に、表示されます。
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
メッセージ中の重要な情報は...order of volatile accesses is undefined(volatileアクセスの順序は未定義です)...です。 つまり、IAR C / C ++コンパイラ(ISO / ANSI標準に準拠)は、定義されていない順序で変数にアクセスします。
解説
Volatile は、通常アプリケーション内の複数のスレッドからアクセスされる変数、およびチップの入出力接続である周辺レジスタ(SFR)に使用されます。 Cステートメントのvolatile 変数がどのように使用されているかを調べ、変更すべきかを検討します。
ワーニングを回避する一つの方法として、Cの文を分割して、それぞれが1つだけvolatile変数を含むようにします。 下記の例では internalChannelSelect と ADC はvolatile変数であり、コンパイルすると Warning[Pa082]が発生します。
次のコード例は[Pa082] ワーニングを発生します:
intAnalogSample[internalChannelSelect] = ADC[internalChannelSelect];
次のように書き変えることで、volatile変数に対するアクセス順を規定することができるようになります。 中間の変数はvolatileではないことに注意する必要があります:
int i;
int k;
i = internalChannelSelect;
k = ADC[i];
intAnalogSample[i] = k;
まとめ
このワーニングを回避するために、Cステートメントを分割して、各Cステートメントがvolatile 変数へのアクセスを1つしか保持しないようにします。
全ての製品名は、それぞれの所有者の商標または登録商標です