| 1 | = ユーザマニュアル = |
| 2 | == 1. Application Programming Interface == |
| 3 | == 1.1 利用できるAPI == |
| 4 | 本プラットフォームは、下記の3つのAPIで開発することができます。 |
| 5 | |
| 6 | * TOPPERS/HRP2カーネルAPI |
| 7 | * リアルタイムOSの機能を提供します |
| 8 | * 詳細は「[http://www.toppers.jp/documents.html#ngki_spec TOPPERS新世代カーネル統合仕様書 Release 1.6.0]」を参照してください |
| 9 | * 標準Cライブラリ(Newlib) |
| 10 | * C言語で開発する時、文字列操作や入出力等の必要かつ基本的な機能を提供します |
| 11 | * 詳細は「[https://sourceware.org/newlib/docs.html Newlib Documentations]」を参照してください |
| 12 | * EV3用C言語API |
| 13 | * モータ、センサ等EV3独自の機能をサポートするAPIです |
| 14 | * 詳細は「[http://www.toppers.jp/ev3pf/EV3RT_C_API_Reference/index.html EV3RT C言語APIリファレンス]」を参照してください |
| 15 | |
| 16 | == 1.2 Bluetooth 通信機能 == |
| 17 | 本プラットフォームはBluetoothのSerial Port Profile(SPP)をサポートします。Bluetooth接続を仮想のシリアルポートとして通信することができます。 |
| 18 | |
| 19 | TOPPERS/HRP2カーネルのシリアルインターフェスドライバを利用する場合、SIO_PORT_BTというID番号で下記の例のようにBluetooth通信を行うことができます。 |
| 20 | |
| 21 | {{{ |
| 22 | // Bluetooth仮想シリアルポートからbufが指すバッファへ最大lenバイトを読み込む |
| 23 | serial_rea_dat(SIO_PORT_BT, buf, len); |
| 24 | |
| 25 | // bufが指すバッファからBluetooth仮想シリアルポートへ最大lenバイトを書き込む |
| 26 | serial_wri_dat(SIO_PORT_BT, buf, len); |
| 27 | }}} |
| 28 | また、SIO_BT_FILENOというファイルディスクリプタを使って標準Cライブラリのファイル操作関数でも下記の例のようにBluetooth通信を実現できます。 |
| 29 | |
| 30 | {{{ |
| 31 | // Bluetooth仮想シリアルポートのファイルをオープンする |
| 32 | FILE *bt = ev3_serial_open_file(EV3_SERIAL_BT); |
| 33 | |
| 34 | // 書式化した文字列をBluetooth仮想シリアルポートへ書き込む |
| 35 | fprintf(bt, "Bluetooth SPP ID: %d\n", EV3_SERIAL_BT); |
| 36 | |
| 37 | // Bluetooth仮想シリアルポートから1文字を読み取る |
| 38 | int c = fgetc(bt); |
| 39 | }}} |
| 40 | これらの受送信機能を使って、Bluetoothでの情報出力やリモートコントロール等が実現できます。 |
| 41 | |
| 42 | == 1.3. SDカード内のファイル操作 == |
| 43 | 本プラットフォームはSDカード内のファイル操作をサポートします。ファイル操作は標準Cライブラリのファイル操作関数とEV3用C言語APIのファイルシステムに関する関数で実現できます。これらの関数を操作する時、ファイル(又はディレクトリ)のパスが必要する場合があります。その場合、ルートフォルダ「/」はSDカードのルートフォルダを意味します。例えば、「/test.wav」はSDカードのルートフォルダ内にある「test.wav」を指します。 |
| 44 | |
| 45 | = 2.アプリケーションのビルド管理 = |
| 46 | == 2.1. アプリケーションのフォルダ構成 == |
| 47 | アプリケーションのフォルダの典型的な構成は以下のようです。 |
| 48 | |
| 49 | {{{ |
| 50 | . |
| 51 | ├── app.c アプリケーションのデフォルトのソースファイル |
| 52 | ├── app.cfg アプリケーションのコンフィグレーションファイル |
| 53 | ├── app.h アプリケーションのデフォルトのヘッダファイル |
| 54 | ├── Makefile.inc 全ての実行形式で共有するメイクファイル |
| 55 | ├── Makefile.appmod 動的ローディング形式用のメイクファイル |
| 56 | ├── Makefile.app スタンドアローン形式用のメイクファイル |
| 57 | ├── … 他のフォルダ(無い場合もある) |
| 58 | │ └── … |
| 59 | └── … 他のファイル(無い場合もある) |
| 60 | }}} |
| 61 | 単一ソースファイルしかない小規模のアプリケーションに対して、「app.c/.h」の内容を修正するだけで十分です。但し、比較的に大規模のアプリケーションの場合、複数のソースファイルで開発することが多いです。その時、ソースファイルやヘッダファイルを追加することだけではなく、「Makefile.inc」と「app.cfg」を修正する必要もあります。 |
| 62 | |
| 63 | == 2.2. ソースファイルの追加 == |
| 64 | アプリケーションのソースファイルは以下の手順で追加することができます。 |
| 65 | |
| 66 | ① 追加したいソースファイル(例:newsrc.c)をアプリケーションのフォルダに入れます |
| 67 | |
| 68 | ② 「Makefile.inc」の「APPL_COBJS」にソースファイルのオブジェクトファイル名を追加します |
| 69 | |
| 70 | {{{ |
| 71 | 例: |
| 72 | Before: |
| 73 | APPL_COBJS += app1.o |
| 74 | |
| 75 | After: |
| 76 | APPL_COBJS += app1.o newsrc.o |
| 77 | }}} |
| 78 | ③ 「app.cfg」に「ATT_MOD」でソースファイルのオブジェクトファイルのメモリオブジェクトを登録します |
| 79 | |
| 80 | {{{ |
| 81 | 例: |
| 82 | Before: |
| 83 | ATT_MOD("app.o"); |
| 84 | |
| 85 | After: |
| 86 | ATT_MOD("app.o"); |
| 87 | ATT_MOD("newsrc.o"); |
| 88 | }}} |
| 89 | ④ これで、ソースファイルの追加が完了しました |
| 90 | |
| 91 | = 3. ワークスペース機能 = |
| 92 | == 3.1. ワークスペースとそのフォルダ構成 == |
| 93 | ワークスペースはプロジェクトの入れ物です。ワークスペース機能を利用して、複数のアプリケーションのプロジェクトを管理することができます。 |
| 94 | |
| 95 | ワークスペースのフォルダはプラットフォームのルートフォルダ(hrp2)の下にあります。本プラットフォームで提供するサンプルアプリケーションは全てデフォルトのワークスペース(hrp2/workspace)に入っています。 |
| 96 | |
| 97 | ワークスペース機能を実現するためのファイルと複数のアプリケーションのフォルダから構成されます。その例として、デフォルトのワークスペースのフォルダ構成は以下のようです。 |
| 98 | |
| 99 | {{{ |
| 100 | . |
| 101 | ├── common 共有ファイルのフォルダ |
| 102 | │ └── … |
| 103 | ├── gyroboy アプリケーションgyroboy |
| 104 | │ └── … |
| 105 | ├── helloev3 アプリケーションhelloev3 |
| 106 | │ └── … |
| 107 | ├── linetrace アプリケーションlinetrace |
| 108 | │ └── … |
| 109 | └── Makefile ワークスペース用Makefile |
| 110 | }}} |
| 111 | == 3.2. アプリケーションのビルド == |
| 112 | ワークスペース機能を利用して、アプリケーションをビルドすることが簡単にできます。 |
| 113 | |
| 114 | ワークスペースのフォルダに移動して、以下のコマンドでアプリケーションのスタンドアローン形式のブートイメージ(uImage)をビルドできます。ビルドが正常終了したら、ワークスペースのフォルダの下に「uImage」というファイルが生成されます。 |
| 115 | |
| 116 | {{{ |
| 117 | $ make app=アプリケーションのフォルダ名 |
| 118 | }}} |
| 119 | ワークスペースのフォルダに移動して、以下のコマンドでアプリケーションの動作ローディング用のバイナリファイル(Loadable Moduleと呼ぶ)をビルドできます。ビルドが正常終了したら、ワークスペースのフォルダの下に「app」というファイルが生成されます。 |
| 120 | |
| 121 | {{{ |
| 122 | $ make mod=アプリケーションのフォルダ名 |
| 123 | }}} |
| 124 | == 3.3. アプリケーションの新規作成 == |
| 125 | 既にワークスペースにあるアプリケーションをテンプレートとして、以下の手順で新しいアプリケーションを作成できます。 |
| 126 | |
| 127 | ① ワークスペースのフォルダに移動します |
| 128 | |
| 129 | ② 「cp -r <テンプレートとしたアプリケーションのフォルダ名> <新しいアプリケーションのフォルダ名>」で新しいアプリケーションを作成できます(gyroboyをテンプレートとした例) |
| 130 | |
| 131 | {{{ |
| 132 | $ cp –r gyroboy newapp1 |
| 133 | }}} |
| 134 | ③ 以上で「newapp1」というアプリケーションを新規作成しました |
| 135 | |
| 136 | == 3.4. ワークスペースの新規作成 == |
| 137 | 既に存在するワークスペースをテンプレートとして、以下の手順で新しいワークスペースを作成できます。 |
| 138 | |
| 139 | ① プラットフォームのルートフォルダ(hrp2)に移動します |
| 140 | |
| 141 | ② 「cp -r <テンプレートとしたワークスペースのフォルダ名> <新しいワークスペースのフォルダ名>」で新しいワークスペースを作成できます(デフォルトのワークスペースをテンプレートとした例) |
| 142 | |
| 143 | {{{ |
| 144 | $ cp –r workspace newworkspace1 |
| 145 | }}} |
| 146 | ③ 以上で「newworkspace1」というワークスペースを新規作成しました |
| 147 | |
| 148 | 注意:ワークスペースのフォルダは必ずプラットフォームのルートフォルダ(hrp2)に入れること |
| 149 | |
| 150 | = 4. プラットフォームのカスタマイズ = |
| 151 | = ![TODO:] = |