河野真治 @ 琉球大学情報工学です。

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
河野真治 @ 琉球大学工学部情報工学科