MPLAB C32 の言語仕様


【データ型】

MPLAB C32が扱うデータはリトルエンディアンですので
メモリへの格納は下位バイトからアドレス順に上位へと格納されます。
たとえば0x12345678という値はメモリアドレス順に
0x78、0x56、0x34、0x12 と格納されます。

MPALB C32で扱えるデータ型は下記となります。
型 名 ビット幅 最小値 最大値
char
singned char
8 -128 127
unsigned char 8 0 255
short
signed short
16 -32768 32767
unsigned short 16 0 65535
int
signed int
long
signed long
32 -231 231-1
unsigned int
unsigned long
32 -231 232-1
long long
signed long long
64 -263 263-1
unsigned long long 64 0 264-1
float 32    
double 64    
long double 64    

【アトリビュート】

MPLAB C32には数多くのアトリビュートがあり、関数やデータの
特性の修飾をすることができます。代表的なアトリビュートには
下表のようなものがあります。

《関数のアトリビュート》
Attribute 修飾機能
far
longcall
28ビットアドレスを使った直接CALL命令を使う
near 絶対アドレスのCALLを呼び出されるようにする
mips16 16ビット命令を使う
nomips16 32ビット命令を使う
interrupt
vector
割り込み処理関数とする
指定ベクタにジャンプ命令を生成する
section ("name") nameのセクションに関数を配置する

《変数のアトリビュート》
Attribute 修飾機能
aligned (n) データを次のnバイトの境界から配置する
packed 構造体を最小サイズの大きさで配置する
section ("name") 変数をnameセクションに配置する

【Pragma】

MPLAB C32には拡張記述として下記3種のPragmaが用意されています。

@ #pragma interrupt
  指定した関数を割り込みハンドラとして扱うよう指定する

A #pragma vector
  指定したベクタに指定した関数へのジャンプ命令を生成する

B #pragma config
  コンフィギュレーション指定

【マクロ】

よく使うアトリビュートに対しては下記のマクロが用意されています。
マクロ 機能
__section__(s) セクション名sをアトリビュートとすて適用する
__ramfunc__ RAM上の関数として指定する
__longramfunc__ longcallアトリビュートのRAM上の関数として指定する
__longcall__ longcallアトリビュートを適用する
__ISR(v, ipl) interruptアトリビュートを割り込みレベルiplとして適用する
vectorアトリビュートをベクタ番号vとして適用する