ソースコードと日記帳

日々の出来事をちょこちょこと。

ETロボコン入門 ~空のアプリケーション~

筆者の開発環境

はじめに

こんにちは。最近アールグレイティーがお気に入りの筆者じょーじです。

 さて、ETロボコンを初めて思うことは、どうやって開発を始めればよいのかという事ではないでしょうか。環境構築でお世話になったTOPPERSのサイトを覗いてみても

3.3. アプリケーションの新規作成

既にワークスペースにあるアプリケーションをテンプレートとして、以下の手順で新しいアプリケーションを作成できます。

ワークスペースのフォルダに移動します

② 「cp -r <テンプレートとしたアプリケーションのフォルダ名> <新しいアプリケーションのフォルダ名>」で新しいアプリケーションを作成できます(gyroboyをテンプレートとした例
$ cp –r gyroboy newapp1

としか書いていません。ようは既存の物をコピーして使えってことなのでしょうが、
workspace内のどのアプリケーションを見ても、何も処理がないシンプルなアプリケーションがない。C++で開発したいけど、どれもapp.cってなってる。じゃあどうすればいいんだ!!って感じで僕は初めの頃はずっと悩んでいました。
 そこで今回はメモ書きを兼ねて空のアプリケーションを用意してみようと思います。

ファイル構成

 まずはじめに、空のアプリケーションのファイル構成を見てみましょう。

ファイル名 説明
app.h メインのヘッダファイル
app.cpp メインのソースファイル
app.cfg タスクやリンクするオブジェクトなどを記述するコンフィグファイル
Makefile.inc 読み込むライブラリやオブジェクトなどを記述するメイクファイル

たったのこれだけです。上の例でもあげたgyroboyと同じ構成です。ではソースコードも見てみましょう。ソースコードGitHubsimple-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:今回のソースコードを公開しています。