Re: const volatile
今日は、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 を付けるのは
必須です。
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735