= サンプルアプリケーションのビルドと実行 = [[TOC(depth=1, WhatsEV3RT, Download, DevEnv, SampleProgram, UserManual, FAQ)]] == 実行形式とビルド方法 == 本プラットフォームのアプリケーションは2つの形式で実行することができます。 * ダイナミックローダを使って動的にロードされて実行する * ダイナミックローダを使わずスタンドアローンで実行する == 動的ローディング形式(ダイナミックローダ有り) == 動的ローディング形式はダイナミックローダを使って、SDカードに入れた又はBluetooth等のシリアル通信で受信したアプリケーションのバイナリファイル(ELF形式)をロードして動的に実行する形式です。 この実行形式には、以下の特徴があります。 * EV3をリセットしなくても実行中のアプリケーションを動的に書き換えます * アプリケーションが変更されてもBluetoothを再接続する必要がありません * PCでアプリケーションのバイナリファイルをSDカードに書き込む手間を省略できます * 複数のアプリケーションを1枚のSDカード(/ev3rt/apps/ディレクトリ以下)に入れることができます * 高速にコンパイルすることができます * ローダとアプリケーションのインターフェスバージョン(PIL Version)を一致する必要があります * ローダのPIL Versionが更新される場合、アプリケーションの再コンパイルが必要になります * アプリケーションの最大サイズの制限があります(ローダの設定に依存しますが、デフォルトは1MB) * アプリケーションのカーネルオブジェクトの数の制限があります(ローダの設定に依存、デフォルトは以下) * タスク     最大32個 * セマフォ    最大16個 * イベントフラグ 最大16個 * ミューテックス 最大0個![TODO:] 動的ローディング形式を利用するために、アプリケーションのバイナリファイル(ELF形式)をビルドします。 以下の手順でそのバイナリファイルを生成できます。 ① プラットフォームのルートディレクトリ(hrp2)に移動します ② アプリケーションのあるワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make mod=<アプリケーションのフォルダ名>」で動的ローディング用バイナリ(Module)をビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make mod=gyroboy }}} ④ ビルドが正常に終了すると、「app」という動的ローディング用バイナリが生成されます ダイナミックローダを利用して、以下の手順で生成されたアプリケーションのバイナリファイルをロードすることができます。 ⑤ ローダをSDカードに入れていない場合、そのuImageをSDカードのルートフォルダにコピーします * デフォルトのローダのuImageは「sdcard/uImage」です ⑥ SDカードをEV3に差し込んで、電源を入れてローダを実行します * ローダのGUIメニューが表示されたら起動は成功しました ⑦ ローダのメニューを使って以下の方式でアプリケーションをロードすることができます * SD card:SDカードに入れたアプリケーションをロードします。アプリケーションのバイナリファイルをSDカードの「/ev3rt/apps」というフォルダに入れる必要があります。 * Bluetooth:Bluetoothでアプリケーションをロードします。「[wiki:DevEnv Bluetoothの接続方法]」を参考してBluetoothを接続する必要があります。 * Serial port 1:シリアルケーブルでアプリケーションをロードします。 ⑧ BluetoothまたはSerial port 1でロードする場合、ローダのメニューで Bluetooth または Serial port 1 を選択した後、ターミナルのZMODEM転送機能でアプリケーションのバイナリファイルを送信します [[Image(pic1.png)]] ⑨ アプリケーション実行中、戻るボタンを長押し(0.5秒程度)してアプリケーションを終了できます * アプリケーションを終了すると、ローダのメニューに戻ります。新しいアプリケーションをロードすることができます == スタンドアローン形式(ダイナミックローダ無し) == スタンドアローン形式は開発したアプリケーションと本プラットフォームを一つのEV3のブートローダ(U-Boot)用ブートイメージ(uImage)としてビルドして、SDカードの指定場所に入れて実行する形式です。この実行形式には、以下の特徴があります。 * アプリケーションの最大サイズやカーネルオブジェクトの数の制限はありません * ダイナミックローダに依存せず単独に動作できます * アプリケーションを更新する度に、手間がかかります * PCでアプリケーションのブートイメージ(uImage)をSDカードに書き込む操作が必要です * EV3をリセットしてから実行するのでBluetoothの再接続が必要です * 同じSDカードにアプリケーションを一つしか入れることができません * コンパイル時間は比較的遅いです * アプリケーションだけではなく、デバイスドライバ等もコンパイルする必要があるからです スタンドアローン形式を利用するために、アプリケーションのブートイメージ(uImage)をビルドする必要があります。以下の手順でそのブートイメージを生成できます。 ① プラットフォームのルートディレクトリ(hrp2)に移動します ② アプリケーションのあるワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make app=<アプリケーションのフォルダ名>」でスタンドアローン形式用ブートイメージをビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make app=gyroboy }}} ④ ビルドが正常終了すると、 下記のような出力情報が表示されます。「uImage」というスタンドアローン形式用ブートイメージが生成されました 生成された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:] ||