/      English

プロジェクトの構成と設定

プロジェクトの構成と設定
プロジェクトの構成と設定について解説します。

プロジェクトの構成と設定

最初に TWELITE の標準アプリケーション App_Twelite を例にプロジェクト構成と重要な設定について解説します。MCUXpresso の [Project Explorer] より App_Twelite プロジェクトを選択してください。

App_Twelite/   : ソースコードの格納場所
Common/        : ソースコードの格納場所
build/         : ビルド関連のファイルをまとめて格納
  scripts/     : ビルドのポスト処理で .bin に署名データを埋め込むスクリプト
  linkscripts/ : リンカ定義
Release/       : Release ビルドを行うと中間ファイルや生成物が保存される
Debug/         : Debug ビルドを行うと中間ファイルや生成物が保存される

MCUXpresso での設定画面

メニューより [Project]>[Properties] (または Project Explorer でプロジェクトの最上位フォルダを右クリックメニューより [Properties])を選択すると以下のような設定画面が出ます。以降はその設定画面条の確認や操作について触れます。

C/C++ Settings

C/C++ Settings

ビルド対象のソースコード

ビルド対象のソースコードは、MCUXpresso での定義を行うことで追加・削除が可能です。新しく追加したディレクトリは通常はビルド対象になります。

※ ビルド対象から除外する場合は、対象ディレクトリを右クリックメニューより [Properties..]>[C/C++ Build] を選択し、[Configuration]を[All Configurations]として [Exclude resource from build] をチェックします。

ビルドコンフィギュレーション (Release/Debug)

ビルド定義については Release, Debug の2種類を定義しています。

  • Release : 最適化を実行した実行用のビルド定義
  • Debug : デバッグシンボル付きのビルド。PRINTFマクロによる出力にも対応

注:この定義名を用いて、ライブラリファイルの格納ディレクトリを指定しているため、ビルド定義を新しく作成した場合にはプロジェクト定義の調整が必要です。( [Properties..]>[C/C++ Build]>[Settings]>[MCU C++ Linker/Libraries] で "${workspace_loc:/TWENETxxx}/${ConfigName}"${ConfigName} の部分が Release や Debug に置き換わります)

Build Variables

[C/C++Build]>[Build Variables] にはコンパイルに必要な情報(バージョン番号)を定義しています。

定義内容
VERSION_MAIN必須 [0..255]バージョン番号(メイン)
VERSION_SUB必須 [0..255]バージョン番号(サブ)
VERSION_VAR必須 [0..255]バージョン番号(バリエーション)
DK6_PY通常は設定不要スクリプト実行のための python 実行コマンド (例: py.exe -3.7)
指定しなければ py.exe -3 または python3 が使用される。

MCU Settings…

MCU設定では JN5189 が選択されています。

このページにはRAM領域のメモリマップが表示されますが、MUCXpressoの設定はビルドには反映されません。詳しくはRAMの割当を参照下さい。

MCU Settings

MCU Settings

インクルードパス

ソースファイルのインクルードパスを設定しています。TWENETxxx (xxxはライブラリ名) ライブラリについても、この設定をしないとビルドが出来ません。

  • プロジェクト定義には冗長な設定が含まれます (mwx ライブラリを使用しないプロジェクトにパスが通っているなど)。
  • 設定は "${workspace_loc:/TWENETxxx}" のようにワークスペースを起点とした定義です。TWENETxxx というディレクトリがあってもプロジェクトとして登録されていないと、そのディレクトリは検索対象になりません。かならずライブラリもワークスペースのプロジェクトとして追加しておいて下さい。

インクルードパスは以下で設定します。構成(Release/Debug)ごとに設定が別になっているので注意して下さい。

  • [Properties..]>[C/C++ Build]>[Settings]>[MCU C++ Compiler]>[Includes] (C++ソースファイル)
  • [Properties..]>[C/C++ Build]>[Settings]>[MCU C Compiler]>[Includes] (C++ソースファイル)

多くのプロジェクトでは以下のディレクトリが追加されています。

${ProjName}/${ProjName}
${ProjName}/Common
TWENETcmpt/source
TWENETcore/source
TWENEText/source
TWENETmcu
TWENETmcu/CMSIS
TWENETmcu/board
TWENETmcu/component
TWENETmcu/component/lists
TWENETmcu/component/uart
TWENETmcu/component/serial_manager
TWENETmcu/device
TWENETmcu/drivers
TWENETmcu/framework
TWENETmcu/framework/Common
TWENETmcu/startup
TWENETmcu/uMac
TWENETmcu/utilities
TWENETmcu/printf
TWENETmwf/source
TWENETmwx/source
TWENETstgs/source
TWENETutils/source

先頭の2つは、${ProjName} はプロジェクトディレクトリ名で App_Twelite の場合は App_Twelite/App_TweliteApp_Twelite/Commonの2つを指定しています。プロジェクトで参照するライブラリやソースコードのディレクトリ配置に応じて編集します。

プリプロセッサ定義

プリプロセッサ定義は以下で設定します。構成(Release/Debug)ごとに設定が別になっているので注意して下さい。

  • [Properties..]>[C/C++ Build]>[Settings]>[MCU C++ Compiler]>[Preprocessors] (C++ソースファイル)
  • [Properties..]>[C/C++ Build]>[Settings]>[MCU C Compiler]>[Preprocessors] (C++ソースファイル)

一部の定義について解説します。

