= サンプルアプリケーションのビルドと実行 = [[TOC(depth=1, WhatsEV3RT, Download, DevEnv, SampleProgram, UserManual, EV3RTsAPI, FAQ, Contacts)]] == 実行形式とビルド方法 == 本プラットフォームのアプリケーションは、2つの方法で実行することができます。 * 動的ローディング形式:OSとアプリケーションのバイナリを分け、ダイナミックローディング機能を使って、アプリケーションだけをOS実行中にロードして実行する * スタンドアローン形式:ダイナミックローディング機能を使わず、OSとアプリケーションを1つのバイナリにして単独(スタンドアローン)で実行する == 動的ローディング形式(ダイナミックローディング機能を利用) == 動的ローディング形式は、ダイナミックローディング機能をもつアプリケーションローダ(apploader)を使って、SDカードに入れた又はBluetooth等のシリアル通信で受信したアプリケーションのバイナリファイル(ELF形式)をロードして動的に実行する形式です。 この実行形式には、以下の特徴があります。 __メリット__ * EV3をリセットしなくても、OS動作中にアプリケーションを書き換えることができます * PCで、アプリケーションのバイナリファイルをSDカードに書き込む手間を省略できます * アプリケーションを変更しても、Bluetoothを再接続する必要がありません * 複数のアプリケーションを1枚のSDカード(「/ev3rt/apps/」以下)に入れることができます * 高速にコンパイルすることができます * OSとデバイスドライバ等を変更しない限り、再度コンパイルする必要はありません * アプリケーションの開発時には、アプリケーションだけコンパイルすれば良いです __注意事項__ * ローダとアプリケーションのインターフェスバージョン(PIL Version)を一致する必要があります * ローダのPIL Versionが更新される場合、アプリケーションの再コンパイルが必要になります * アプリケーションの最大サイズの制限があります(ローダの設定に依存しますが、デフォルトは1MB) * アプリケーションのカーネルオブジェクトの数の制限があります(ローダの設定に依存、デフォルトは以下) * タスク     最大32個 * セマフォ    最大16個 * イベントフラグ 最大16個 * ミューテックス 最大0個![TODO:] 動的ローディング形式を利用するためには、以下の手順で、アプリケーションのバイナリファイル(ELF形式)をビルドします。 ① プラットフォームのルートディレクトリ(hrp2)に移動します ② アプリケーションのあるワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make mod=<アプリケーションのフォルダ名>」で動的ローディング用バイナリ(Module)をビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make mod=gyroboy }}} ④ ビルドが正常に終了すると、以下のように「app」という動的ローディング用バイナリが生成されます [[Image(cygwin-mod-gyroboy-ls.png)]] アプリケーションローダを実行して、生成されたアプリケーションのバイナリファイルを以下の手順でEV3にロード&実行することができます。 ⑤ アプリケーションローダがSDカードに入っていない場合には、そのuImageをSDカードのルートフォルダにコピーします * デフォルトのアプリケーションローダの uImage は、ダウンロードしたEV3RTの「sdcard/uImage」に入っています * workspace/apploader を make=app=apploader によってビルドして生成される uImage でも構いません(同じものです) ⑥ SDカードをEV3に差し込んで、電源を入れてアプリケーションローダを実行します * ローダのGUIメニューが表示されたら起動は成功です ⑦ アプリケーションローダのメニューでは、アプリケーションのロード方法を選択します。 * SD card:SDカードに入れたアプリケーションをロードします。ロードするアプリケーションのバイナリファイルを、SDカードの「/ev3rt/apps/」以下に格納しておく必要があります。 * Bluetooth:Bluetoothで接続されたPCから、アプリケーションをロードします。「[wiki:DevEnv#Bluetoothの接続 Bluetoothの接続方法]」を参考してBluetoothを接続する必要があります。 * Serial port 1:シリアルケーブル接続されたPCから、アプリケーションをロードします。 ⑧ BluetoothまたはSerial port 1でロードする場合、ローダのメニューで Bluetooth または Serial port 1 を選択した後、PC上でターミナルを起動し、ZMODEM転送機能を使ってアプリケーションのバイナリファイルを送信します。 [[Image(pic1.png)]] ここでロードされたアプリケーションのバイナリファイルは、SDカードの「/ev3rt/apps/」以下に格納されます。 ⑨ アプリケーションを実行中、戻るボタンを長押し(0.5秒程度)してアプリケーションを終了できます。 * アプリケーションを終了すると、ローダのメニューに戻るので、別のアプリケーションをロードすることができます… == スタンドアローン形式(ダイナミックローダ無し) == スタンドアローン形式は、開発したアプリケーションと本プラットフォームを一つのEV3のブートローダ(U-Boot)用ブートイメージ(uImage)としてビルドして、SDカードの指定場所に入れて実行する形式です。この実行形式には、以下の特徴があります。 __メリット__ * アプリケーションの最大サイズやカーネルオブジェクトの数の制限はありません * ダイナミックローディング機能やアプリケーションローダに依存せず、単独に動作できます __注意事項__ * アプリケーションを更新する度に、再構築の手間がかかります * PCでアプリケーションのブートイメージ(uImage)をSDカードに書き込む操作が必要です * EV3をリセットしてから実行するので、Bluetoothを使用する場合には、再接続が必要です * 同じSDカードにアプリケーションを一つしか入れることができません * コンパイル時間は比較的遅いです * アプリケーションだけではなく、デバイスドライバ等もコンパイルする必要があるからです スタンドアローン形式を利用するために、アプリケーションのブートイメージ(uImage)をビルドする必要があります。以下の手順でそのブートイメージを生成できます。 ① プラットフォームのルートディレクトリ(hrp2)に移動します ② アプリケーションのあるワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make app=<アプリケーションのフォルダ名>」でスタンドアローン形式用ブートイメージをビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make app=gyroboy }}} ④ ビルドが正常終了すると、 下記のような出力情報が表示されます。 [[Image(cygwin-app-gyroboy.png)]] 「uImage」というスタンドアローン形式用ブートイメージが生成されます。 [[Image(cygwin-app-gyroboy-ls.png)]] 生成されたuImageをSDカードのルートフォルダにコピーします。 SDカードをEV3の本体に差し込んでEV3の電源を入れてアプリケーションを実行します。Bluetoothを接続すれば、アプリケーションの出力を見ることができます。 === === == サンプルプログラムの一覧 == パッケージには以下のサンプルアプリケーションが入っています。 === 機能テスト用プログラム(helloev3) === || アプリケーション名 || helloev3 || || 機能説明 || プラットフォームの各種機能をテストできるアプリケーション || || ソースフォルダ || workspace/helloev3 || || 組み立て方 || 任意 || || デバイス接続 || 自由です。アプリケーション実行中に動的に接続を設定します。 || || 使い方 || ![TODO:] || === 二輪型倒立振子ロボット制御(gyroboy) === || アプリケーション名 || gyroboy || || 機能説明 || ジャイロセンサで二輪型倒立振子ロボットを制御するサンプルアプリケーション || || ソースフォルダ || workspace/gyroboy || || 組み立て方 || 「[http://robotsquare.com/wp-content/uploads/2013/10/45544_gyroboy.pdf LEGO MINDSTORMS EV3 Education 45544 Instructions Gyro Boy]」 || || デバイス接続 || ジャイロセンサ:ポート2、左モータ:ポートA、右モータ:ポートD || || 使い方 || ![TODO:] || === ライントレース(linetrace) === || アプリケーション名 || linetrace || || 機能説明 || PID制御で簡単なライントレース機能を実現するサンプルアプリケーション || || ソースフォルダ || workspace/linetrace || || 組み立て方 || 「[http://robotsquare.com/wp-content/uploads/2013/10/45544_educator.pdf LEGO MINDSTORMS EV3 Education 45544 Instructions Educator Vehicle]」 || || デバイス接続 || カラーセンサ:ポート3、左モータ:ポートB、右モータ:ポートC || || 使い方 || ![TODO:] || === Trike for EV3(trike) === || アプリケーション名 || trike || || 機能説明 || Trike for EV3で簡単なライントレース機能を実現するサンプルアプリケーション || || ソースフォルダ || workspace/trike || || 組み立て方 || 「Trike for EV3」 || || デバイス接続 || ![TODO:] || || 使い方 || ![TODO:] ||