【データ型定義について】
CCS C Compiler では標準Cに対して下記の特殊制限などが
あります。
(1) 型定義指定は変数が使われる前に必要
(2) TYPEDEF で型の名前を新たに定義することができます。
(3) CONST が型定義の前に付加された時は、定数として扱われ
プログラム中で変更することは出来ません。
(4) 定数は初期化が必須で、プログラム中で変更は出来ない。
またポインタ指定も使えません。
(5) SHORT は特殊変数で、ビット操作の型定義です。
SHORTの配列、ポインタ指定は使えません。
【データ型定義】
(1) static と auto
static指定された時はプログラム全体で変数として使用可能で、
0に初期化されます。
auto指定または、指定無しの時は、その関数内だけで使用可能
(2) 変数データ型一覧
型名 型指定内容 unsigned 8ビット符号無し数値 unsigned int int char long 16ビット符号無し数値 long int signed 8ビット符号付き数値 signed int signed long 16ビット符号付き数値 float 32ビット浮動小数点数値 short 1ビット short int
《例》
int a,b,c,d; 8ビット整数a,b,c,d
typedef int byte; 8ビット整数整数型名byteの定義
typedef short bit; 1ビット変数型名bitの定義
bit e,f; ビット変数e,f
char *h; ポインタ変数定義
int const WEEKS = 52; 定数の指定(3) 配列の定義
CCS C Compiler では配列変数または定数は下記形式で定義
します。
[const] [*] id [cexpr] [=init] ・・・
・ * はポインタ変数配列指定の時
・cexpr は配列要素数のサフィックス数値
・init は初期値指定
《例》
byte g[3][2];
int const FACTORS [4] = {8, 16, 32, 128};
(4) 型定義の列挙定義
まとめて型を定義する時は下記とします。
enum [id] { [ id [=cexpr] ] };
・ cexpr は初期値
《例》
enum boolean {false, true};
boolean j;
(5)構造体(struct)mユニオン(union)の定義
CCS C Compiler での構造体は下記のように定義します。
struct [id] { [type [ [*] id : cexpr[cexpr]]];
[type [ [*] id : cexpr[cexpr]]];
[type [ [*] id : cexpr[cexpr]]];
・・・・
}
《例》
struct data_record {
byte a [2];
byte b : 2; /2ビット分
byte c : 3; /3ビット分
int d;
}
struct lcd_pin_map { LCD用の制御信号
boolean enable; をポートB(6)に割当てる
boolean rs; ための構造体
boolean rw; ビット定義が出来る
boolean unused;
int data : 4;
} lcd;
#byte lcd = 6
struct lcd_pin_map const LCD_READ = {0,0,0,15};
lcd.enable = 0;
lcd.rw = 1;