定義内容
VERSION_MAIN${VERSION_MAIN}[Build Variable]の設定値を引用
VERSION_SUB${VERSION_SUB}[Build Variable]の設定値を引用
VERSION_VAR${VERSION_VAR}[Build Variable]の設定値を引用
CPU_JN518XTWELITE GOLD(JN518x)のビルド時に設定。機種別コード記述に利用。
TOCONET_DEBUG0または1TWENET の内部向けデバッグ出力の制御 (1で有効になる)。この設定はアプリケーション、TWENETcore、TWENEText全てで同じ定義でビルドする。
T_ENUM_INTint16_tTWENET で用いる teEvent, teStateの定義型 (従来は enum でコンパイルオプションで 16bit 長としていたが、ARM上のビルド、C++の共存の2点を考慮し int16_t型とした)
SDK_DEBUGCONSOLE0..2printfについて参照
SERIAL_PORT_TYPE_SWO0または1printfについて参照
DEBUGまたはNDEBUGデバッグビルドまたはリリースビルドの指定

バージョンの指定

TWENETで記述されたビルド定義には Makefile 中に VERSION_MAIN VERSION_SUB VERSION_VAR を定義して、コード中で同名のプリプロセッサ定義 (例:-DVERSION_MAIN=1)としています。コード中にもこれらの定義がないとビルドが失敗します。

MCUXpressoでは Eclipse のビルドマクロ [Properties..]>[C/C++ Build]>[Build Variable] に定義して、コンパイラに定義を渡しています。

Debug での定義

多くのプロジェクトでは以下のように定義されています。

VERSION_MAIN=${VERSION_MAIN}
VERSION_SUB=${VERSION_SUB}
VERSION_VAR=${VERSION_VAR}
CPU_JN518X
JN5189=5189
JENNIC_CHIP_FAMILY_JN518x
JENNIC_CHIP=JN5189
JENNIC_CHIP_JN5189
JENNIC_CHIP_FAMILY_NAME=_JN518x
TOCONET_DEBUG=1
T_ENUM_INT=int16_t
__MCUXPRESSO
__USE_CMSIS
CPU_JN5189THN
CPU_JN5189THN_cm4
SDK_DEBUGCONSOLE=1
SERIAL_PORT_TYPE_SWO=0
DEBUG

Release での定義

多くのプロジェクトでは以下のように定義されています。

VERSION_MAIN=${VERSION_MAIN}
VERSION_SUB=${VERSION_SUB}
VERSION_VAR=${VERSION_VAR}
CPU_JN518X
JN5189=5189
JENNIC_CHIP_FAMILY_JN518x
JENNIC_CHIP=JN5189
JENNIC_CHIP_JN5189
JENNIC_CHIP_FAMILY_NAME=_JN518x
T_ENUM_INT=int16_t
__MCUXPRESSO
__USE_CMSIS
CPU_JN5189THN
CPU_JN5189THN_cm4
SDK_DEBUGCONSOLE=2
NDEBUG

リンカー

シンボルの繰り返し探索

ライブラリの依存関係が複雑になっているため、ld コマンドの --start-group --end-group を用いた繰り返し探索(依存シンボルの順序により未解決になる場合があるため、すべて解決するまで探索を繰り返す指定)を有効にしています。定義内容は [Properties..]>[C/C++ Build]>[MCU C++ Linker] の [Command line pattern:] を参照下さい。

リンクすべきライブラリ

リンク対象のライブラリは [Properties..]>[C/C++ Build]>[Settings]>[MCU C++ Linker] > [Libraries] に設定します。

注:ライブラリの検索パス(Library search path)は、${ConfigName}をビルド定義名(Release/Debug)として"${workspace_loc:/TWENETxxx}/${ConfigName}"のような記述になっています。ビルド定義を作成した場合は修正が必要になります。

  • TWENETライブラリの詳細:ライブラリ・アプリなど
  • マイコン用ライブラリ (TWENETmcu/libs に格納)
    • MiniMac : IEEE802.15.4 の処理を行う MAC 層 (少機能コンパクト版)
    • Radio : 無線物理層部分の処理
    • arm_cortexM4l_math : (必須でない) ARM 提供の算術ライブラリ

リンクスクリプト

実行形式(.bin)を生成するにあたり、メモリマップなどの定義を行うリンクスクリプトは TWENETmcu/linker/linkscripts/JN5189 に格納しています。

  • MCUXpresso がリンクスクリプトを自動生成する Managed linker script は使用しません。チェックを外し、以下の設定を行うようにしてください。

    • Linker Script ⇒ TWENET_Release.ldまたはTWENET_Debug.ld
    • Script Path ⇒ "${workspace_loc:/TWENETmcu}/linker/linkscripts/
  • ヒープやスタック領域の配置についても指定できます。メモリマップについてはRAMの割当を参照下さい(ユーザプロジェクトフォルダのbuild/App_User_Defs.ldに定義を記述します)。

その他のビルド設定

[Properties..]>[C/C++ Build] には [Builder Settings], [Behavior], [Refresh Policy] のタブがありますが、通常編集の必要はありません。

  • [Behavior] タブでは並列ビルドの並列数を設定できます。過剰なCPU数割当がある場合は減らしてみて下さい。

[Properties..]>[C/C++ Build]>[Settings]には[Build Steps], [Build Artifact], [Binary Parsers], [Error Parser] がありますが、通常編集の必要はありません。

  • [Build steps] では、リンカ実行後の .bin バイナリファイルの生成を行っています。

    MCUXpresso 標準の定義を書き換え、以下のように dk6_image.sh を呼び出すようにしています。標準に対して特別な処理は追加していませんが、過程で使用する Python スクリプトの指定や、エラー処理の強化などを目的としています。

    sh '${workspace_loc:/TWENETmcu}/linker/scripts/dk6_image.sh' "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}" DK6_PY="\"${DK6_PY}\"" DK6_OPTS="\"${ENV_IMAGE_TOOL_OPTS}\""