なんとかなるさね

マイコンをネタにブログを始めてみました


スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--   blog-entry-   category: スポンサー広告

go page top

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と大幅に小さくなっていました。



関連記事

2013/12/31   blog-entry-398   category: Arduino Lib & CrossGCC

go page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。