wiki:FAQ

Version 12 (modified by ertl-yutaka, 9 years ago) ( diff )

--

FAQ

TOC(depth=1, WhatsEV3RT, Download, DevEnv, SampleProgram, UserManual, EV3RTsAPI, FAQ, Contacts)

ダイナミックローディング/アプリケーションローダ(apploader)に関する質問

Q:ダイナミックローディングによりアプリケーションを実行しようとしています。app loader で「Load app from SD card」を選択すると、「Open application folder '/ev3rt/apps' failed.」というエラーが出ます。何が原因でしょうか?

A:いくつか原因が考えられます。以下を確認してください。

  • SDカードがFATで初期化されているか?
  • SDカード内に /ev3rt/apps/ ディレクトリが存在しているか?
  • SDHC対応4GB以上のSDカードを使用しているか?

Q:ダイナミックローディングでアプリケーションを実行するために、 workspace ディレクトリの下に app ファイルを作成しました。複数のアプリケーションを実行する場合、ファイル名が同じになってしまうのですがどうすれば良いでしょうか? app ファイルの名称を変更しても良いでしょうか?

A:はい、変更して構いません。複数のアプリケーションを試す場合には、それぞれのapp ファイルの名称を変更し、SDカードの /ev3rt/apps/ の下に保存してください。apploader で、アプリケーションのファイル名を選択すれば、再起動することなしに、アプリケーションを切り替えることができます。

アプリケーションの開発方法に関する質問

Q:周期的な処理を追加するためには、どうすれば良いでしょうか?

A:(1) app.cfg ファイルに、EV3_CRE_CYCを使って周期ハンドラを作成します。以下の例に従って、cfgファイルに追記してください。

DOMAIN(TDOM_APP) {
    ...
    EV3_CRE_CYC(TEST_EV3_CYC1, { TA_STA, 0, test_ev3_cychdr, 500, 0 });  ← この行を追加
    ...
}
ATT_MOD(app.o)

EV3_CRE_CYCの各パラメータの意味は、以下の通りです。

  • TEST_EV3_CYC1:周期ハンドラの名称(実際にはID番号だが、コンフィギュレータによって、ここで指定した名称のマクロが自動的に定義されます)
  • TA_STA:周期ハンドラの属性。
    • TA_STAを指定すると、アプリケーションの起動時に周期処理も開始します。
    • TA_NULLを指定すると、アプリケーションでEV3_sta_cyc(TEST_EV3_CYC1)を呼び出すまで動作しない。
  • 0:周期ハンドラに渡される値(拡張情報)
  • test_ev3_cychdr:周期ハンドラ(周期的に実行される関数)の名前。Cファイルに同名の関数を定義してください((2)を参照のこと)。
  • 500:起動周期(EV3RTの場合、単位はマイクロ秒で指定)
  • 0:起動位相。周期ハンドラの動作開始を指定してから、最初に周期ハンドラが呼ばれるまでの相対時間。
    • 属性にTA_STAを指定して、起動位相に0を指定するとシステムが起動して最初のタイムティックが発生した時に動作する。

詳細は、TOPPERS次世代カーネル統合仕様書のCRE_CYCの説明を参照してください。

(2) アプリケーションのCファイルに周期ハンドラの関数を追加します。例えば、app.h と app.c に以下を追加します。

  • app.h
extern void test_ev3_cychdr(intptr_t exinf);
  • app.c
static int count;

void test_ev3_cychdr(intptr_t idx) {
    char buf[100];
    sprintf(buf, "EV3CYC %d count %d", idx, ++count);
    ev3_lcd_draw_string(buf, 0, 0); // EV3のLCDに文字列 buf を表示
}

Bluetooth 接続に関する質問

Q:Bluetooth のデバイス名(PCで検索したときに表示される名称)を変更する方法はありますか?

A:hrp2/target/ev3_gcc/ev3.hのBLUETOOTH_LOCAL_NAME というマクロを修正して,もう一度ビルドしてください.例えば,

#define BLUETOOTH_LOCAL_NAME   ("Mindstorms EV3") //!< Name for service discovery
↓
#define BLUETOOTH_LOCAL_NAME   ("TEST EV3") //!< Name for service discovery

と修正すると,Bluetoothデバイスを検索した時に,TEST EV3 という名称で表示されるようになります.

Note: See TracWiki for help on using the wiki.