セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-12-02 現在

TWELITE STAGE SDK / act

TWELITE のファームウェアを開発する
TWELITE STAGE SDK を使うことで、独自のファームウェアを TWELITE 向けに開発できます。

MWX ライブラリと act

MWX ライブラリは、TWELITE 無線モジュールのコード表記を簡素化することを目的としています。MWXで作成されたプログラムをアクト act と呼びます。アクトにはループによる記述と、イベントによる記述(ビヘイビア behavior と呼びます)の二種類があります。

ループによる記述 (setup(), loop())

小規模な機能を記述する場合に適しています。

#include <TWELITE>
const uint8_t PIN_LED = 5;

void setup() {
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  if (TickTimer.available()) {
    uint32 t_now = millis();

    // blink LED every 1024ms
    digitalWrite(PIN_LED, (t_now >> 10) & 1 ? HIGH : LOW);
  }
}

イベントドリブンのアプリケーション記述

各種イベント・割り込みハンドラの定義、アプリケーションの複雑な振る舞いを記述するのに適したステートマシンをクラス内に定義して、見通しの良いコードを記述できます。この記述方法をビヘイビアと呼びます。

// myApp.hpp
...
class myApp : MWX_APPDEFS_CRTP(myApp) {
...
  void loop() {
    // main loop
  }

  void receive(mwx::packet_rx& rx) {
    // on receive
  }
};

// myApp.cpp
...
MWX_DIO_EVENT(12, uint32_t arg) {
		// on event from DIO12
}

ペリフェラルの手続きを簡素化

よく使われる UART, I2C, SPI, ADC, DIO, タイマー, パルスカウンタを取り扱うクラスオブジェクトを定義しています。

