SourceBoost/資料/BoostCコンパイラヘルプ

目次

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'ストレージを使用することで宣言されます。 宣言の中でRom変数を初期化しなければなりません:
rom char* text = "Test string";
  • Volatile
  • volatile型は通常のプログラムの流れの外で変えることができる変数と表現の中で中間的値を受けるべきでない変数に使用されるべきです。 例えば、bit変数がポートピンにマップされるなら、volatile型のような変数を宣言するのは、良い考えです。 通常のコードと比べて、volatile型変数で発生するコードは少し長いです:
volatile bit pinB1@0x6.1; //declare bit variable mapped to pin 1 of port B

現在のコンパイラは値を揮発性のビット変数に割り当てる式のためだけに異なったコードを生成します。

  • Static
  • グローバルとローカルの両方の変数ともに、staticとして宣言できます。
  • Structures and unions
  • structとunionの両方をサポートします。
  • Typedef
  • Typedefを使用すればデータ型に新しい名前を与えることができます。
typedef unsigned char uchar;
  • Enum
  • 列挙データ型。
enum ETypes { E_NONE=0, E_RED, E_GREEN, E_BLUE };
  • Constants
  • 2進、8進、10進、16進数を定数として使用できます。
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
  • 変数
  • レジスタにマップされた変数