Arduino IDE | Pleiades Kepler + VMware Player上のUbuntuでLinux Arduinoスケッチをデバッグ (2)
1つ前のエントリで、Intel Galileo x86 Linux Cross GCCでビルドしたLinux ArduinoスケッチをWindowsの
Pleiades 4.3 KeplerからVMware Player上のUbuntuで実行させてデバッグしようとしたものの、main()関数
の途中で引数チェックに引っ掛かって、Arduinoのsetup()関数に辿り着く前に終了してしまったことを書き
ました。そこで、やっつけで、main()関数の殆どを#if 0~#endifで括って除外し、とにかくsetup()関数へ
辿り着くようにしてみました。あれこれ試してみて分かったのですが、Eclipseは、ワークスペースの設定で
inoファイルをC++ソースと見做すように設定すれば、inoファイルにブレークポイントを設定してブレーク
させることが出来るようです。ただ、inoファイルは、Eclipseの編集ウィンドウの文法チェック機能から見る
と、いい加減なC++ソースに見えてしまいますので、今回、文法チェック機能を無効にするようにしました。


Pleiades 4.3 Keplerのワークスペースの設定は、以下のようにしました。



Pleiades 4.3 Keplerのプロジェクトのプロパティは、以下のようにしました。



なお、Intel Galileo x86 Linux Arduino互換ライブラリのmain()関数は、以下のように#if 0~#endifで括り
ました。
ファイル: arduino-1.5.3\hardware\arduino\x86\cores\arduino\main.cpp
int main(int argc, char * argv[])
{
// TODO: disjoin platform ID defined in /sys/firmware/boad_data/plat_id with define PLATFORM_ID
// and refuse to run if identifiers don't match
// Install a signal handler
#if 0 // FIXME: kari kari kari (by MON-80)
// make ttyprintk at some point
stdout = freopen("/tmp/log.txt", "w", stdout);
if (stdout == NULL){
fprintf(stderr, "unable to remap stdout !\n");
exit(-1);
}
fflush(stdout);
stderr = freopen("/tmp/log_er.txt", "w", stderr);
if (stderr == NULL){
printf("Unable to remap stderr !\n");
exit(-1);
}
fflush(stderr);
// debug for the user
if (argc < 3){
fprintf(stderr, "./sketch tty0 tty1\n");
return -1;
}
printf("started with binary=%s Serial=%s Serail1=%s\n", argv[0], argv[1], argv[2]);
fflush(stdout);
// TODO: derive trace level and optional IP from command line
trace_init(VARIANT_TRACE_LEVEL, 0);
trace_target_enable(TRACE_TARGET_UART);
// Init IRQ layer
interrupt_init();
// Call Arduino init
init(argc, argv);
#endif // kari kari kari (by MON-80)
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
//if (serialEventRun) serialEventRun();
}
return 0;
}
Intel Galileo Arduino IDEでのビルド結果は、以下の通りでした。なぜか、表示されるスケッチサイズが
大幅に小さくなっていました。実は、私がstripコマンドをスキップするようにビルド設定ファイルに細工
した影響で、表示されるサイズがデバッグ情報込みのスケッチサイズになってしまっているようなのです
が、それでも、#if 0~#endifで括る前と後を比べると、167KB → 8KBと大幅に小さくなっていました。

Pleiades 4.3 KeplerからVMware Player上のUbuntuで実行させてデバッグしようとしたものの、main()関数
の途中で引数チェックに引っ掛かって、Arduinoのsetup()関数に辿り着く前に終了してしまったことを書き
ました。そこで、やっつけで、main()関数の殆どを#if 0~#endifで括って除外し、とにかくsetup()関数へ
辿り着くようにしてみました。あれこれ試してみて分かったのですが、Eclipseは、ワークスペースの設定で
inoファイルをC++ソースと見做すように設定すれば、inoファイルにブレークポイントを設定してブレーク
させることが出来るようです。ただ、inoファイルは、Eclipseの編集ウィンドウの文法チェック機能から見る
と、いい加減なC++ソースに見えてしまいますので、今回、文法チェック機能を無効にするようにしました。


