今日は、SSです。

Shinji KONO wrote:
> 河野真治 @ 琉球大学情報工学です。

> const ってのは、この場合は、「代入しない」っていうプログラマ
> 向けの宣言なのかな。「僕は馬鹿だから代入するかも知れないので、
> ここで const って付けておこう」ってな感じ? それとも、コンパ
> イラの方で const がついていると良いことがあるのかな。
> 

組み込み系のソフトを作る時は、const と volatile を良く使います。

組み込み系では、ROM と RAM を別に考える必要があり、ROM に比べて
RAM が少ないのが一般的です。
初期値付きの変数は、RAM に領域を取ると共に ROM に初期値を取り、
立ち上げ時に ROM から RAM にデータを転送しますが、const を付けると
ROM のみに領域を取るので、RAM を節約出来るし、転送時間が無くなる分
立ち上げ時間が短くなります。

ハードウエアの制御では、ポートに1を出力すると回路が動作を開始し
動作が完了するとそのポートが0に戻ると言うような動作をするものが
有ります。この場合、volatile を付けずにポートが0に戻るのを待つような
コードを書くとハングすることがあります。

char port ;
....
   port=1 ;
   while(port) ;  /* portが0になるのを待つ、volatile を付けないと      
                    port=1 のまま */
....

ポートからの入力した値を古い値と比較するような時も問題です。
char port ;
....
    {  char i ;
       ....
       i = port ;
       ....
       if( i != port ) { .... } ;  /* ここが実行されない */
    } ;

ハードウエアの制御に関係するレジスター等に volatile を付けるのは
必須です。