| [NXP マイコン初心者ガイド 3] へ | |||
| NXP マイコン初心者ガイド まとめサイト |
もくじ
はじめに
この記事では、サンプル・プロジェクトのソースコードを編集してカスタマイズを行う手順を紹介します。前回までは、Hello World プロジェクトを題材にしてきましたが、ここでは別のサンプルプロジェクトをベースにプロジェクトのカスタマイズを行ってみます。
また、カスタマイズ後のプロジェクトを保存・再利用するための手順として、プロジェクトのエクスポート/インポートの手順も紹介します。
-
参考資料: 詳細な情報は MCUXpresso IDE User Guide を参照ください。
1. ベースとするサンプル・プロジェクトの準備
カスタマイズのベースとして demo_apps 以下にある shell サンプルを使用します。このサンプルは OS 非搭載の環境でありながら、シリアル・ターミナルからコマンド入力が行えるため、各種コマンドを追加実装して動作確認を行える点が便利です。
以下に、ベースとするサンプル・プロジェクトのインポートから実行までの手順を記載します。
1-1. サンプル・プロジェクトのインポート
【図1】に shell サンプルのインポート手順を示します。Hello World の時と同じ手順となります。
【図 1】ベースサンプルのインポート
1-2. サンプル・プロジェクトのデバッグ開始
【図2】に実行の手順を示します。インポートされたプロジェクトを選択して をクリックして開始します。プロジェクトのビルドはデバッグ開始時に自動的に行われます。
【図 2】ベースサンプルの実行
ヒント: デバッグ開始時のビルドの自動実行を止めたい場合は、Debug Configuration もしくは Workspace の設定(Preferences)にて変更可能です。【図3】を参照ください。
【図3】デバッグ開始時のビルド自動実行の無効化
1-3. サンプル・プロジェクトの実行開始
デバッグ開始すると main 関数の先頭でブレークします。続けて、シリアル・ターミナルの設定を行った上で Resume (F8) を実行してください。
【図4】シリアル・ターミナルの設定および実行再開
1-4. サンプル・プロジェクトのコマンド操作
shell サンプルが動作すると、シリアル・ターミナル上でコマンドによる操作が行えます。【図5】を参考に、プロンプト(SHELL >>)に続けて、"help" や "led" コマンドを入力してみてください。
【図5】shell サンプルのコマンド操作
メモ: IMXRT1050-EVKB にはユーザー LED が 1 個しか搭載されないため、"led" コマンドの arg1 の指定は 1 (LED1) のみ対応となっています。
ここまでで、ベースとするサンプル・プロジェクトの動作確認が完了です。
次の手順に進む前に をクリックして、デバッグ・セッションを切断してください。
ポイント: デバッグ・セッションの切断(
Terminate)に似たアイコンメニューとして、デバッグのクリーンアップ (
Clean Up Debug) があります。デバッガーの接続に失敗するような事象が発生する場合には
を実行してからリトライしてください。
(MCUXpresso IDE User Guide に Tips として記載されています)
2. プロジェクトのカスタマイズ
ここからは、shell サンプルをベースにプロジェクトのカスタマイズを行っていきます。ベースとしてコマンド操作が行える環境を選んでいるので、独自のコマンドを追加する内容で紹介していきます。
2-1. ソースコードの編集
一例として、指定期間(秒)のあいだ指定周期(ミリ秒)で LED1 を点滅させるコマンドを追加します。コマンドラインの仕様は以下の内容とします。
Usage: blinkled1 <period> <duration>
<period> ..... 点滅の周期を指定 (ミリ秒単位)
<duration> ... 点滅の期間を指定 (秒単位)
2-1-1. 新規ソースファイルの追加
ソースファイルを追加する手順の紹介を兼ねて、新しく追加するコマンド処理を新規ソースファイル上に定義します。【図6】の手順でソースファイルを生成してください。
【図6】ソースファイルの新規追加
ヒント: 別のエディターで作成したソースファイルを Project Explorer 上の所望のフォルダー以下にドラッグ&ドロップする方法でもファイルの追加は可能です。また、プロジェクトの設定上、追加したソースファイルは自動的にビルド対象となる仕組みになっています。
続けて、新規追加したソースファイルに以下のコードを記述してください。
#include "board.h"
#include "fsl_debug_console.h"
#include "fsl_shell.h"
#include "fsl_common.h"
#define SHELL_Printf PRINTF
shell_status_t Led1Blinking(shell_handle_t shellHandle, int32_t argc, char **argv)
{
int period_ms = atoi(argv[1]);
int duration_s = atoi(argv[2]);
int count_per_1sec;
if(period_ms >= 1000) period_ms = 1000;
SHELL_Printf("Start blinking LED1! (period=%dms, duration=%ds) ", period_ms, duration_s);
int count_per_1s = 1000 / period_ms;
for(int j=0; j<duration_s; j++){
SHELL_Printf(".");
for(int i=0; i<count_per_1s; i++){
USER_LED_TOGGLE();
SDK_DelayAtLeastUs(period_ms*1000, 600000000);
}
}
SHELL_Printf(" Finish!\r\n");
return kStatus_SHELL_Success;
}
メモ: 追加のコード内で使用している API (USER_LED_TOGGLE, SDK_DelayAtLeastUs, ..) は、全てベースのサンプル・プロジェクトに含まれいる物を使用しています。各 API の詳細は、プロジェクト・フォルダー以下のコードを検索して確認してみてください。
ヒント: SDK_DelayAtLeastUs は、第一引数に指定したマイクロ秒単位時間のあいだ処理を遅延させる API になっていますが、第二引数に CPU のクロック周波数を指定する必要があります。(追加コードでは 600000000 (600MHz) を指定)
クロック周波数の確認方法は【図7】を参照ください。
【図7】CPU の動作クロック周波数の確認
以上で新しく追加するコマンド処理の中身が記述できました。
2-1-2. 既存ソースファイルの編集
続けて、追加したコマンド処理を呼び出すために必要な記述を追加していきます。sources/shell.c を開いて【図8】に示す 3 か所の記述を追加してください。
【図8】コマンド追加に必要なソース編集
コピー&ペースト用にテキスト形式の追加対象コードも掲載しておきます。
extern shell_status_t Led1Blinking(shell_handle_t shellHandle, int32_t argc, char **argv);
SHELL_COMMAND_DEFINE(blinkled1,
"\r\n\"blinkled1 <period> <duration>\": Blinking LED1\r\n\r\n",
Led1Blinking,
2);
SHELL_RegisterCommand(s_shellHandle, SHELL_COMMAND(blinkled1));
以上で、コマンドの追加に必要となるコードの編集は全て完了です。
ポイント: ソースファイルの編集が終わったら更新内容の保存を忘れずに実施してください。File メニュー > Save、もしくは Ctrl+S にて保存可能です。
2-2. コンパイラーオプション変更
プロジェクトのプロパティーより、コンパイラーのオプション変更が可能です。必要に応じて各種設定を確認・変更してください。今回は、変更せずにサンプル実行に進みます。
ヒント: 例えば、以下のような場合にプロジェクトのオプション変更を行います。
-
- 最適化レベル変更: 処理時間を計測するような場合には必須(【図9】参照)
【図9】コンパイラー・オプションの例(最適化レベル)
その他に下記のような設定項目がありますので、詳細は GUI 上のオプション項目を確認してみてください。
-
- プリプロセッサー定義の追加: コンパイルスイッチ用の定義追加
- インクルード・サーチパスの追加: プロジェクト既定のパス以外のヘッダーファイル参照時
- 警告レベルの変更: コンパイル時の Warning 表示の条件を緩和したい場合
- ターゲットアーキテクチャーの変更: 別のデバイスへプロジェクトを移植する場合
ポイント: デバッグ時には、最適化レベルを -O0 もしくは -Og とすることをお勧めします。最適化レベルを上げると、ソースコードとプログラム(命令コード)が一致しなくなるため、ブレイクポイントの設定やステップ実行が難しい状態となります。
2-3. カスタマイズ後のサンプル実行
ここまででプロジェクトのカスタマイズは完了です。ベースサンプルの実行時と同様に をクリックしてプログラムを実行してみましょう。実行開始したらシリアル・ターミナルから、追加したコマンド(blinkled1)の実行を試してみてください。
【図10】にカスタマイズ後のサンプル実行結果を示します。
【図10】カスタマイズ後のコンパイラー・オプションの例(最適化レベル)
メモ: 点滅周期や期間の指定を変えながら、ボード上の LED1 の変化も確認してみてください。
正常に動作することが確認できたら、プロジェクト・カスタマイズの試行は完了です。
次の手順に進む前に をクリックして、デバッグ・セッションを切断してください。
3. 編集後のプロジェクトの保存および再利用
最後にプロジェクトのエクスポートとインポートの手順を紹介しておきます。カスタマイズ後のプロジェクトのバックアップおよび再利用の際に活用してみてください。
3-1. プロジェクトのエクスポート
プロジェクトをバックアップしたい場合など、圧縮ファイルへアーカイブして保存する際に使用します。手順を【図11】に示します。
【図11】プロジェクトのエクスポート
3-2. インポート
エクスポートによりアーカイブしておいたファイルを再利用する際に使用します。この操作により Workspace 内にプロジェクトが復元されます。手順を【図12】に示します。
【図12】プロジェクトのインポート
まとめ
今回は、サンプル・プロジェクトをベースにオリジナルの処理を実装する手順を紹介しました。
shell サンプルに新しいコマンドを追加する際に必要となる記述についても触れましたが、同じ記述方法でさらに複数のコマンドを追加することも可能です。応用として、デバッグ時に役立ちそうな独自のコマンドを考えて追加してみるのも面白いと思います。
次回、デバッガーの Debug Configuration 設定について紹介します。
| [NXP マイコン初心者ガイド 3] へ | |||
| NXP マイコン初心者ガイド まとめサイト |