目次
BoostC Optimizing C compiler
序論
BoostC(TM)は最初のPIC16とPIC18プロセッサで動作する次世代Cコンパイラです。 グレーテキストは本書では最終的なリリースで利用可能ですが、BoostC(TM)アルファーのリリースでまだ実装されていない特徴について言及します。
コンパイルモデル
プリプロセッサ
プリプロセッサpp.exeはコンパイラによって自動的に実行されます。 プリプロセッサ指示:
#incude
#ifdef
#if
#else
#endif
#define
#error
コンパイラ
PIC16とPIC18の2つのターゲットのために別々のコンパイラがあります。 あなたがSourceBoost(TM) IDEを使用しているなら、どちらを使用したらよいかを指定する必要は全くありません。 選択されたターゲットに基づくコンパイラが選ばれます。 コンパイラの出力する1つ若しくは幾つかのOBJファイルは、ライブラリアンやリンカによって処理され、LIBファイルやHEXファイルが得られます。
ライブラリアン
ライブラリアンは、実行可能なBoostLink(TM)リンカが組み込まれて、libコマンドラインで動かされます。 プロジェクトで、HEXファイルの代わりにライブラリを生成させるOptionダイアログがSourceBoost(TM) IDEの中にあります。
リンカ
BoostLink(TM) Optimizing Linkerはコンパイラでターゲットに送る準備ができているHEXファイルの中に生成されたOBJファイルをリンクします。また、それはデバッグとコード分析に使用されるいくつかの補助ファイルを発生させます。
C2Cコンパイラとの違い
BoostC(TM)とC2Cコンパイラの主な違いは、C2Cが内蔵のリンカによってASMファイルを出力し外部のアセンブラ(MPASMのような)を必要とするのに対し、BoostC(TM) toolsuiteはどんな外部のツールも必要としないでHEXファイルを自身で生成できるところです。別の違いはコンパイラがどうコードメモリに位置する書き込み禁止変数を処理するかであります。 C2Cはconst変数をコードメモリに置き、一方BoostCは'rom'という特別なデータ型に区別します。
C言語
プログラムの構造
あらゆるソースファイルが順番にターゲットの特定のヘッダーを含んでいるシステムヘッダーファイルを含むべきです(それはこのターゲットに、特定のレジスタ写像している変数を含んでいます)、プロトタイプがコード生成と文字列処理機能プロトタイプに必要としたいくつかの内部の機能:
#include <system.h>
...
データ型
- 基本
1 bit | bit, bool |
8 bits | char,unsigned char,signed char |
16 bits | short,unsigned short,signed short |
32 bits | int,unsigned int,signed int |
32 bits | long,unsigned long,signed long |
- Rom
rom char* text = "Test string";
- Volatile
volatile bit pinB1@0x6.1; //declare bit variable mapped to pin 1 of port B
現在のコンパイラは値を揮発性のビット変数に割り当てる式のためだけに異なったコードを生成します。
- Static
- Structures and unions
- Typedef
typedef unsigned char uchar;
- Enum
enum ETypes { E_NONE=0, E_RED, E_GREEN, E_BLUE };
- Constants
XXXb | binary number where X is either 1 or 0 |
0XXX | octal number where X is a number between 0 and 7 |
XXX | decimal number where X is a number between 0 and 9 |
0xXXX | hexadecimal number where X is a number between 0 and 9 or A and F |
- 変数
- レジスタにマップされた変数