ETロボコン入門 ~空のアプリケーション~
筆者の開発環境
- 使用PC:Macbook pro OS X Yosemite 10.10.2
- 使用OS:EV3RT Bata6-2 (TOPPERS)
はじめに
こんにちは。最近アールグレイティーがお気に入りの筆者じょーじです。
さて、ETロボコンを初めて思うことは、どうやって開発を始めればよいのかという事ではないでしょうか。環境構築でお世話になったTOPPERSのサイトを覗いてみても
3.3. アプリケーションの新規作成
既にワークスペースにあるアプリケーションをテンプレートとして、以下の手順で新しいアプリケーションを作成できます。
① ワークスペースのフォルダに移動します
② 「cp -r <テンプレートとしたアプリケーションのフォルダ名> <新しいアプリケーションのフォルダ名>」で新しいアプリケーションを作成できます(gyroboyをテンプレートとした例
$ cp –r gyroboy newapp1
としか書いていません。ようは既存の物をコピーして使えってことなのでしょうが、
workspace
内のどのアプリケーションを見ても、何も処理がないシンプルなアプリケーションがない。C++で開発したいけど、どれもapp.c
ってなってる。じゃあどうすればいいんだ!!って感じで僕は初めの頃はずっと悩んでいました。
そこで今回はメモ書きを兼ねて空のアプリケーションを用意してみようと思います。
ファイル構成
まずはじめに、空のアプリケーションのファイル構成を見てみましょう。
ファイル名 | 説明 |
---|---|
app.h | メインのヘッダファイル |
app.cpp | メインのソースファイル |
app.cfg | タスクやリンクするオブジェクトなどを記述するコンフィグファイル |
Makefile.inc | 読み込むライブラリやオブジェクトなどを記述するメイクファイル |
たったのこれだけです。上の例でもあげたgyroboy
と同じ構成です。ではソースコードも見てみましょう。ソースコードはGitHubにsimple-project.zip
という名前でアップロードしてあるので、そちらからダウンロードしてみてください。
app.h
#ifdef __cplusplus extern "C" { #endif #include "ev3api.h" #define MAIN_PRIORITY TMIN_APP_TPRI + 1 #ifndef STACK_SIZE #define STACK_SIZE 4096 #endif /* STACK_SIZE */ #ifndef TOPPERS_MACRO_ONLY extern void main_task(intptr_t exinf); #endif /* TOPPERS_MACRO_ONLY */ #ifdef __cplusplus } #endif
これは要となるヘッダファイルです。中にはタスクに使うプライオリティの値の宣言やスタックサイズなどが記述されています。main_task
関数はMAIN_TASK
というタスクが実行状態になった時に呼ばれる関数になっています。この辺りはまた別の機会が合ったら記事にしたいと思います。
app.cpp
#include "app.h" void main_task(intptr_t unused) { ext_tsk(); } // end::main_task[]
こちらはヘッダファイルで宣言した関数の処理を記述するファイルになっています。至って普通ですね。特別なことはしていません。ext_tsk
関数はタスクを終了させる関数です。つまり今のままでは何もしないまま終了することになります。実際に動かす時は処理をwhile
でループさせたり別タスクで動かしたりすることになります。
app.cfg
INCLUDE("app_common.cfg"); #include "app.h" DOMAIN(TDOM_APP) { CRE_TSK( MAIN_TASK, { TA_ACT, 0, main_task, MAIN_PRIORITY, STACK_SIZE, NULL } ); } ATT_MOD("app.o");
このファイルにはタスクやハンドラの宣言や、オブジェクトの追加などの処理を書きます。詳しいことはタスクに関する記事を書く時にしたいと思います。またクラスなどを追加するために、新しいファイルを作りリンクさせる時は、その時のオブジェクト名をATT_MOD
関数に記述します。同時に次に説明するMakefile.inc
にも記述しなければいけないので、忘れないよう注意してください。
Makefile.inc
APPL_COBJS += \ APPL_CXXOBJS += \ SRCLANG := c++ ifdef CONFIG_EV3RT_APPLICATION # Include libraries include $(EV3RT_SDK_LIB_DIR)/libcpp-ev3/Makefile # C++ Version API Extra #include $(EV3RT_SDK_LIB_DIR)/libcpp-ev3ext/Makefile endif # $./hoge APPL_DIR += # -I$./hoge INCLUDES +=
これはいわゆるメイクファイルです。ここにはリンクしたいオブジェクトやライブラリの場所、ソースファイルが格納されているディレクトリなどを記述します。C言語オブジェクトの場合はAPPL_COBJS
に、C++オブジェクトの場合はAPPL_CXXOBJS
に追記していきます。記述する時はスペースで区切って記述する方法と\
で改行する方法の2通りあります。
#Examples APPL_COBJS += hoge1.o hoge2.o APPL_CXXOBJS += hoge3.o \ hoge4.o \
おわりに
いかがだったでしょうか。自力で調べて四苦八苦する後輩を見て、少しは資料を残してあげたいなと思い、勢いだけで書いてきました。少しでも読んでいただいた方の力になれたら嬉しいなと思います。また、このような記事が増えたらいいな、なんて考えています。僕も全国大会に向けたシステムの調整が残っているので、そこで新たなノウハウを発見したら記事にしてみようと思います。
それでは良いETロボコンライフを。
リンク
TOPPERS EV3RT:EV3RTのホームページです。
Git Hub:今回のソースコードを公開しています。