Pleiades 4.3 Keplerのワークスペースの設定は、以下のようにしました。



Pleiades 4.3 Keplerのプロジェクトのプロパティは、以下のようにしました。



なお、Intel Galileo x86 Linux Arduino互換ライブラリのmain()関数は、以下のように#if 0~#endifで括り
ました。
ファイル: arduino-1.5.3\hardware\arduino\x86\cores\arduino\main.cpp
int main(int argc, char * argv[])
{
// TODO: disjoin platform ID defined in /sys/firmware/boad_data/plat_id with define PLATFORM_ID
// and refuse to run if identifiers don't match
// Install a signal handler
#if 0 // FIXME: kari kari kari (by MON-80)
// make ttyprintk at some point
stdout = freopen("/tmp/log.txt", "w", stdout);
if (stdout == NULL){
fprintf(stderr, "unable to remap stdout !\n");
exit(-1);
}
fflush(stdout);
stderr = freopen("/tmp/log_er.txt", "w", stderr);
if (stderr == NULL){
printf("Unable to remap stderr !\n");
exit(-1);
}
fflush(stderr);
// debug for the user
if (argc < 3){
fprintf(stderr, "./sketch tty0 tty1\n");
return -1;
}
printf("started with binary=%s Serial=%s Serail1=%s\n", argv[0], argv[1], argv[2]);
fflush(stdout);
// TODO: derive trace level and optional IP from command line
trace_init(VARIANT_TRACE_LEVEL, 0);
trace_target_enable(TRACE_TARGET_UART);
// Init IRQ layer
interrupt_init();
// Call Arduino init
init(argc, argv);
#endif // kari kari kari (by MON-80)
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
//if (serialEventRun) serialEventRun();
}
return 0;
}
Intel Galileo Arduino IDEでのビルド結果は、以下の通りでした。なぜか、表示されるスケッチサイズが
大幅に小さくなっていました。実は、私がstripコマンドをスキップするようにビルド設定ファイルに細工
した影響で、表示されるサイズがデバッグ情報込みのスケッチサイズになってしまっているようなのです
が、それでも、#if 0~#endifで括る前と後を比べると、167KB → 8KBと大幅に小さくなっていました。

- 関連記事
-
- Arduino IDE | Linux Arduino互換ライブラリをCygwin GCCでビルド→最初からエラー
- Arduino IDE | Intel Galileo Arduino IDEのマイコンボードメニューを冗談半分(?)に増やしてみた
- Arduino IDE | Intel Galileo Arduino IDEで作成した実行プログラムをLinuxから実行する時の引数
- Arduino IDE | Intel Galileo Arduino IDEでcppファイルをコンパイル
- Arduino IDE | Pleiades KeplerとIntel Galileo Arduino IDEでスケッチフォルダとビルドフォルダを共有
- Arduino IDE | Pleiades KeplerでLinux Arduino互換ライブラリをcppファイルから使用する
- Arduino IDE | Pleiades KeplerでLinux Arduinoスケッチのinoファイルをコンパイル
- Arduino IDE | Pleiades Kepler + VMware Player上のUbuntuでLinux Arduinoスケッチをデバッグ (2)
- Arduino IDE | Pleiades Kepler + VMware Player上のUbuntuでLinux Arduinoスケッチをデバッグ (1)
- Arduino IDE | Intel Galileo Arduino IDEのビルドフォルダを変更する
- Arduino IDE | Intel Galileo Arduino IDEで呼び出すGCCやオプションを変えてビルドする
- Arduino IDE | Intel Galileo Arduino IDEのGCCでビルドしたプログラムをUbuntuで実行してみた
- Arduino IDE | Intel Galileo Arduino IDEにGCCを呼び出す時のオプションを表示させる
- Arduino IDE | Intel Galileo ArduinoスケッチにLinuxのスレッド制御関数を書いてビルドしてみた
- Arduino IDE | Intel Galileo x86 Linux Arduino互換ライブラリに使用されているGCC
2013/12/31 blog-entry-398 category: Arduino Lib & CrossGCC
| h o m e |