2008/8/31
ラジコン関係の小物には、よくPICマイコンを使います。
プログラムは全てCで記述して、CC5Xというfree版のCコンパイラを
MPLABに統合させて使っています。
アセンブラで書くよりも短期間で目的の動作を実現できますし、
メンテナンス性も高いので、もう手放せません。
デバッグ時に必要に迫られてCC5Xの出力したアセンブラを見ましたが、
私が手作業でアセンブラで書くよりもずっときれいでわかりやすい
コードを生成しています。
webでPIC用のCコンパイラをサーチしても、CC5Xはあまりヒットしないので
すが、私はCC5Xは無料で使えるし、非常に出来の良いツールだと思います。
cc5xの使い方(MPLABへの統合)
cc5xは、こちらからダウンロードできます。
CC5Xのページ
"FREE edition of CC5X"が無料で使えるバージョンです。
cc5xfree.exeをダウンロードして実行すると、\cc5xfreeというディレクトリの下に
INSTALL.TXTができています。
この中に詳細な使い方が書かれていますので、備忘録として内容を
メモしておきます。画面は複数のソースファイルのプロジェクトのものなので、
単一ソースファイルのプロジェクトのときは、適宜変更する必要があります。
--------------------------------------------------------
MPLABサポート
CC5XはMPLAB環境で使うことができます。
プロジェクトのセットアップは、特にシングルモジュールモードの
場合は容易です。
コンパイラからの出力は、MPLABの'Output'ウィンドウに表示されます。
エラーメッセージ上のPOINT-AND-CLICKをサポートしています。
(エラーメッセージをダブルクリックすると、ソースコードの
該当部にカーソルがジャンプします)
新しいプロジェクトの用意します。
最初にcc5xをインストールし、MPLABを起動します。
"New Project"アイコンをクリックするか、メニューの中から
"Project->New"を選択して、新しいプロジェクトを作ります。
プロジェクトの名前を入力します。
次に、プロジェクトのファイルを格納するディレクトリを決めます。
MPLABはこのディレクトリに、
<プロジェクトの名前>.mcp
<プロジェクトの名前>.mcw
という二つのファイルを作り、プロジェクトの名前を含んだウィンドウを
表示します。
メニューから、"Configure->Select Device"を選び、使うPICを決めます。
メニューから、"Configure->Configuration Bits"を選び、Configuration bit
を決めます。
(以下の内容を決められます。
Oscillator
Watchdog Timer
Power Up Timer
Master Clear Enable
Brown Out Detect
Code Protect
Data EE Read Protect
これらは、ソースコード内で、
#pragma config = 0x3F50
というような表記でも実現できます。)
ハイレベルデバッグ用に、メニューから"Debugger->Slelct Tool"を選択し
MPLAB ICCD 2 か MPLAB SIMを選択します。
メニューから"Project->Slelct Language Toolsuite"を選択します。
Active Toolsuiteの中から、"B Knudsen Data CC5X"を選択します。
それから、"Toolsuite Contents"の中から、"CC5X C Compiler"を選択します。
"Location"フィールドに、CC5X.EXEのフルパスを入力します。
"OK"を押します。
>
メニューから、"Project->Build Options->Project"を選択し、
"Build Options..."を選びます。
"Include Path, $(INCDIR)"のパスを入力します。
このパスは通常ヘッダーやその他のincludeファイルを含んでいる
コンパイラのディレクトリを指定します。
このパスにスペースが含まれている場合は、手作業で" "でくくります。
ディレクトリの文字列は \"(バックスラッシュ+ダブルクオート)で
終わってはいけません。
理由は、このオプションが正常にコンパイラに伝わらなくなるからです。
コマンドラインオプションの追加・変更をします。
メニューから、"Project->Build Options->Project"を選択し、
"Build Options..."を選びます。
"CC5X C Compiler"タブをクリックします。
"Additional Command-Line Options" フィールドにオプションの
文字列を入力することができます。
複数のincludeパスは、各々のディレクトリを -I
プロジェクトをつくると、MPLABは左上にプロジェクトファイルを
指定できるウィンドウを表示します。
プロジェクトに追加するファイルを作成しておきます。
"Source Files"項目を右クリックすると、ソースファイルを追加する
ことができます。
"Build all"(CTRL-F10)で、プロジェクトをビルドします。
Outputウィンドウに、BUILD SUCCEEDED か BUILD FAILEDの状態が
表示されます。
--------------------------------------------------------
--------------------------------------------------------
ほぼ直訳しているので、慣れてくると余計な情報が多いと感じてきます。
以下は、必要最低限にまとめたものです。
--------------------------------------------------------
CC5X Cコンパイラ --- MPLAB IDE
Microchip
MPLAB-IDE
を実行する。
そのあとで、CC5Xコンパイラーを使用ツールと設定する。
---------------------------
新しいプロジェクトを作る。
Project
New
新しいプロジェクトの名前と、作業ディレクトリを入力して、OK。
MPLABが、このディレクトリに
---------------------------
デバイスを決める。
Configure
Select Device
---------------------------
コンフィグレーションビットを設定する。
Configure
Configuration Bits
Oscillator Internal RC No Clock
Watchdog Timer Off
Power Up Timer On
Master Clear Enable Internal
Brown Out Detect On
Code Protect Off
Data EE Read Protect Off
---------------------------
デバッグ関係の設定。
Debugger
Select Tool
MPLAB SIM
---------------------------
Project
Select Language Toolsuite
Active Toolsuiteは、CC5Xを選択する。
B Knudsen Data CC5X
Toolsuite Contentsは、CC5X C Compilerを選択する。
Locationには、CC5Xをインストールしたディレクトリを設定。
D:\Tool\cc5xfree\CC5X.EXE
---------------------------
Project
Set Language Tool Locations
+ B Knudsen Data CC5X
+をクリック。
+Default Search Paths & Directories
+をクリック。
Include Search Path, $[INCDIR] をクリック。
インストールしてあるCC5Xのライブラリがあるディレクトリを入力。
最後の\は削除。
""でくくる。
"D:\Tool\cc5xfree"
---------------------------
ビルドオプションの設定。
Project
Build Option
Project
Directoriesタブ
Show directories for は、 Include Search Path を選択。
Newボタンを押す。
出てきた ...ボタンを押して、D:\Tool\cc5xfree\ を設定。
CC5X C Compilerタブ
インクルードパスが複数あれば、
Additional Command-Line Ooptionsの欄に入力。
-I D:\Tool\hogehoge
---------------------------
プロジェクトにファイルを追加する。
Add files
ソースファイルを選択。
--------------------------------------------------------
以下は、複数のソースファイルに分割したプロジェクトの例です。
cc5xのマニュアルと、MPLABのHELPを調べながら、試行錯誤して解決した
方法ですので、もっと簡単なやり方があるかもしれません。
大雑把な流れとしては、
1 各ソースファイルをリロケータブルオプションをつけてコンパイルし、
それぞれのソースに対応したasmファイルを作成する。
2 asmファイルをMPLABのリンカーでリンクし、HEXファイルを生成させる。
この方法だと、MPLAB-simでのソースコードデバッグはできなくなります。
ただし、アセンブラでのデバッグは動きます。
以下、詳細です。
準備
左上のウィンドウで
Linker Scriptを右クリックして、ターゲットデバイスのlkrファイルを
指定しておきます。
今回は、16F88を使いましたので、16F88.lkrを CC5X.EXEのあるディレクトリ
からプロジェクトのディレクトリにコピーしてあります。
一部、アドレスマップを修正してあります。
CC5X.EXEのあるディレクトリから、RELOC.INCをプロジェクトのディレクトリに
コピーします。
一部、オプションを変えてあります。
ステップ1
.cを.asmにコンパイルします。
Project
select language toolsuite
CC5X
Project
Build option
CC5X C Compiler
Additional Command-Line Option
-r(リロケータブル)
-rp0 ( -rp
codepage 0 が PROG0となるように指定します。
CTRL+F10でコンパイルします。
私の環境では何故か二つのソースファイルのうち一つしかコンパイルされませんでした。
仕方がないので、左上のウィンドウでSource Filesに一つずつ .cファイルを
指定して、個別にコンパイルして .asmファイルを生成させています。
souce.cのコンパイル
sub-func.cのコンパイル
ステップ2
.asmをリンクさせて、.HEXファイルを作ります。
Project
select language toolsuite
Microchip MPASM Toolsuite
Project
Build Option
Project
MPLINK Linker TAB
Suppress COD-file generation のチェックを外すこと。
ここのチェックを外すと .lstファイルが生成されます。
正常に動作していれば見ることは無いと思いますが、もし
なにかおかしな動作をしていたりする場合は、解析用に必要です。
左上のウィンドウの Source Filesには、.asmファイルを全て指定しておきます。
F10でリンクします。
その他
ソースコード内に以下の定義をしてあります。
power.c
#pragma codepage 0
#pragma rambank 0
#pragma update_PAGE 1 /* ON */
sub-func.c
#pragma sharedAllocation <- このプロジェクトでは不要かもしれません。
#pragma update_PAGE 1 /* ON */
#pragma codepage 0
#pragma rambank 1
メモリマップ
Ballancer.mapを見ると詳細が把握できます。
プロジェクトに関係するファイルです。
power.c ソースコードその1
sub-func.c ソースコードその2
RELOC.INC
16F88.lkr
MPLABの生成物
power.asm
sub-func.asm
power.lst
sub-func.lst
Ballancer.map
Ballancer.hex
Ballancer.lst