void loop() {
  while(Serial.available() {
    auto x = Serial.read(); ... } // serial message
  if (Analogue.available() {
    auto x = Analogue.read(...); } // adc values
  if (Buttons.available() {
    Buttons.read(...); } // DIO changes
  if (the_twelite.receiver.available()) {
    auto&& rx = the_twelite.receiver.read(); } // on rx packet
}

シンプルな中継ネットワークを定義

この中継ネットワークは TWELITE 標準アプリケーションと同等の実装で、個体アドレスの管理は 8bit の論理IDで行うこと、ネットワーク構築のための通信を行わないため電源投入後すぐにネットワーク宛に無線パケットを送ることができる点が特徴です。

#include <TWELITE>
#include <NWK_SIMPLE>

void setup() {
  ...
  auto&& nwksmpl = the_twelite.network.use<NWK_SIMPLE>();
	nwksmpl << NWK_SIMPLE::logical_id(0xFE)
	           // set Logical ID. (0xFE means a child device with no ID)
	        << NWK_SIMPLE::repeat_max(3);
	           // can repeat a packet up to three times.
}

void loop() {
  ...
  vTransmit();
  ...
}

void vTransmit() {
  if (auto&& pkt =
    the_twelite.network.use<NWK_SIMPLE>().prepare_tx_packet();
  pkt << tx_addr(0x00)  // to parent
	  	<< tx_retry(0x3); // set retry

	pack_bytes(pkt.get_payload() // prepare payload data
	    , uint8_t(0x01)
	    , uint16_t(analogRead(PIN_ANALOGUE::A1))
	    , uint16_t(analogRead_mv(PIN_ANALOGUE::VCC)));

	pkt.transmit(); // transmit!
}

PAL や MONOSTICK 向けのボード定義

ボード上のセンサーなどを容易に取り扱えます。

#include <TWELITE>
#include <PAL_AMB> // include the board support of PAL_AMB

void setup() {
	auto&& brd = the_twelite.board.use<PAL_AMB>(); // use PAL AMB
	uint8_t u8dip = brd.get_DIP_SW();   // check DIP s/w status
	brd.set_led(LED_TIMER::BLINK, 100); // LED switchs on/off every 100ms
	...

	// start capture of sensors
	brd.sns_SHTC3.begin();
}

void loop() {
	if (TickTime.available()) { // check every ms
		auto&& brd = the_twelite.board.use<PAL_AMB>();

		if (brd.sns_LTR308ALS.available()) {
		  Serial << brd.sns_SHTC3..get_temp();
		} else {
		  // notify sensor that 1ms passed.
			brd.sns_SHTC3.process_ev(E_EVENT_TICK_TIMER);
		}
	}
}

1 - 開発環境

開発環境(OSなど)について

MWXライブラリを用いてアプリケーションを記述するには以下が必要です。

  • MWSDK(ソフトウェア開発環境)
  • 開発用エディタ(Microsoft社のVisual Studio Codeを紹介します)

Windows

コンパイラのツールチェインなどは比較的環境への依存度が低いため、多くの環境で動作することが期待できますが、現在サポートされている Windows10および11バージョンを推奨します。動作環境の差異により動作しないような場合は、当社で確認している環境を参考に別途環境を用意してください。

以下、開発で使用しているバージョンを挙げます。

  • Windows11 21H2 (Visual Studio 2019)
  • FTDI社のドライバが動作していること (MONOSTICK, TWELITE Rを動作させるため)

Linux

コンパイラのツールチェインなどは比較的環境への依存度が低いため、多くの環境で動作することが期待できますが、現在サポートされているディストリビューションを推奨します。動作環境の差異により動作しないような場合は、当社で確認している環境を参考に別途環境を用意してください。

以下、開発で使用しているバージョンを挙げます。

  • Ubuntu 18.04 LTS 64bit
  • Ubuntu 20.04 LTS 64bit

macOS

コンパイラのツールチェインなどは比較的環境への依存度が低いため、多くの環境で動作することが期待できますが、現在サポート中のmacOSバージョンを推奨します。動作環境の差異により動作しないような場合は、当社で確認している環境を参考に別途環境を用意してください。

以下、開発で使用しているバージョンを挙げます。

  • macOS 10.14 Mojave (Intel)
  • macOS 12 Monterey (Apple Silicon)

Visual Studio Code などの開発ツールについて

開発環境を動作させるためのツールや使用方法については、その開発元やコミュニティの情報を参照ください。

ビルド環境による差異

2 - SDKのインストール

TWELITE SDK のインストール

TWELITE STAGE SDK の導入

TWELITE STAGE SDK 配布アーカイブ(ZIPなど)をダウンロードし、適切なフォルダに展開します。

以下のように展開したら完了です。

フォルダ例

フォルダ例

環境変数の設定

MWSDK_ROOT, MWSDK_ROOT_WINNAME (Windowsのみ)を設定します。

Windows

ここでは展開後のフォルダ名を C:\MWSTAGE とします。別のフォルダへインストールした場合は、読み替えてください。

C:\MWSTAGE\Tools\SET_ENV.CMD を実行してください。以下の環境変数を設定します。

  • MWSDK_ROOT
  • MWSDK_ROOT_WINNAME

例えば以下のような設定になります。

MWSDK_ROOT=C:/MWSTAGE/MWSDK/
MW_ROOT_WINNAME=C:\MWSTAGE\MWSDK\

Linux

開発環境やシェルに MWX_ROOT

方法はいくつかありますが、ホームフォルダの.profile(ファイルがなければ新しく作成してください)に以下の設定を追加します。この設定でVSCodeのビルドまで可能です。環境変数が反映されるように設定してください。

MWSDK_ROOT=/foo/bar/MWSTAGE/MWSDK/
export MWSDK_ROOT

エディタを使用せずに追加するには以下のようにコマンド入力します。$はプロンプトで環境によって表示が違います。/foo/bar/MWSTAGEの部分はインストールしたフォルダに応じて書き換えてください。


cd $HOME
echo MWSDK_ROOT=/foo/bar/MWSTAGE/MWSDK>>.profile
echo export MWSDK_ROOT>>.profile

macOS

開発環境やシェルに MWX_ROOT環境変数が反映されるように設定してください。

方法はいくつかありますが、ホームフォルダの.profile(ファイルがなければ新しく作成してください)に以下の設定を追加します。この設定でVSCodeのビルドまで可能です。

MWSDK_ROOT=/foo/bar/MWSTAGE/MWSDK/
export MWSDK_ROOT

エディタを使用せずに追加するには以下のようにコマンド入力します。$はプロンプトで環境によって表示が違います。/foo/bar/MWSTAGEの部分はインストールしたフォルダに応じて書き換えてください

3 - アクトのビルド

アクト(act)のビルド

MWXライブラリで記述したアプリケーションプログラムをアクト(act)と呼びます。まずは、これをビルドして書き込みます。

  • ビルドフォルダ構成について
  • Visual Studio Code (VSCodeと記載) でのビルドについて

ビルドフォルダ構成について

MWSDKをインストールしたフォルダMWSDK_ROOT (例 C:\MWSDK)を開きます。以下のような構成になっています。

MWSDK_ROOT
  |
  +-ChipLib      : 半導体ライブラリ
  +-License      : ソフトウェア使用許諾契約書
  +-MkFiles      : makefile
  +-Tools        : コンパイラ等のツール一式
  +-TWENET       : TWENET/MWXライブラリ
  +-Act_samples  : アクトサンプル
  ...

アクトファイルはAct_samples以下に格納しています。(以下は一部割愛しています)

Act_samples
  |
  +-CoreAppTwelite    : App_TweLiteと同じ構成のボード用のアクト
  +-PAL_AMB           : 環境センス PAL 用のアクト
  +-PAL_MAG           : 開閉センス PAL 用のアクト
  +-PAL_MOT           : 動作センス PAL 用のアクト
  ..
  +-Parent-MONOSTICK  : 親機アクト、MONOSTICK用
  +-PingPong          : PingPong アクト
  +-PulseCounter      : パルスカウンタを利用したアクト
  +-act0              : スクラッチ(とりあえず書いてみる)用アクト

これらのアクトは、MWXライブラリの記述の参考となるシンプルな例ですが、多くのアクトは以下の機能を有しています。

  • センサー値を取得する
  • センサー値取得後、無線パケットを親機宛に送信する
  • 送信完了後、一定時間スリープする(または割り込みを待つ)

Parent-MONOSTICKのアクトによりパケットの受信と表示を行っています。この親機用のアクトは、アスキー形式で出力しています。 (:00112233AABBCC...FF[CR][LF] のような : で始まり、途中は16進数のバイトをアスキー文字2字で表現する形式です。末尾の??は同様に2字のバイトとなりますがLRCというチェックサムバイトになります。参考:アスキー形式)

実際に動作させてみるときは、以下の組み合わせを試してみてください。

解説
BRD_APPTWELITEBRD_APPTWELITE親機はM1ピンをLOW(GNDレベル)にして起動する。通常モード(常時稼働)にて、App_Tweliteのような動作を確認できます。
PingPongPingPong子機2台を使って動作します。片方から Ping パケットを送ると、相手方から Pong パケットが戻ってきます。
Parent-MONOSTICKその他子機用のアクトのパケット送信を確認できます。

では、アクトの中から PingPong のフォルダの中を見てみましょう。

Act_samples
  +-PingPong
    +-PingPong.cpp   : アクトファイル
    +-build          : ビルドフォルダ
    +-.vscode        : VSCode 用の設定ファイル

必ずフォルダ直下にフォルダと同名の .cpp ファイルが必要です。

次にビルドフォルダを開きます。

Act_samples
  +-PingPong
    +-build
      +-Makefile        : makefile
      +-build-BLUE.cmd  : TWELITE BLUE 用ビルドスクリプト(Windows用)
      +-build-RED.cmd   : TWELITE RED 用ビルドスクリプト(Windows用)
      +-build-clean.cmd : obj_* ファイル削除

ビルドに必要なスクリプトとMakefileが格納されています。

このMakefile のあるフォルダで make TWELITE={BLUEまたはRED} を実行することで、ビルドが行われます。VSCode でのビルドも同様で内部的に make を呼び出します。

TWELITE STAGE アプリでのビルド

TWETLITE STAGE アプリを用いて、ビルドから書き込み、実行までを行えます。ここでは、TWELITE STAGE アプリの起動からビルドまでを解説します。

0. TWELITE の接続

MONOSTICKまたはTWELITE Rをお使いのUSBポートに接続します。

1. TWELITE STAGE アプリの起動

{TWELITE SDK インストール} フォルダにある実行形式 TWELITE_Stage.{拡張子} を起動します(参考: TWELITE STAGE アプリマニュアル)。

以下は、TWELITE STAGE アプリ動作中の画面例です。左側の主画面とコマンドプロンプト画面がありますが、主画面を操作します。コマンドプロンプト画面は通常使用しませんが、諸情報及びTWELITEマイコンシリアルポートからの入力データが表示されます。

画面例

画面例

主画面での主な操作は以下です。

  • マウス左クリック (選択)
  • マウス右ダブルクリック(前の画面に戻る)
  • 素早く ESC を2回, 一部画面では ESC 1回 (前の画面に戻る)
  • Alt(⌘) キーを押し続ける(ヘルプ画面)
  • 通常キーボード入力(画面に従う)

(参考: TWELITE STAGE アプリマニュアル)

2. シリアルポートの選択

TWELITE STAGE アプリを起動すると最初に表示される画面です。事前に TWELITE R や MONOSTICK を接続しておけば、この画面に列挙されます。この画面で操作したい TWELITE を選択します。この画面で選択せずに、別の操作で選択することも可能です。

シリアルポート選択画面

シリアルポート選択画面

(参考: TWELITE STAGE アプリマニュアル)

3. メインメニュー

シリアルポート選択画面を抜けると、メインメニューが表示されます。ビルドや書込は「アプリ書換」メニューを選択します。

メインメニュー

メインメニュー

(参考: TWELITE STAGE アプリマニュアル)

4. アプリ書換メニュー

アプリ書換メニューを選択する前に、TWELITE の接続とシリアルポートの選択を確認しておいてください。シリアルポートの選択状況は Alt(⌘) キーを押し続けると出現するヘルプ画面上で確認できます。

アプリ書換メニュー

アプリ書換メニュー

TWELITE STAGE アプリから参照できるプロジェクトはいくつかに分類されています。右側のヘルプは関連情報をブラウザで表示します。フォルダはプロジェクトのあるフォルダを表示します。

TWELITE が接続済みであれば、メニューを選択したときに、TWELITE のモデルが判定されます。(TWELITE STAGE アプリ内部では、この判定したTWELITEモデルに応じたビルドを行うようになっています)。

(参考: TWELITE STAGE アプリマニュアル)

4. プロジェクトの選択

ここでは「アプリ書換メニュー」から「actビルド&書換」を選択します。

アプリ書換メニュー

アプリ書換メニュー

5. ビルド&書換

ここでは、先ほどのプロジェクト選択画面中で BRD_APPTWELITE を選択します。

選択すると、以下の画面例のように書き込みが行われます。エラーが表示された場合は、画面の指示に従うか、前の画面戻ってやり直してください。

書き込み中(ベリファイあり設定)

書き込み中(ベリファイあり設定)

書き込み完了

書き込み完了

(参考: TWELITE STAGE アプリマニュアル)

6. インタラクティブモードに移動

書換が正常に終了すると、続けてインタラクティブモード(設定画面)に移行します。ただし、インタラクティブモードに対応するファームウェアでないと画面は表示されません。

インタラクティブモードでは、TWELITE の無線チャネルなど、各種設定を行えます。

インタラクティブモード

インタラクティブモード

(参考: TWELITE STAGE アプリマニュアル)

7. ターミナル画面

ルートメニューに戻って「ビューア」→「ターミナル」を選択します。

ごく簡易的なシリアルターミナルです。TWELITE からのメッセージの確認と、TWELITE に対するメッセージの入力を行えます。

ターミナル画面

ターミナル画面

画面では、約1秒おきに無線送信したときのメッセージが表示されます。+ + + 入力によるインタラクティブモード画面への遷移も行えます。

(参考: TWELITE STAGE アプリマニュアル)

VSCode でのビルドについて

VSCode はソース編集の強力なエディタですが、VSCode上で TWELITE マイコン用のファームウェアをビルドすることも可能です。

VSCode の起動は TWELITE STAGE アプリの「ビルド&書換」メニュー以下のプロジェクト一覧より行います。

ビルドのリスト中の右端 [VSCode] を押してください。

VSCodeの設定

VSCodeの設定

この動作を行うためには TWELITE STAGE アプリの設定が必要です。

STAGE設定で 「code でフォルダを開く(VSCode)」を 1 にしてください。

VSCodeで開く

VSCodeで開く

VSCode のビルドタスク

最初にビルドしたいワークスペースを開いておきます。TWELITE STAGE SDK添付のワークスペースにはビルドタスクの定義が追加されています。

以下の例では英語インタフェースの画面例で、ワークスペースを開いています。

ワークスペースを開き [Terminal>Run Task...] を選択します。

タスクの実行メニュー

タスクの実行メニュー

ビルドするTWELITE無線モジュールの種別(BLUE/RED)とアクト名を選択します。以下の例では Build for TWELITE BLUE を選択しています。選択後すぐにビルドが始まります。

ビルドタスクの選択

ビルドタスクの選択

ビルド中の経過は画面下部のターミナル部分に出力されます。

ビルド経過

ビルド経過

コマンドラインでのビルド

コマンドライン環境でのビルドについて補足します。

Linux, macOS 環境

コマンドラインでのビルドは、bashやzsh(または他のシェル)が動作するウインドウでmakeを実行します。事前に環境変数MWSDK_ROOTが正しく設定されていることを確認してください。例えば/work/MWSDKにインストールした場合は ~/.profile (など)に以下のような設定を行います。

MWSDK_ROOT=/work/MWSDK
export MWSDK_ROOT

コマンドラインよりmakeを実行します。makeがない場合はパッケージをインストールする必要があります。

Windows 環境

Windowsでは {MWSTAGE SDK インストール}/MWSDK/WIN_BASH.cmd を実行します。 環境変数や make ユーティリティが設定済みです。

ビルド

ビルドは以下のようになります。


cd $MWSDK_ROOT
cd Act_samples/PingPong/build
pwd
/mnt/c/MWSDK/Act_samples/PingPong/build

ls
... ファイル一覧の表示

rm -rfv objs_*
... 念のため中間ファイルを削除

make TWELITE=BLUE
... BLUE用に通常ビルド

make -j8 TWELITE=BLUE
... BLUE用にパラレルビルド(同時に8プロセス)

コマンド例

詳細はMakefileの解説をご覧ください。

  • make TWELITE=BLUE:TWELITE BLUE用にビルド
  • make TWELITE=RED:TWELITE RED用にビルド
  • make cleanall:中間ファイルの削除

中間ファイルについて

ビルドが行われると objs_??? フォルダが作成され、その中に中間ファイルが生成されます。このファイルはコンパイルした環境に依存しているため、他の環境のファイルが残っているとmakeがエラーとなりビルドが失敗します。

4 - 新しいプロジェクトの作成

新しいプロジェクトの作成

新しいプロジェクトを作成するには、既存のサンプルアクトのフォルダを別の名前でコピーし、ファイル名の編集を行います。

プロジェクトのファイル構造は以下のようになっています(ここでは PingPong を例に挙げます)。

Act_samples
  +-PingPong
    +-PingPong.cpp   : アクトファイル
    +-build          : ビルドフォルダ
    +-.vscode        : VSCode 用の設定ファイル

この PingPong フォルダを別の場所(ただしフォルダ名に日本語や空白が含まない)にコピーします。

SomeDir
  +-AlphaBravo
    +-PingPong.cpp -> AlphaBravo.cpp ※ファイル名を変更
    +-build          : ビルドフォルダ
    +-.vscode        : VSCode 用の設定ファイル

編集の必要があるのは、PingPong.cpp のファイル名です。これをフォルダ名と同じAlphaBravo.cppに変更します。

ビルド定義の編集

ビルド対象のファイルを追加する場合は build/Makefile を編集します。プロジェクト直下にある .c .cpp ファイルは自動で追加されますが、それ以外のファイルについては編集が必要です。

編集方法は Makefile の解説をご覧ください。

VSCode用の設定

VSCode を利用する場合は、必要に応じて .vscode 以下の定義を編集してください。

TWELITE STAGE SDK に含まれるサンプルの多くは、以下のようになっています。

  • TWELITE STAGE SDK ライブラリのソースコードは ${env:MWSDK_TWENET_LIBSRC}/include/** ${env:MWSDK_TWENET_LIBSRC}/src/** を引用する。この環境変数 MWSDK_TWENET_LIBSRC は TWELITE STAGE アプリから VSCode でプロジェクトを開いた場合には自動で設定されます。
  • ビルドタスクについては、デフォルトで -D などの追加的なオプション等は設定されていない。

5 - actのためのVSCodeのインストール

act 開発のために Visual Studio Code をインストールする

act のソースコードの記述を容易に行うために、Visual Studio Code (VSCode) でコード解釈を行うための設定ファイルを同梱しています。

ソースコードの解析や VSCode からのビルドを行うために、ライブラリソースコードが格納されるフォルダの情報などの情報が必要になります。これらの情報は TWELITE STAGE アプリから VSCode を呼び出すことによって反映されます。(具体的には適切な環境変数を設定して VSCode を始動します。プロジェクトの設定は環境変数を参照しています)

VSCode のインストール

VSCode の機能

  • ソースコードの編集
  • ソースコード解釈に基づく intellisense
    (*全ての定義が正確に解釈されることを保証するわけではありません)

VSCode は公式サイトより入手してください。

プラグインの導入

Visual Studio Code が C/C++ 言語の記述を解釈できるようにするために、プラグインをインストールします。

  • C/C++ for Visual Studio Code

各OSでの特記事項

TWELITE STAGE から VSCode を呼び出すために、code コマンドを有効とする必要があります。

以下は code.visualstudio.com の情報です。

注記事項

6 - ビルド定義 Makefile

Makefileによるビルド定義

Makefileはbuild/Makefileに格納されています。makeコマンドを実行することで、アクトをビルドするようにあらかじめ定義されています。

makeのパラメータ

TWELITE=

ビルド対象をBLUEまたはREDで指定します。TWELITE BLUEならmake TWELITE=BLUEと指定します。

all

ビルドを実行します。通常は省略してmake TWELITE=BLUEのように実行します。

clean

ビルドの中間ファイルを削除します。make TWELITE=BLUE cleanのように実行します。

cleanall

すべての中間ファイルを削除します。make cleanallのように実行します。buildフォルダのobjs_???フォルダをすべて削除するのと同じです。

USE_APPDEPS=0 または 1

1 (デフォルト) を設定すると、ファイルの依存関係をもとに、ビルドファイルを決定します。例えば、ヘッダファイルに変更があった場合に関連するソースファイルが再コンパイル対象となります。

0 では依存関係を評価しません。0 に設定した場合、矛盾ある中間ファイルが残っていても make がエラーになりません。

Makefile 定義

アクトの規模に応じて、また、ビヘイビアの定義をする場合には、通常はソースファイルを分割してビルドします。

ビルドファイルの一つはプロジェクトフォルダ名.cppです。

他にファイルを定義する場合は、プロジェクトフォルダのbuild/Makefileを編集します。

下記はサンプルPAL_AMB-bihaviorでのMakefileの例です。

##############################################################################
# Copyright (C) 2019 Mono Wireless Inc. All Rights Reserved.
# Released under MW-SLA-*J,*E (MONO WIRELESS SOFTWARE LICENSE
# AGREEMENT).
##############################################################################
# USER PROJECT BUILD DEFINITION.
##############################################################################

#####################################################################
## set TWELITE model
TWELITE ?= BLUE
#TWELITE = RED

#####################################################################
## set application version (MUST SET THIS.)
VERSION_MAIN = 0
VERSION_SUB  = 1
VERSION_VAR  = 0

#####################################################################
## set an additional source file
##   the default file name is dirname.

## for C++ files compiled with g++ (must have .cpp suffix)
APPSRC_CXX += myAppBhvParent.cpp
APPSRC_CXX += myAppBhvParent-handlers.cpp
APPSRC_CXX += myAppBhvChild.cpp
APPSRC_CXX += myAppBhvChild-handlers.cpp

## for C files compiled with gcc (must have .c suffix)
#APPSRC += my_c_file.c

## Additional Src/Include Path
# if set, find source files from given dirs.
#
APP_COMMON_SRC_DIR_ADD1 = ../Parent
APP_COMMON_SRC_DIR_ADD2 = ../Child
#APP_COMMON_SRC_DIR_ADD3 =
#APP_COMMON_SRC_DIR_ADD4 =

#####################################################################
## set misc option for compiler

## C++ flags passed to g++
# e.g. CXXFLAGS += -DMY_DEFS
#CXXFLAGS +=

## C++/C flags passed to g++/gcc
# e.g. CFLAGS += -DMY_DEFS
#CFLAGS +=

## include opts
# e.g. INCFLAGS += -I../my_common_src/
#INCFLAGS +=

## optimize flag (default is -Os, normally no need to change)
#OPTFLAG=-O2

#####################################################################
## must include mwx.mk (the makefile body part.)
MWSDK_PATH?=$(realpath $(MWSDK_ROOT))
include $(MWSDK_PATH)/MkFiles/mwx.mk
#####################################################################

VERSION_???

バージョン番号を指定します。ビルド結果ファイル名に反映されます。

## set application version (MUST SET THIS.)
VERSION_MAIN = 0
VERSION_SUB  = 1
VERSION_VAR  = 0

コンパイル中は -DVERSION_MAIN=0 -DVERSION_SUB=1 -DVERSION_VAR=0のように定義として渡されます。

ソースファイルの追加

ソースファイルを追加する際に必要なのはAPPSRC_CXXAPP_COMMON_SRC_DIR_ADD?です。

ソースファイル名をAPPSRC_CXXに追記します。このファイル名にはフォルダ名が含まれてはいけません。サブフォルダにあるものもフォルダなしで指定します(つまり同じファイル名がサブフォルダにある場合は、ビルドが失敗します)

APPSRC_CXX += myAppBhvParent.cpp
APPSRC_CXX += myAppBhvParent-handlers.cpp
APPSRC_CXX += myAppBhvChild.cpp
APPSRC_CXX += myAppBhvChild-handlers.cpp

次にソースファイルがプロジェクトフォルダ以外の場所に格納されている場合の検索パスを指定します。最大4つまで設定できます。

APP_COMMON_SRC_DIR_ADD1 = ../Parent
APP_COMMON_SRC_DIR_ADD2 = ../Child

フォルダの指定はMakefileからの相対パスになります。

コンパイル・リンカオプション

その他にもいくつかのオプションをコンパイラ・リンカに渡すことができます。

指定内容
CXXFLAGSC++ソースファイルに対してコンパイルオプションを指定します。
CFLAGSC/C++ソースファイルに対してコンパイルオプションを指定します。
INCFLAGSヘッダファイルのインクルードファイルを指定します。
OPTFLAGS特別な理由があって-Os以外のコンパイルオプションを適用したい場合に定義します。
LDFLAGSリンカオプションを指定します。(上記Makefileのコメントには記述はありませんが指定できます)

7 - 他のプラットフォーム

他のプラットフォームの使用

他のプラットフォームでも一部の機能(serparser, pktparser, コンソール用Serialオブジェクト)をビルドできるように、ビルド定義を用意しています。必要なファイルのみを切り出しています。

ビルド定義は{mwxライブラリ格納}/stdioフォルダに格納しています。ビルド方法はREADME.md(リンクはGitHub上)を参照してください。

  • C++11でのコンパイルが出来ること。
  • C++11の標準ライブラリヘッダが利用できること (utility, algorithm, functional, iteratorなど)
  • new/delete/virtualは使用しません。
  • newによるメモリ確保は例外的に使用する場合があります。
    • serparser/pktparsernew演算子を利用するalloc_heapではdeleteによる処理を行っています。
    • (参考) ただしmwxライブラリとしてはdeleteについては考慮しない前提で設計されている部分もあります。