ワーニング: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変数を含むようにします。 下記の例では internalChannelSelectADC は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つしか保持しないようにします。

全ての製品名は、それぞれの所有者の商標または登録商標です

 

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。