マルチプル・コンパイレーション・ユニットの使用について

マルチプル・コンパイレーション・ユニットを使ったプロジェクトの作成には次のIDEバージョンが必要です:PCW, PCWH, PCWHD, PCDIDE

CCS Cコンパイラは1つのコンパイル単位(ユニット)のみが使われます。そして、複数のファイルは#INCLUDEファイル を使ってインプリメントされます。マルチプル・コンパイレーション・ユニットの使用にはコンパイルを制御するプリプロセッサー・コマンドが すべてのユニットにわたって適合しているか注意を払う必要があります。すべてのユニットによりインクルードされているインクルード・ファイルに中に #FUSES, #USEのようなプリプロセッサ・コマンドとデバイス・ヘッダー・ファイルを含めることをお勧めします。 ユニットがコンパイルされるときリローケタブル・オブジェクト・ファイル(.*.o)とシンボル・ファイル(.*.osym)を出力します。

以下はマルチプル・コンパイレーション・ユニット例の概要です。ここで使われているサンプルはMCU.zipをダウンロードしてご覧下さい。

プロジェクト・サンプルに含まれているファイル:

プロジェクト・サンプルに含まれているファイル
ファイル 目的
main.c 最初のコンパイル・ユニットのための基本ファイル
filter.c 2番目のコンパイル・ユニットのための基本ファイル
report.c 3番目のコンパイル・ユニットのための基本ファイル
project.h 全ユニットが含まれたプロジェクト全体の定義を持ったヘッダー・ファイル
filter.h filter.c関数を使用するすべてのユニットが含まれたfilter.cための外部定義を含むヘッダー・ファイル
report.h report.c関数を使用するすべてのユニットが含まれたreport.cための外部定義を含むヘッダー・ファイル
project.c Linker.batのためのプロジェクト内でユニットのリストをインポートするために使用されるファイル
project.pjt build.batのためのプロジェクト内でユニットをリストするために使用されるプロジェクト・ファイル
build.bat コンパイルされリンクされる必要のあるユニットをコンパイルするバッチ・ファイル
buildall.bat 全てのユニットをコンパイルしリンクするバッチ・ファイル
linker.bat スクリプトを使って全ユニットをコンパイルしリンクするバッチ・ファイル

ファイル概要
main.c filter.c report.c
#INCLUDE

project.h

filter.h

report.h

project.h

report.h

project.h

定義

main( )

clear_data( )

filter_data( )

report_data_line( )

report_line_number( )

report_error( )

使用

clear_data( )

filter_data( )

report_data_line( )

report_line_number( )

report_error( )


コンパイレーション・ファイル
ファイル 目的
*.o 各ユニットにより生成されたリローケタブル・オブジェクト・ファイル
*.err 各ユニットにより生成されたエラー・ファイル
*.osym 各ユニットにより生成されたユニットのシンボル・ファイル
project.hex プロジェクトのために生成されたプログラム・イメージ
project.lst プロジェクトのために生成されたCとASMリスティング・ファイル
project.sym プロジェクトのために生成されたプロジェクト・シンボル・ファイル
project.cof プロジェクトのために生成されたデバッガ・ファイル

プロジェクトをコンパイルするために使用される適応可能オプションを下記から選択:


プロジェクトをビルドするためのコマンド-ラインの使用

  1. プロジェクトのためのソースファイルのすべてを単一のディレクトリに移動して下さい

  2. テキスト・エディタを使用し、ファイルをコンパイルしてプロジェクトをビルドするために以下のサンプルをベースとしたファイル buildall.bat を作成してください
    • "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT report.c
      "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT filter.c
      "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT main.c
      "C:\Program Files\PICC\CCSC.exe" +FM LINK="project.hex=report.o,filter.o,main.o"
      

    プロジェクトをコンパイル、そして、ビルドするためのファイルを作成する時は次のガイドラインに従って下さい:

    • CCS Cコンパイラのインストレーション・ディレクトリ内のCCSC.exeファイルにパスが通ってなければいけません
    • 追加コンパイラ・オプションを追加して下さい
    • 必要な*.c ファイルをインクルードするためにEXPORTオプションを使います
    • *.hex ファイルを生成するためにLINK オプションを使います

  3. buildall.batファイルの上でダブルクリックするか、又は、全てのファイルを使ってプロジェクトをビルドするために コマンドBUILDALLでコマンド・プロンプトを使用して下さい

