データ型とAttribute


【C30のデータ型】

 MPLAB C30コンパイラで使用できるデータ型は下表のようになっています。
各型にsignedunsignedの修飾が付いた型があり、修飾を省略した場合には
signed
となります。
これ以外の型として、関数の引数や戻り値用のデータが無いという場合には、
void」という型指定をします。
C30では、floatdoubleが同じ内容の型となっていますので、他のコンパイラから
移植する場合などには注意が必要です。




【データのAttribute】

 各変数型の修飾子としては標準ではsigned、unsigned、constとなっていますが、
配置場所の指定については、これとは別に多くのアトリビュート修飾子(__attribute__)
が用意されています。
 これにより変数の領域を確保する場合に特定の場所に確保したいときには、
アトリビュートとして各種の指定を加えることができます。
この指定方法は、下表のような書式とします。

アトリビュート修飾 機能 と 書式
address(addr) 変数を絶対番地addrに配置する
  int var __attribute__ ((address(0x800)));   // 変数varを0x800番地とする
sectionと一緒に用いてsectionの開始番地指定も可能
  int foo __attribute__((section("mysection"), address(0x900))) ;
aligned(alignment) 変数を指定バイト単位で並べる、単位は2の階乗
  int x __attribute__((aligned (16))) = 0 ;   // int型変数xを16バイト単位で配置する
boot ブートセグメントRAM内の保護変数とする
  int __attribute__((boot)) boot_dat[16] ;
deprecated 注目指定でwarningメッセージを出力させる
  int __attribute__((__deprecated__)) i;    // 変数iが発見されたらwarningを出力する
far 変数をデータメモリのファー部を含め任意の位置に配置する
  int num __attribute__ ((far)) または int num __far__;
mode(mode)

byteまたは__byte__
wordまたは__word__
pointerまたは__pointer__
modeで指定したビット幅の型を定義する
byteは1バイト整数型、wordは1ワード整数、pointerはポインタ型を定義する
  typedef int __attribute__((__mode__(SI))) int32 ; // int32を32ビット幅の整数型と定義
modeには下記記号が使用できる
 QI : 8ビット(char)    HI : 16ビット(int)   SI : 32ビット(long)
 DI : 64ビット(long long) SF : 32ビット(float)  DF : 64ビット(long double)
near 変数をデータメモリの最初の8kバイト内(ニア領域)に配置する
  int num __attribute__ ((near)); または int num __near__;
noload 変数の場所のみ確保し初期化しないという指定
  int table[50] __attribute__((noload)) = {0} ;
packed 変数の確保ビット長を最小にパックする
  int X[2] __attribute__((packed)) ;
persistent 変数をスタートアップで初期化しないように指定
 int last_mode __attribue__((persistent)) ; // last_modeを不変の変数とする
section("section_name") 変数をsection_nameで指定されたsectionに配置する
  struct array {int i[32]);}
  struct array buf __attribute__ ((section("userdata")))={0}; // userdataにbufを配置
sfr(address) 変数がSFRであると定義しアドレスを指定
  extern volatile int __attribute__((sfr(0x200)) u1mod;   // u1modはSFRで0x200番地とする
space(data) 変数を通常の変数領域に配置する(デフォルト指定)
space(prog) 変数をプログラムメモリ領域(命令コードと同じ領域)に配置する
テーブル命令かPSVでアクセスする
space(auto_psv) 変数をコンパイラに任せてPSV領域に配置する。読み出しのみで書き込みは不可
space(psv) 変数をPSVメモリ領域に配置する
unordered スペースを最適化して配置する
  const int __attribute__ ((unordered)) i;




   目次ページへ