Re: const volatile
河野真治 @ 琉球大学情報工学です。
In article <coo8ma$6so$1@news511.nifty.com>, ss <YFA69603@nifty.com> writes
> 組み込み系のソフトを作る時は、const と volatile を良く使います。
ですよね。
でも、今回の話題は、
extern __inline__ __attribute__((always_inline))
unsigned ld_le16(const volatile unsigned short *addr)
っていう「両方付いている!」ものだったりしますが...
組み込みではinlineは良く使うんでしょうか?
> 初期値付きの変数は、RAM に領域を取ると共に ROM に初期値を取り、
> 立ち上げ時に ROM から RAM にデータを転送しますが、const を付けると
> ROM のみに領域を取るので、RAM を節約出来るし、転送時間が無くなる分
> 立ち上げ時間が短くなります。
ハーバードアーキテクチャって話もあったけど、やっぱり、こっち
だよね。ハーバードアーキテクチャってのは命令バスとデータバス
を分離するって話だよね? const にすると命令バスからデータが来
るようになるってな話かな? 結果的にはそうなるのか。
cmp reg,$0
と
ld reg1,$0
cmp reg,reg1
の違いか...
> char port ;
> port=1 ;
> while(port) ; /* portが0になるのを待つ、volatile を付けないと
> port=1 のまま */
これは良くありますね。
ld reg,port
l1:
cmp reg,$0
je l1
とかいうコードが出ちゃうんですよね。volatile を付けると、
l1:
cmp reg,port
je l1
となるわけだ。
だったら、const/volatile じゃなくて、readonly/memory というキーワード
の方が良かったんじゃないか... しかも、compiler directive として。
とは思うんだよね。そうすれば、readonly memory k = 3 とかは、なんとなく
許せます。「定数 壊れやすい」じゃぁ、なんか変。そういえば volatile
の和訳はなんだろう? 可壊かな? 揮発性っていうのがあるけど。可変じゃない
し...
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
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