EclipseでEZ-USB開発


概要

EZ-USBの開発をKeil以外の統合開発環境で開発するための覚え書き第2弾です


Code::Blocks + SDCCによるEZ-USB開発環境はそこそこ満足できるものでしたが日本語環境に若干の問題がありました
Keil μVisionお試し版からClode::Blocks+SDCCに移行した後も別の環境を探していたところ,EclipseのプラグインにSDCCがあったのでEclipseに移行してみました
ビルド環境を整えるまでに手こずりましたが後は問題ありません.
まあなんというか長いものには巻かれろ的な感じでこれからはEclipse使いますかね


ツール集め

EZ-USBを開発するのに必要なツールとかファイルを集めます
この辺は前回と同じです

1. SDCC本体
SDCC - Small Device C Compilerよりダウンロードできます

2. Eclipse本体
eclipse.orgよりダウンロードできます
JAVAとか使わないのであればEclipse IDE for C/C++ Developersがいいんじゃないでしょうか
クラシックとかインストールすると起動時にプラグインをたくさん読み込んで起動時間が長くなってしまいます
ちなみにC/C++ Developersエディションは標準でCDTが含まれていますが,それ以外のエディションを使用する場合は別途CDTをダウンロードしてください

3. EclipseSDCC
eclipseSDCCよりダウンロードできます

4. SDCC用のヘッダファイル,ライブラリ
Fenrir's BLogのリンクよりCypress社の提供するヘッダファイル,ライブラリをSDCC用に移植したファイルをダウンロードできます
Code::Blocksの時同様ありがたく使わせてもらいます

インストール

 まずSDCCをインストールします.ウィザードに従っていけば問題ないでしょう
ただしインストール先に関しては,デフォルトの"Program Files"はオヌヌメしません.
スペース・日本語を含まないディレクトリにインストールする方が無難でしょう
理由は後述します
とりあえずインストール先は"c:\bin\sdcc"とします

前項3でダウンロードしたファイルを移動します
ヘッダファイル(*.h)は"c:\bin\sdcc\include"にEZUSBというディレクトリを作りその下に納めます
ライブラリ(ezusb.lib)は"c:\bin\sdcc\lib"にEZUSBというディレクトリを作りその下に納めます

次にEclipseをインストールします.これに関してはエクリプスが詳しいので参考にしてください
ついでに日本語化のプラグインも入れておきます

最後にSDCC用のプラグインをインストールします
といっても解凍してでてきたファイルをeclipseをインストールしたディレクトリにコピーするだけですが



※これ以降の説明はEclipseに日本語化プラグインが入っていることを前提に進めます
入れなくても問題ないのですが以降の説明は適宜読み替えてください


プロジェクトの作成

Eclipseを立ち上げ,ファイル→新規→Cプロジェクトをクリックします
新しくウィンドウが開くのでプロジェクト名を適当に入れ,Project types:にMCS51 family(SDCC)を選択します
"次へ"のボタンを押すとSelect Configurationsという画面が出てきます.リリースとデバッグとありますがリリースだけでいいでしょう
ビルドの構成を変更したりするための機能ですがEZ-USB程度のサイズのCPUだとあまりありがたみもないので.
"終了"ボタンを押すとプロジェクトエクスプローラーに新しくプロジェクトが追加されます


ソースファイルを追加する場合

ファイル→新規→ソースファイル/ヘッダーファイル/ファイルをクリックします
拡張子を入れてやれば自動的に認識するようです
アセンブラでかかれたソースも,Code::Blocksの時のように特別な設定をする必要はありません
何もしなくてもプロジェクトに組み込まれアセンブラがかかるようになっています


ビルドの設定

Tool Cainの確認

左側ペイン(プロジェクト・エクスプローラー)のプロジェクト名を右クリックし,プロパティーを選択し,プロパティウィンドウを出します
ウィンドウ左側メニューから"C/C++ ビルド"下の"Tool chain editor"を選び,図1の様にSDCCのコンパイラ,リンカアセンブラが選択されていることを確認します


