2012年7月26日木曜日

組込みシステム C言語のキーワード volatile

組込みシステムの割り込みの話を書こうと、数日構想を練っていたんだけど、とりあえずは

大事なキーワード volatileについて書いて見ようと思います。






アセンブラソースを出力させてコンパイルして最適化をしてソースの違いを見てみてください

例)

static volatile int val1;
static int val2;

(ちょっと順番が記憶であいまいですがとりあえず書きます)



void func1(){
    val1++;

  if( 1 == val1) {
        val1++;
     }
}


void func2(){
   val2++;
   if(1 == val2) {
       val2++;
   }
}


この二つのコードは一見同じに見えますが、通常最適化された場合は演算結果をレジスタに残しておいてそのまま 条件判定を行いますが


volatile が付いている場合は、常に最新の内容を見に行くようなコードになっているはずです。


これは、組込みシステム以外ではあまり使われません。


同じ変数に一見同時にはアクセスすることは、あまり考えないかも知れませんが、組込み系では考えられることです。


割り込み処理で詳しくは書きますが、とりあえずこんなおまじないがあるということだけ、先に書いておきます。





0 件のコメント:

コメントを投稿