MCU BUILDALL Command-Line


プロジェクトで変更されたファイルを再ビルドするためのコマンド・ラインの使用

  1. プロジェクトにリンクする必要のあるファイルをインクルードするために以下の例をベースとしたファイルproject.pjt をテキスト・エディタを使用して作成してください
    • [Units]
      Count=3
      1=report.o
      2=filter.o
      3=main.o
      Link=1
      

  2. そのプロジェクトで変更され再ビルドするファイルのみをコンパイルし、プロジェクトを再ビルドするためにはテキスト・エディタを使用し 以下の例をベースとしたファイルbuild.batを作成して下さい
    • "C:\Program Files\PICC\CCSC.exe" +FM BUILD=project.pjt
      

    プロジェクトをコンパイルし、そして、ビルドするためにファイルを作成する時は次のガイドラインに従って下さい:

    • CCS Cコンパイラのインストレーション・ディレクトリ内のCCSC.exeファイルにパスが通ってなければいけません
    • 追加コンパイラ・オプションを追加して下さい
    • *.pjt ファイルを指定するためにBUILDオプションを使用

  3. build.batファイルの上でダブルクリックするか、又は、変更したファイルのみを使ってプロジェクトを再ビルドするために コマンドBUILDALLでコマンド・プロンプトを使用して下さい

MCU BUILD Command-Line


リンカー・スクリプトの使用

  1. プロジェクトのためにリンクするのに必要なファイルをインクルードするために以下の例をベースとしたファイルをテキスト・エディタを使用し project.c を作成して下さい
    • #import(FILE=report.o)
      #import(FILE=filter.o)
      #import(FILE=main.o)
      

  2. ファイルをコンパイルし、プロジェクトをビルドするためにはテキスト・エディタを使用し以下の例をベースとしたファイルlinker.batを作成して下さい

      "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT report.c
      "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT filter.c
      "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT main.c
      "C:\Program Files\PICC\CCSC.exe" +FM project.c
      

    プロジェクトをコンパイルし、そして、ビルドするためにファイルを作成する時は次のガイドラインに従って下さい:

    • CCS Cコンパイラのインストレーション・ディレクトリ内のCCSC.exeファイルにパスが通ってなければいけません
    • 追加コンパイラ・オプションを追加して下さい
    • 必要な*.c ファイルをインクルードするためにEXPORTオプションを使います

  3. linker.batファイルの上でダブルクリックするか、又は、全てのファイルを使ってプロジェクトをビルドするために コマンド LINKERでコマンド・プロンプトを使用して下さい

MCU LINKER Command-Line


CCS PCW IDE[ウィンドウズ版]で使用

  1. PCW IDEを開き、そして、メイン・メニューのトップにあるProject -> Createオプションを選択して下さい。 プロジェクトのメイン・ソースを選択するためのウィンドウが表示されます

MCU CCS PCW IDE Create New Project

  1. Project Optionsウィンドウが現れた時、プロジェクトで使用されるチップのタイプを選択します。 オプション Multiple Compilation UnitsLink Separatelyの隣のボックスをチェックにして下さい; これは追加ソース・ファイルの追加が出来るようになります。+Addボタンをクリックしプロジェクトで使われる他のソース・ファイルを 選択してリストに追加します。プロジェクトを作成するためにApplyボタンをクリックします

MCU CCS PCW IDE Project Options

  1. ファイルをコンパイルし、そしてプロジェクトをビルドするためにメイン・ウィンドウのトップにあるCompileを選択するか、 もし、クラシック・スタイルのIDEを使用の場合はメニュー・バーから次のオプションの1つを選択して下さい:

MCU CCS PCW IDE Compile Options

コンパイレーション・オプション
オプション 目的
Compile 現在のプロジェクトのすべてのユニット、又は、ドロップ-ダウン・メニューから選択された単一ユニットをコンパイル
Build 最後のコンパイルの後に変更されたユニットをコンパイルしプロジェクトをビルド
Build All すべてのユニットをコンパイルしプロジェクトをビルド
Clean プロジェクトのために出力ファイルを削除

  1. ファイルがコンパイルされた後、コンパイレーションの間に使われたファイルがFilesパネルのユニット名の下に表示されます