図1. プロパティー



Includeディレクトリの設定

同じくウィンドウ左側メニューから"C/C++ ビルド"下の設定を選択します
ウィンドウ右側のTool settingsタブの左側の"ディレクトリー"を選択し,インクルード・パスにSDCC下のincludeファイル(mcs51とEZUSB)を追加します


図2. インクルード・パス



ライブラリの指定

リンク時にライブラリの指定をします
同じくウィンドウ左側メニューの設定を選択し,Tool settingタブの左側,SDCC Linker下の"ライブラリー"を選択します
ここでEZ-USBのライブラリを追加するのですが2つ注意することがあります
1つ目はパスをダブルクォーテーション(" ")で囲ってやること
先ほどのIncludeディレクトリの時には自動で付加されましたがここでは意図的に記述してやらないとビルド時にエラーとなってしまいます
2つ目はライブラリの指定には" "(半角スペース)などMS-DOSの時代には使えなかった文字が含まれるディレクトリの指定はビルド時にエラーとなってしまいます
(これがSDCCのインストール時にデフォルトの"Program files"にインストールを推奨しない理由になります)
#win95とかだとプロパティ見るとMS-DOSのファイル名があって"PROGR~1"とかあって指定できたんでしょうけど
#あとは改善されるのを気長に待ちますかね


図3. ライブラリー



アセンブラファイルの処理

ここが一番のネックになります
と言うのは,ビルド時の作業ディレクトリは,ビルド条件を"リリース"とした場合,"(ソースファイルがおいてあるディレクトリ)\リソース"となります.
一方でSDCC(コンパイラ・リンカ)自身は出力先のディレクトリを指定することができますが,asx8051(アセンブラ)は出力先を指定することができません.
このままビルドするとCがソースのファイルは"リソース"ディレクトリ下に中間ファイルが出力されますが,アセンブラがソースのファイルはソースと同じ場所に中間ファイルが出力され,リンク時にエラーとなってしまいます(リンカの設定を何かしらすればうまくいくのかもしれませんが私はできませんでした).
そこでCode::Blocksの時と同様にバッチファイル処理をします.
今回はうまいタイミングでバッチを実行することができないのでアセンブラの実行自体をバッチファイルにしてしまいます.
前置きが長くなりましたが図3.の様なバッチファイルを記述し,sdcc\binに保存します.
ファイル名は"asx8051_.bat"としました.
単純にアセンブラを実行し,その後中間ファイルである.lst, .rel, .symを作業ディレクトリ(Cがソースの中間ファイルと同じ場所)に移動する処理をします.


図4. アセンブラ実行バッチファイル



SDCC Assembler下の一般を選択し,アセンブラー・フラグに"-losg"と追記します(詳細はasx8051を実行しhelpを参照してください)


図5. SDCC Assembler - 一般



SDCC Assemblerを選択し,コマンドに先ほど作成した"asx8051_.bat",コマンド行パターンに"${COMMAND} ${FLAGS} ${INPUTS}"と入力します

図6. SDCC Assembler



最後に"Build artifact"タブを選択し,"Artifact extension:"に"hex"と入力します.デフォルトのihxでも実質変わらないのですが,EZ-USB Interfaceの標準拡張子がhexなので変えておいた方が作業しやすいでしょう


図7. Build artifact



以上で設定は完了です."OK"ボタンを押してプロパティーウィンドウを閉じます
後はほかの開発環境同様,ソース書いてビルドしてやれば実行ファイルを得ることができます

おまけ ビルドがうまくいかないときは

場合によってはビルド時にファイルの差分をうまく認識してくれないことがあるかもしれません
(毎回特定のファイルを削除しないといけないとか)
行き詰まったらプロパティーのC/C++ ビルドを選択して出てくる"Builder Settings"タブの"Generate Makefiles automatically"のチェックをはずしてMakefileを直接書いてみるとうまくいくかもしれません
(私の場合も中間ファイルを削除するコマンドを追加しました)
#しかしそうなると結局SDCC用のプラグインって不要だったんj(ry