リアルタイム対応アプリケーションを構築する
Visual Studio、Visual Studio Code、またはコマンド ライン (CLI) を使用して、高度なアプリケーションとほぼ同じ方法でリアルタイム対応アプリケーション (RTApps) を開発およびデバッグできます。
前提 条件
- Azure Sphere デバイスをコンピューターに接続する
- Azure Sphere をインストールする
- GNU Arm Embedded ツールチェーンをインストールする
- 専用 UART からの出力を表示するようにハードウェアを設定します (まだ表示していない場合)
開発とデバッグを有効にする
Azure Sphere デバイスでサンプル アプリケーションを構築したり、新しいアプリケーションを開発したりする前に、開発とデバッグを有効にする必要があります。 既定では、Azure Sphere デバイスは "ロック" されます。つまり、開発中のアプリケーションを PC から読み込むのは許可せず、アプリケーションのデバッグも許可しません。 デバッグ用にデバイスを準備すると、この制限が解除され、デバッグに必要なソフトウェアが読み込まれて、デバイス機能 のロックが解除されます。
リアルタイム コアでデバッグするには、 az sphere device enable-development コマンドを使用します。 このコマンドは、デバッグのために PC からアプリケーションを受け入れるようにデバイスを構成し、クラウド アプリケーションの更新を許可しない開発デバイス グループにデバイスを割り当てます。 アプリケーションの開発とデバッグ中は、クラウド アプリケーションの更新によって開発中のアプリケーションが上書きされないように、デバイスをこのグループに残す必要があります。
Windows では、デバッグ サーバーとコアの --enable-rt-core-debugging
種類ごとに必要なドライバーをデバイスに読み込むパラメーターを追加する必要があります。
まだログインしていない場合は、Azure Sphere にログインします。
az login
PowerShell または Windows コマンド プロンプトを使用して、管理者特権でコマンド ライン インターフェイスを開きます。 パラメーターには
--enable-rt-core-debugging
、デバッガー用の USB ドライバーがインストールされるため、管理者特権が必要です。次のコマンドを入力します。
az sphere device enable-development --enable-rt-core-debugging --catalog <CatalogName> --resource-group <ResourceGroupName>
管理者特権が不要になったため、コマンドの完了後にウィンドウを閉じます。 ベスト プラクティスとして、タスクを実行できる最小限の特権を常に使用する必要があります。
az sphere device enable-development コマンドが失敗した場合は、「Azure Sphere の問題のトラブルシューティング」を参照してください。
開発とデバッグを有効にする
Azure Sphere デバイスでサンプル アプリケーションを構築したり、新しいアプリケーションを開発したりする前に、開発とデバッグを有効にする必要があります。 既定では、Azure Sphere デバイスは "ロック" されます。つまり、開発中のアプリケーションを PC から読み込むのは許可せず、アプリケーションのデバッグも許可しません。 デバイスをデバッグ用に準備すると、この制限が解除され、「デバイスの機能と通信」で説明されているように、デバッグに必要なソフトウェア が読み込まれます。
リアルタイム コアでデバッグするには、 az sphere device enable-development コマンドを使用します。 このコマンドは、デバッグのために PC からアプリケーションを受け入れるようにデバイスを構成し、クラウド アプリケーションの更新を許可しない開発デバイス グループにデバイスを割り当てます。 アプリケーションの開発とデバッグ中は、クラウド アプリケーションの更新によって開発中のアプリケーションが上書きされないように、デバイスをこのグループに残す必要があります。
Windows では、デバッグ サーバーとコアの --enable-rt-core-debugging
種類ごとに必要なドライバーをデバイスに読み込むパラメーターを追加する必要があります。
まだログインしていない場合は、Azure にログインします。
az login
PowerShell、Windows コマンド プロンプト、または Linux コマンド シェルを使用して、管理者特権でコマンド ライン インターフェイスを開きます。 パラメーターには
--enable-rt-core-debugging
、デバッガー用の USB ドライバーがインストールされるため、管理者特権が必要です。次のコマンドを入力します。
az sphere device enable-development --enable-rt-core-debugging
管理者特権が不要になったため、コマンドの完了後にウィンドウを閉じます。 ベスト プラクティスとして、タスクを実行できる最小限の特権を常に使用する必要があります。
az sphere device enable-development コマンドが次のエラー メッセージで失敗した場合は、「Azure Sphere の問題のトラブルシューティング」を参照してください。
error: The device did not accept the device capability configuration. Please check the Azure Sphere OS on your device is up-to-date using 'az sphere device show-deployment-status'.
Visual Studio Code を使用して RTApp をビルドする
RTApp をビルドするには:
Visual Studio Code で、Azure Sphere サンプル リポジトリの複製で HelloWorld_RTApp_MT3620_BareMetal フォルダーを開きます。 キットの選択を求められたら、[キットを使用しない] を選択します。
F5 キーを押してデバッガーを起動します。 プロジェクトが以前にビルドされていない場合、またはファイルが変更され、再構築が必要な場合、Visual Studio Code はデバッグを開始する前にプロジェクトをビルドします。
接続されたターミナル エミュレーターには、アプリケーションからの出力が表示されます。 プログラムは、次の単語を 1 秒間隔で送信します。
Tick
Tock
メモ
Visual Studio Code では Intellisense が提供されますが、CMakeLists.txt を変更しても自動的には更新されません。 Intellisense を更新するには、 CMake: Delete Cache and Configure コマンドを実行する必要があります。 CMake ターゲット ビューは、左側のバーの CMake 拡張機能ビューにあります。
Visual Studio を使用して RTApp をビルドする
RTApp をビルドするには:
Visual Studio で [ ファイル>CMake ] を選択し、サンプルが含まれているフォルダーに移動します。
CMake の生成が自動的に開始されない場合は、CMakeLists.txt ファイルを選択します。
Visual Studio で、出力>の表示>出力の表示元: CMake 出力にメッセージ
CMake generation started.
が表示され、CMake generation finished.
[CMake] メニュー (存在する場合) で、[ すべてビルド] を選択します。 メニューが表示されない場合は、ソリューション エクスプローラーを開き、CMakeLists.txt ファイルを右クリックして、[ビルド] を選択します。 Azure Sphere アプリケーションの出力場所が [出力 ] ウィンドウに表示されます。
F5 キーを押してアプリケーションをデプロイします。
接続されたターミナル エミュレーターには、アプリケーションからの出力が表示されます。 プログラムは、次の単語を 1 秒間隔で送信します。
Tick
Tock
メモ
Visual Studio では、CMake キャッシュからデータを収集することで、Azure Sphere RTApps に Intellisense を提供します。 Visual Studio は、RTApp 内の CMakeLists.txt または CMakeSettings.json ファイルが変更されるたびにキャッシュを更新します。
既定では、Visual Studio ではフォルダー ビューが使用されます。 CMake プロジェクトの論理ビューを使用する場合は、[CMake ターゲット] ビューに変更できます。 ソリューション エクスプローラーで、フォルダートグル アイコンを選択します。
ドロップダウン メニューの [ CMake ターゲット ビュー] を選択します。
OpenOCD が接続する前に、アプリケーションの実行が開始される可能性があります。 その結果、コードの早い段階で設定されたブレークポイントが見逃される可能性があります。 この簡単な回避策は、OpenOCD が接続されるまでアプリの起動を遅らせることです。
アプリケーション エントリ ポイント RTCoreMain の先頭に次のコードを挿入します。 これにより、変数
f
が true に設定されるまで、アプリケーションはループにwhile
入り続けます。volatile bool f = false; while (!f) { // empty. }
F5 キーを押してデバッグでアプリを起動し、実行に分割します。
[ ローカル ] デバッグ ウィンドウで、 の
f
値を 0 から 1 に変更します。通常どおりコードをステップ実行します。
CLI を使用して RTApp をビルドする
次の手順では、CMake を使用していることを前提としています。 CMake を使用せずにコマンド ラインでビルドする場合は、Azure Sphere SDK と共にインストールされている AzureSphereToolchainBase.cmake ファイルと AzureSphereRTCoreToolchain.cmake ファイルを調べることで、適切なコンパイラとリンカーのオプションを決定できます。
PowerShell、Windows コマンド プロンプト、または Linux コマンド シェルを使用して、コマンド ライン インターフェイスを開きます。 プロジェクトビルドディレクトリに移動します。
プロジェクト ビルド ディレクトリから、コマンド プロンプトで、次のパラメーターを指定して CMake を実行します。
cmake --preset <preset-name> <source-path>
--preset <preset-name>
CMakePresets.jsonで定義されているビルド構成プリセット名。
--build <cmake-path>
CMake キャッシュを含むバイナリ ディレクトリ。 たとえば、Azure Sphere サンプルで CMake を実行する場合、ビルド コマンドは になります
cmake --build out/ARM-Debug
。<source-path>
サンプル アプリケーションのソース ファイルを含むディレクトリのパス。 この例では、Azure Sphere サンプル リポジトリが AzSphere というディレクトリにダウンロードされました。
CMake パラメーターはスペースで区切られます。 行継続文字 (^ for Windows コマンド ライン、\ for Linux コマンド ライン、または ' for PowerShell) は読みやすくするために使用できますが、必須ではありません。
次の例は、HelloWorld RTApp の CMake コマンドを示しています。
Ninja を実行してアプリケーションをビルドし、イメージ パッケージ ファイルを作成します。
ninja -C out/ARM-Debug
Ninja は、結果のアプリケーションファイルと .imagepackage ファイルを指定されたディレクトリに配置します。
次のコマンドを使用して、CMake を介して Ninja を呼び出すこともできます。
cmake --build out/<binary-dir>
CMake キャッシュを含むバイナリ ディレクトリに設定
<binary-dir>
します。 たとえば、Azure Sphere サンプルで CMake を実行する場合、ビルド コマンドは になりますcmake --build out/ARM-Debug
。デバイスに既にデプロイされているアプリケーションを削除します。
az sphere device sideload delete
Ninja が作成したイメージ パッケージをデプロイします。
az sphere device sideload deploy --image-package <package-name>
イメージのコンポーネント ID を取得します。
az sphere image-package show --image-package <path-to-imagepackage>
コマンドは、イメージ パッケージのすべてのメタデータを返します。 アプリケーションのコンポーネント ID は、[アプリケーション イメージの種類] の [ID] セクションに表示されます。 例えば:
... "Identity": { "ComponentId": "<component-id>", "ImageId": "<image-id>", "ImageType": "Application" }, ...
アプリが実行されているコアを決定します。
既定では、RTApp はデバイスで最初に使用可能なリアルタイム コアにデプロイされます。現在、特定のコアを指定することはできません。 アプリケーションが実行されているコアを確認するには、 az sphere device app コマンドを使用してアプリケーションを停止してから再起動します。 コマンドでアプリケーションのコンポーネント ID を指定します。 例えば:
az sphere device app stop --component-id <component id> <component id>: App state: stopped
az sphere device app start --component-id <component id> <component id> App state: running Core : Real-time 0
接続されたターミナル エミュレーターには、アプリケーションからの出力が表示されます。 プログラムは、次の単語を 1 秒間隔で送信します。
Tick
Tock
RTApp からのログ出力
MT3620 の各リアルタイム コアには、ログ出力用の専用 UART があります。 リアルタイム コアは ISU UART にもアクセスできます。 MT3620 RDB は TX ピンのみを公開します。このピンを使用して、アプリケーションからのログ出力を表示できます。 他のハードウェアでは、これを異なる方法で公開するか、まったく公開しない場合があります。 ログ出力を表示するには、 クイック スタートの説明に従って、この出力を表示するようにハードウェアを設定します。 専用 UART では、アプリケーション マニフェストの Uart
要件は必要ありません。ただし、RTApp のログ出力以外の目的で使用しないでください。
パートナー アプリを使用して開発する
Azure Sphere デバイスにアプリケーションを読み込むと、Azure Sphere デプロイ ツールによって既定ですべての既存のアプリケーションが削除されます。 相互に通信するアプリケーションを開発するときにこの問題が発生しないようにするには、アプリケーションを パートナーとしてマークする必要があります。 いずれかのアプリケーションをデプロイしても、そのパートナーは削除されません。 詳細については、「 アプリケーションをパートナーとしてマークする 」を参照してください。
トラブルシューティング
問題が発生した場合は、「 リアルタイム対応アプリケーションのトラブルシューティング」を参照してください。
その他のリソース
MT3620 チップの M4 リアルタイム コアをターゲットとする RTApps 用の追加のドライバーとサンプルは、Azure Sphere パートナーの GitHub で入手できます。