もくじ
- はじめに
- 1. Hello World Project の解説
- 2. Build Configurations について
- 3. Hello World Project のビルド方法
- 4. Hello World Project の Debug 実行方法
- まとめ
はじめに
この記事では Hello World Sample Projct の構成と Project Settings について、そして実際に Debug する方法を解説します。
SDK のインストール方法と Build 方法の確認がまだの方は以下のページを参考に Build を実行ください。
参考:[VS Code で NXP マイコン開発 2] Visual Studio Code でサンプルプロジェクトを作成する方法
参考: 最新の MCUXpresso for Visual Studio Code ドキュメントは以下のページをご参照ください。
MCUXpresso for VS Code documentation
1. Hello World Project の解説
Visual Studio Code の Sample Project は【図 1】に示すような構成になっています。各フォルダーに格納されているファイルを確認する際の参考にしてください。
【図 1】Hello World Sample Projct の構成
Project Files 直下に hello_world.c が格納されています。
Build を実行すると Build 結果を格納するフォルダーが作成されます。
Debug Build 設定(最適化が -O0 の設定)の場合、debug フォルダーが生成され、Release Build 設定(最適化が -Os の設定)の場合、release フォルダーが生成されます。設定の変更方法は次の章で解説します。
続いて、hello_world.c の中身について解説します。【図 2】に示すような構成になっています。
【図 2】hello_world.c の構成
#inclucde では、デバイス固有の設定値等を記載している "fsl_device_registers.h" や printf 結果を Debug Console に表示するために必要な "fsl_debug_console.h"、Board 設定等が記載されている "board.h" が定義されています。
main 関数内では変数の定義の後、Hardware 初期設定用の関数を記述してから、メインの記述を実装いただくことになります。
また、Hardware 初期設定用の関数内で呼び出している Board 依存関数の中身は MCUXpresso Config Tools を使用し GUI で設定等が変更可能で、設定いただいた内容に従って関数内のコードが自動生成されます。
print 文で Debug Console に文字を表示する場合 printf() ではなく PRINTF() を使用します。
改行コードは "\r\n" を使用します。
また、Debug Console として使用する Console は下記 2つ あり、変更方法は次の章で解説します。
Semihost Console
UART Console
2. Build Configurations について
ここでは Build Configurations で設定可能な項目について説明します。
Build Configurations は複数の Configuration を定義することが可能で、サンプルの Hello World Project では、"debug" と "release" の 2 つがデフォルトで用意されております。
Build Configurations を追加するには "Build Configurations" の "+" のアイコンを押下、既存の Build Configurations を変更するには 各 Configuration の "Edit" のアイコンを押下します。
【図 3】Configuration 定義の追加
【図 4】Configuration 定義の変更
【図 5】が Build Configuration 設定画面となります。本画面では "Build Type"、"Library Type"、"Debug Console"、"Floating point" の設定ができ、CMake の引数を "CMake Extra Args" で設定することもできます。
また、"Set as default" のチェック有無でビルド対象の Configuration を切り替えることができます。
※各種項目変更後は "save" ボタンを押下しないと、変更が反映されないため注意してください。
【図 5】Configuration 定義の設定
それぞれの設定項目について表にまとめています。
【表1】Build Type
| 設定値 | 概要 |
|---|---|
| Debug | デバッグ情報あり (-g)、最適化低め (-O0) |
| Release | デバッグ情報なし、サイズ最適化 (-Os) |
RelWithDebInfo |
デバッグ情報あり、最適化高め ※ Hellow World Project では未サポート |
| MinSizeRel | サイズ最適化 ※ Hellow World Project では未サポート |
【表2】Library Type
| 設定値 | 概要 |
|---|---|
| Newlib | C99 と C/C++ を完全にサポートした GNU Library。コードサイズが大きくなる。 |
| Newlib-nano | "GNU Tools for ARM Embedded Processors" に準拠して作られたコードサイズ縮小に焦点を当てられた GNU Library。コードサイズを削減したい場合に、おすすめ。 C++ 言語ではデフォルトで使用。 |
| Redlib | MCUXpresso IDE 独自の Library 。C90 に準拠した C Library になっており、C99 も一部使用可能となっている。C 言語ではデフォルトで使用。 |
【表3】Debug Console
| 設定値 | 概要 |
|---|---|
| UART | PC の ターミナルソフトウェア (Tera Term など) に表示 (Debug 用 USB ケーブルを接続) |
| Semihost | Visual Studio Code 内に付属の Console ウィンドウに表示 |
| None | Console 出力無し |
【表4】Floating point
| 設定値 | 概要 |
|---|---|
| Default (set internally by CMake) | CMake (SDK / Board) 設定に従った設定値 ※推奨設定 |
FPV5-D16 (SOFT ABI) |
Double 精度ソフトウェア浮動小数点設定
-mfloat-abi=soft, -mfpu=fpv5-d16 のオプション ※ MCXN947 では Double 精度は未サポート
|
FPV5-D16 (HARD ABI) |
Double 精度ハードウェア浮動小数点設定
-mfloat-abi=hard, -mfpu=fpv5-d16 のオプション ※ MCXN947 では Double 精度は未サポート
|
FPV5-SP-D16 (SOFT ABI) |
単精度ソフトウェア浮動小数点設定 -mfloat-abi=soft, -mfpu=fpv5-sp-d16 のオプション |
FPV5-SP-D16 (HARD ABI) |
単精度ハードウェア浮動小数点設定 -mfloat-abi=hard, -mfpu=fpv5-sp-d16 のオプション |
【表5】Set as default
| 設定値 | 概要 |
|---|---|
| チェックなし | ビルド対象外の Configuration |
| チェックあり | ビルド対象の Configuration |
参考:ビルド対象の Configuration 切り替えについて
Configuration の設定項目の "Set as default" を変更する以外にも【図 6】の赤枠のアイコンを押下することでビルド対象の Configuration に切り替えることができます。
【図 6】ビルド対象 Configuration への切り替え
3. Hello World Project の ビルド方法
Build Configuration をカスタマイズした後、Project をビルドします。
ビルド手順は 2 通りあり、【図 7】のように当該プロジェクトの Build Project アイコンを押すか、当該プロジェクトを右クリックし、"Build Project" を選択します。これにより Default として選択されている Build Configuration のビルドが開始されます。
ビルドが正常終了すると【図 1】にある Build 結果格納フォルダー内に実行ファイル (.elf, .bin) が生成されます。
なお、Project の Clean や再ビルドについては、右クリックの "Project Clean"、"Pristine Build/Rebuild Project" を選択します。
【図 7】Project のビルド手順
ビルドが正常に完了すると【図 8】のように TERMINAL 画面にメモリ使用量の表示とともに "build finished successfully." が表示されます。
【図 8】ビルド完了表示
4. Hello World Project の Debug 実行方法
デフォルトの設定で Debug を実行する方法はビルド手順と同様に 2 通りあり、【図 9】のように当該プロジェクトの Debug アイコンを押すか、当該プロジェクトを右クリックし、"Debug" を選択します。
詳しくは MCUXpresso for Visual Studio Code の wiki をご覧ください。
【図 9】デフォルト設定での Debug 手順
TERMINAL に表示されるログを確認すると、【図 10】の赤枠の通り、Internal Flash に実行ファイルを書き込んでいることを把握できます。
【図 10】Debugger 実行ログ
また、MCXN947 のデフォルト設定では、Internal Flash 上で XIP 実行する構成の為【図 11】のように main 関数先頭で Break すると Debug 画面でも Internal Flash のメモリー領域で Break していることがわかります。
【図 11】Debug 画面
まとめ
電源を入れなおすと、再度起動することを確認できるので Internal Flash に実行ファイルが書き込まれており、XIP で起動していることを把握できます。
デフォルトの Debug 設定では、毎回 Debug を実行するたびに Internal Flash の中身を書き換えてしまうため、RAM 実行の方法などが気になるかと思います。以降の記事にて、RAM 上にプログラムを配置して実行する方法について解説します。