« 空中配線ロボットを修理 | トップページ | EZ-USB FX3とFPGAをつなげて動作テスト »

2012.04.20

ArduinoはどうしてPDEファイルをコンパイルできるのか

普通、C++のプログラムは#include文を頭にいっぱい書きます。
Arduinoのプログラム(スケッチ)の実体はC++ですが、#include文を書きません。
何もinlcudeしなくても各種関数が使えてしまいまうs。
では、どうやってPDEファイルをコンパイルしているのでしょう。
気になったので調べてみました。

適当なExampleをロードして、ビルドしてみました。
Arduinoの統合環境でShiftキーを押しながらビルドすると、コンパイル中のメッセージが見えます。

Arduino022_1

Arduino統合開発環境は、ソースコードの入っているフォルダには何も中間ファイルを残しません。

C:\Document and Settings・・・の中のTempにbuild数字.tmpというフォルダを作って、そこに中間ファイルを押し込めているようです。そして、その中に怪しげなCPPファイルが!
Arduino022_2

開いてみると、元のファイルに3行付け加わったファイルがCPPファイルという名前で出来ていました。
Arduino022_3

付け加わった3行は、


#include "WProgram.h"
void setup();
void loop();

です。
そして、avr-g++でこのCPPファイルをコンパイルしているようです。

※この3行はコメントが終わって最初の意味のある行が始まる直前に挿入されるようです。

つまり、PDEファイル結合→include文を含めた3行挿入→CPP作成→CPPをコンパイル、という手順のようです。

このあたりを行っているのがSketch.javaというプログラムです。
StringBuffer bigCode = new StringBuffer();
というのがあるので、おそらく関連するすべてのPDEファイルを1つにくっつけているのではないかと思われます。
3行挿入を行っているのがPdePreprocessor.javaというファイルのPdePreprocessorクラスです。

コンパイル時にエラーが生じたときに表示される行番号は、どうやら、この挿入した行を補正して表示するしくみがあるようです。

よくできていますね

|

« 空中配線ロボットを修理 | トップページ | EZ-USB FX3とFPGAをつなげて動作テスト »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 空中配線ロボットを修理 | トップページ | EZ-USB FX3とFPGAをつなげて動作テスト »