MCU CCS PCW IDE File Pane


MPLABを使用

  1. MPLAB IDEを開き、メニュー・バーからProject -> Newを選択します。プロジェクトのメイン・ソース・ファイルを選択するように聞いてきます

  2. メニュー・バーからProject -> Select Language Toolsuite...を選択します。 ウィンドウが表示されますのでActive Toolsuite:フィールドのドロップ-ダウン・リストからCCS C Compiler を選択して下さい。 コンパイラーの正しいディレクトリー位置が表示されているか確認して下さい

MCU MPLAB IDE Select Toolsuite

  1. メニュー・バーからConfigure -> Select Device...を選択して下さい。ウィンドウが現れますので、 リストから正しいPIC® MCU 又は、PIC® DSCを選択して下さい

MCU MPLAB IDE Select Device

  1. プロジェクトにソース・ファイルを追加するには、メニューバーのProject -> Add File to Project...オプションを選択するか、 又は、プロジェクトウィンドウのSource Filesフォルダーの上で右クリックしてAdd Files...を選択します。 ウィンドウが表示されますのでプロジェクトに追加するためにソース・ファイルを選択して下さい

  2. メニュー・バーのProject -> Build Options...を選択します。現れるウィンドウから出力ディレクトリー、インクルード・ディレクトリー、 生成された出力ファイル等プロジェクト全体、又は、個々のユニットの変更が出来ます

MCU MPLAB IDE Project Options

  1. プロジェクトでファイルをコンパイル、プロジェクトをビルドするためにメニュー・バーにあるProjectを選択するか、 又は、Projectウィンドウのファイル上で右クリックします。次のオプションの1つを選択して下さい:
コンパイレーション・オプション
オプション 目的
Compile 選択されたユニットをコンパイルします。コンパイルの後にプロジェクトを再リンクしません
Make 最後のコンパイルの後に変更されたユニットをコンパイルしプロジェクトを再ビルドします
Build All すべてのユニットをコンパイルし、中間ファイルを削除、そして、プロジェクトをビルド
Clean プロジェクトのために出力ファイルを削除

    ノート:

    • プロジェクトに1つのソース・ファイルしかない場合、ワンステップでコンパイルとリンクはされますので、*.oファイルは作成されません。 *.oファイルは既にコンパイルされていてプロジェクトて追加することが出来る場合にプロジェクトの作成/ビルドのプロセスの間にリンクされます

追加ノート

  • 変数、又は、関数を単一ユニットに対してプライベートにするにはキーワード staticを使います。 デフォルトでユニット・レベル(関数の外)で変数が宣言されますと変数は全ての他のユニットに見えることになります。 staticsキーワードがローカル・ユニットの外でアクセスされる関数、又は、変数で使用されるとリンク・タイム・エラーになります

  • もし、2つのユニットが関数、又は、ユニット変数が同じ名前を持つ時は以下の1つで無い限りエラーが発生します:

    • 識別子がキーワードstaticで修飾されている
    • 引数リストが異なり、そして、通常のオーバーロード規則に従って関数の二つのインスタンスはプロジェクトで共存できます。
    • ?関数の内容が全く同じである。同じ*.h ファイルがマルチプル・ファイルに含まれている場合、リンカーは単に重複した関数を削除します

  • マルチプル・コンパイレーション・ユニットを持ったプロジェクトではproject.hのように全てのユニットが#INCLUDES, #DEFINES, プリ-プロセッサの様な ファイルをインクルードするのが最善です。このファイルはプロジェクト内の全てのユニットで同じで有るべき、チップ、速度、 ヒューズとその他多くのの設定を定義します

  • プリプロセッサ・ディレクティブのような設定がユニットの間のメイン・インクルード・ファイルに含まれている時、ライブラリは各ユニットに作成されます。 リンカはライブラリが重複していることを決定し最終的なリンクの過程の間にそれらを削除します

  • プロジェクトがビルドされる時、そのプロジェクトで使用される各ユニットは固有のエラー・ファイルを持っています。 *.batファイルでコンパイルされた時、それは最初のエラーでバッチの実行を停止するのに有効です。 +CCコマンド・ライン・オプションを使用しますとコンパイルに失敗した場合にコンパイラはエラー・コードを返します