= サンプルアプリケーションのビルドと実行 = [[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形式)の生成 === ① EV3RTのルートディレクトリ(hrp2)に移動します ② ロードしたいアプリケーションのワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make mod=<アプリケーションのフォルダ名>」で、動的ローディング用バイナリ(Module)をビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make mod=gyroboy }}} ④ ビルドが正常に終了すると、以下のように「app」という動的ローディング用バイナリが生成されます [[Image(cygwin-mod-gyroboy-ls.png)]] === PCからEV3へのアプリケーションのロード方法の選択 === === アプリケーションローダを実行して、生成されたアプリケーションのバイナリファイルをEV3にロード&実行することができます。アプリケーションローダがSDカードに入っていない場合には、その uImage をSDカードのルートフォルダにコピーしておきます。 === * デフォルトのアプリケーションローダの uImage は、ダウンロードしたEV3RTパッケージの sdcard/uImage です * workspace/apploader ディレクトリで、$ make app=apploader コマンドを実行して生成される uImage でも構いません(同じものです) ① SDカードをEV3に差し込んで、EV3の電源を入れてEV3RTのアプリケーションローダを起動します * ローダのGUIメニューが表示されたら起動は成功です ② EV3のアプリケーションローダのメニューで、アプリケーションのロード方法を選択します。 * SD card:SDカードに入っているアプリケーションをロードします。ロードするアプリケーションのバイナリファイルを、予め、SDカードの「/ev3rt/apps/」に格納しておく必要があります。ロードしたいファイル名を選択すると、アプリケーションをロードして実行します。 * Bluetooth:Bluetoothで接続されたPCから、アプリケーションをロードします。 * 「[wiki:DevEnv#Bluetoothの接続 Bluetoothの接続方法]」を参考にして、予めPCとEV3のBluetoothペアリングを実施しておいてください。 * Serial port 1:シリアルケーブル接続されたPCから、アプリケーションをロードします。 === Bluetooth (またはシリアルケーブル)によるアプリケーションのロード方法 === ① EV3を起動した状態で、PCで Tera Term を起動し、EV3に接続します(COMポートのserial port profile側に接続してください)。接続されるまで待ちます。  ② Bluetooth(シリアルケーブルの場合は Serial port 1)でロードする場合、EV3のメニューで Bluetooth (シリアルケーブルの場合は Serial port 1)を選択して、転送待ち状態にします(「Receive App File」と画面に表示されます)。 ③ PCで、 Tera Term のZMODEM転送機能を使ってアプリケーションのバイナリファイルをロードします。  [[Image(pic1.png)]] * ファイルの選択画面が表示されるので、EV3にロードしたいバイナリファイルを選択します。ファイルを選択すると、送信状況を表すダイアログが表示され、送信100%になったら、送信完了です。  * ここでロードされたアプリケーションのバイナリファイルは、SDカードの「/ev3rt/apps/」以下に格納されます。 ④  正常にロードできている場合、EV3の画面に「App Received」と表示されます。選択ボタン(中央のボタン)を押すと、ロードしたアプリケーションを実行できます。 * 戻るボタンを押すと、アプリケーションを終了し、ローダのメニューに戻ります。別のアプリケーションをロードすることができます。 == スタンドアローン形式(ダイナミックローダ無し) == === スタンドアローン形式とは? === スタンドアローン形式は、開発したアプリケーションと本プラットフォームを一つの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:] ||