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