チュートリアル: リアルタイム対応アプリケーションを構築する

このチュートリアルでは、Azure Sphere デバイスでリアルタイム コアのサンプル アプリケーションを構築する方法について説明します。 リアルタイム対応アプリケーションの基本的な情報については、「 Azure Sphere アプリケーションの概要 」を参照してください。

このチュートリアルでは、次の方法について説明します。

  • サンプル アプリケーションをダウンロードする
  • GNU Arm ツールチェーンをインストールする
  • 出力を表示するようにハードウェアを設定する
  • 開発とデバッグを有効にする
  • ターミナル エミュレーターを起動して出力を表示する
  • リアルタイム対応アプリケーションのビルド、実行、デバッグ

大事な

これらの手順では、MT3620 リファレンス ボード 設計 (RDB) ハードウェア (Seeed Studios の MT3620 Dev Kit など) に従うハードウェアを使用していることを前提としています。 別の Azure Sphere ハードウェアを使用している場合は、製造元のドキュメントを参照して、UART が公開されているかどうかを確認し、そのハードウェアにアクセスする方法を確認してください。 出力を異なる方法で 表示するようにハードウェアを設定 し、app_manifest.json ファイルのサンプル コードと Uarts フィールドを更新して、別の UART を使用する必要がある場合があります。

前提 条件

  • Windows または Linux 用の CMake と Ninja インストールします。

サンプル アプリケーションをダウンロードする

HelloWorld アプリケーションは次のようにダウンロードできます。

  1. ブラウザーを Microsoft Samples Browser にポイントします。
  2. [Search] ボックスに「Azure Sphere」と入力します。
  3. 検索結果から [Azure Sphere - Hello World] を選択します。
  4. [ ZIP のダウンロード] を選択します
  5. ダウンロードしたファイルを開き、ローカル ディレクトリに展開します。

GNU Arm Embedded Toolchain をインストールする

ARM 開発者向け Web サイトから GNU Arm Embedded Toolchain をダウンロードしてインストールできます。 または、 vcpkg 成果物を 使用して、開発環境を自動的にインストールして構成することもできます。

  • Visual Studio 2022: Visual Studio 2022 を使用している場合は、 Arm 開発者向け Web サイトから GNU Arm Embedded Toolchain (arm-none-eabi) をインストールします。
  • Visual Studio 2019: ツールチェーンは、Visual Studio 2019 の Visual Studio 用 azure-sphere 拡張機能と共に自動的にインストールされます。 Visual Studio 2019 を使用している場合は、 出力を表示するためのハードウェアのセットアップに進みます。 ただし、GNU Arm Embedded Toolchain を手動でインストールした場合、Visual Studio はインストールしたバージョンを使用します。

ツールチェーンをインストールするには、 Arm 開発者 Web サイトで、ARM Cortex-M4 プロセッサのコンパイラを含む GNU Arm Embedded Toolchain (arm-none-eabi) を見つけます。 こちらの手順に従って、OS プラットフォームのコンパイラをダウンロードしてインストールします。

既定では、Visual Studio Code はツールチェーンを検索し、インストールしたバージョンを見つける必要があります。 ツールチェーンに関連するビルドの問題が発生した場合は、次のようにパスを入力します。

  1. [ファイル>設定] [設定]>>[拡張機能][Azure Sphere] の順>に選択します。
  2. Azure Sphere: Arm Gnu Path 設定に GNU Arm Embedded Toolchain インストール パスを入力します。

ツールチェーンをインストールするには、 Arm 開発者 Web サイトで、ARM Cortex-M4 プロセッサのコンパイラを含む GNU Arm Embedded Toolchain (arm-none-eabi) を見つけます。 こちらの手順に従って、OS プラットフォームのコンパイラをダウンロードしてインストールします。

出力を表示するようにハードウェアを設定する

現時点では、各リアルタイム コアは TX 専用 UART をサポートしています。 RTApps はこの UART を使用して、デバイスからログ出力を送信できます。 アプリケーションの開発とデバッグ中は、通常、出力を読み取って表示する方法が必要です。 HelloWorld_RTApp_MT3620_BareMetalサンプルは、アプリケーションが UART に書き込む方法を示しています。

FTDI フレンドなどの USB からシリアルへのアダプターを使用して、リアルタイム コアの UART をコンピューターの USB ポートに接続します。 また、出力を表示するには、115200-8-N-1 ターミナル設定 (115200 bps、8 ビット、パリティ ビットなし、1 ストップ ビット) でシリアル接続を確立するための ターミナル エミュレーター も必要です。

RTApp からの出力を表示するようにハードウェアを設定するには、次の手順に従います。 ピンの場所を特定するには、ハードウェアの製造元のドキュメントを参照する必要があります。 MT3620 リファレンス ボード 設計 (RDB) ハードウェア (Seeed Studios の MT3620 Dev Kit など) に従うハードウェアを使用している場合は、 RDB インターフェイス ヘッダー を確認すると、ピンの場所を特定するのに役立つ場合があります。

  1. USB からシリアルへのアダプターの GND を開発キットの GND に接続します。 MT3620 RDB ハードウェアでは、GND はヘッダー 3、ピン 2 です。
  2. USB からシリアルへのアダプターの RX を開発キットの IOM4-0 TX に接続します。 MT3620 RDB ハードウェアでは、IOM4-0 TX はヘッダー 3、ピン 6 です。
  3. USB からシリアルへのアダプターを開発用コンピューター上の空き USB ポートに接続し、シリアル デバイスが接続されているポートを決定します。 Windows で、デバイス マネージャーを開始し、[コンテナー別にデバイスを表示>] を選択し、[USB UART] を探します。 たとえば、FT232R USB UART は FTDI フレンド アダプターを示します。
  4. ターミナル エミュレーター プログラムを起動し、アダプターで使用される COM ポートに 115200-8-N-1 ターミナルを開きます。 ポートと速度を指定する方法については、ターミナル エミュレーターのドキュメントを参照してください。

出力を表示するようにハードウェアを設定する

現時点では、各リアルタイム コアは TX 専用 UART をサポートしています。 RTApps はこの UART を使用して、デバイスからログ出力を送信できます。 アプリケーションの開発とデバッグ中は、通常、出力を読み取って表示する方法が必要です。 HelloWorld_RTApp_MT3620_BareMetalサンプルは、アプリケーションが UART に書き込む方法を示しています。

FTDI フレンドなどの USB からシリアルへのアダプターを使用して、リアルタイム コアの UART をコンピューターの USB ポートに接続します。 また、出力を表示するには、115200-8-N-1 ターミナル設定 (115200 bps、8 ビット、パリティ ビットなし、1 ストップ ビット) でシリアル接続を確立するための ターミナル エミュレーター も必要です。

RTApp からの出力を表示するようにハードウェアを設定するには、次の手順に従います。 ピンの場所を特定するには、ハードウェアの製造元のドキュメントを参照する必要があります。 MT3620 リファレンス ボード 設計 (RDB) ハードウェア (Seeed Studios の MT3620 Dev Kit など) に従うハードウェアを使用している場合は、 RDB インターフェイス ヘッダー を確認すると、ピンの場所を特定するのに役立つ場合があります。

  1. USB からシリアルへのアダプターの GND を開発キットの GND に接続します。 MT3620 RDB ハードウェアでは、GND はヘッダー 3、ピン 2 です。

  2. USB からシリアルへのアダプターの RX を開発キットの IOM4-0 TX に接続します。 MT3620 RDB ハードウェアでは、IOM4-0 TX はヘッダー 3、ピン 6 です。

  3. USB からシリアルへのアダプターを開発用コンピューター上の空き USB ポートに接続し、シリアル デバイスが接続されているポートを決定します。

    • Windows で、デバイス マネージャーを開始し、[コンテナー別にデバイスを表示>] を選択し、[USB UART] を探します。 たとえば、FT232R USB UART は FTDI フレンド アダプターを示します。

    • Linux では、次のコマンドを入力します。

      dmesg | grep ttyUSB
      

      ポートには ttyUSBn という名前を付ける必要があります。 n はポート番号を示します。 コマンドに複数の dmesg USB ポートが一覧表示されている場合、接続されているポートは通常、最後の USB ポートに接続済みとして報告されます。 たとえば、次の例では、ttyUSB4 を使用します。

    ~$ dmesg | grep ttyUSB
    [  144.564350] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0
    [  144.564768] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB1
    [  144.565118] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
    [  144.565593] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB3
    [  144.570429] usb 1-1.1.3: FTDI USB Serial Device converter now attached to ttyUSB4
    [  254.171871] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
    
  4. ターミナル エミュレーター プログラムを起動し、アダプターで使用される COM ポートに 115200-8-N-1 ターミナルを開きます。 ポートと速度を指定する方法については、ターミナル エミュレーターのドキュメントを参照してください。

開発とデバッグを有効にする

Azure Sphere デバイスでサンプル アプリケーションを構築したり、新しいアプリケーションを開発したりする前に、開発とデバッグを有効にする必要があります。 既定では、Azure Sphere デバイスは "ロック" されます。つまり、開発中のアプリケーションを PC から読み込むのは許可せず、アプリケーションのデバッグも許可しません。 デバッグ用にデバイスを準備すると、この制限が解除され、デバッグに必要なソフトウェアが読み込まれて、デバイス機能 のロックが解除されます。

リアルタイム コアでデバッグするには、 az sphere device enable-development コマンドを使用します。 このコマンドは、デバッグのために PC からアプリケーションを受け入れるようにデバイスを構成し、クラウド アプリケーションの更新を許可しない開発デバイス グループにデバイスを割り当てます。 アプリケーションの開発とデバッグ中は、クラウド アプリケーションの更新によって開発中のアプリケーションが上書きされないように、デバイスをこのグループに残す必要があります。

Windows では、デバッグ サーバーとコアの --enable-rt-core-debugging 種類ごとに必要なドライバーをデバイスに読み込むパラメーターを追加する必要があります。

  1. まだログインしていない場合は、Azure Sphere にログインします。

    az login
    
  2. PowerShell または Windows コマンド プロンプトを使用して、管理者特権でコマンド ライン インターフェイスを開きます。 パラメーターには --enable-rt-core-debugging 、デバッガー用の USB ドライバーがインストールされるため、管理者特権が必要です。

  3. 次のコマンドを入力します。

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. 管理者特権が不要になったため、コマンドの完了後にウィンドウを閉じます。 ベスト プラクティスとして、タスクを実行できる最小限の特権を常に使用する必要があります。

az sphere device enable-development コマンドが失敗した場合は、「Azure Sphere の問題のトラブルシューティング」を参照してください。

Visual Studio を使用して HelloWorld RTApp アプリケーションをビルドして実行する

  1. Visual Studio を起動します。 [ ローカル フォルダーを開く] を選択し、ダウンロードした Azure_Sphere___Hello_World.zip ファイルを抽出したフォルダーに移動し、HelloWorld_RTApp_MT3620_Baremetal フォルダーを選択します。

  2. MT3620 RDB を使用していない場合は、 app_manifest.json ファイル とサンプル コードを更新して、正しい UART (ISU1 など) を指定します。

  3. CMake の生成が自動的に開始されない場合は、CMakeLists.txt ファイルを選択します。

  4. Visual Studio の [出力] ウィンドウで、CMake 出力にメッセージCMake generation started.CMake generation finished.が表示されます。

  5. [Build All]\(すべてビルド\) >選択します。 メニューが表示されない場合は、ソリューション エクスプローラーを開き、CMakeLists.txt ファイルを右クリックし、[ビルド] を選択します。 HelloWorld_RTApp_MT3620_Baremetal アプリケーションの出力場所が [出力 ] ウィンドウに表示されます。

  6. [ スタートアップ項目の選択 ] メニューの [ HelloWorld_RTApp_MT3620_Baremetal (RTCore) を選択します。

  7. F5 キーを押してアプリケーションをデプロイします。

  8. 接続されたターミナル エミュレーターには、HelloWorld_RTApp_MT3620_Baremetal プログラムからの出力が表示されます。 プログラムは、次の単語を 1 秒間隔で送信します。

    Tick

    Tock

  9. デバッガーを使用してブレークポイントを設定し、変数を検査し、他のデバッグ タスクを試します。

Visual Studio Code を使用して HelloWorld RTApp アプリケーションをビルドして実行する

  1. Visual Studio Code で、ダウンロードした Azure_Sphere___Hello_World.zip ファイルを抽出したフォルダー内の HelloWorld_RTApp_MT3620_BareMetal フォルダーを開きます。 キットの選択を求められたら、[キットを 使用しない] を選択します。

  2. MT3620 RDB ハードウェアを使用していない場合は、 app_manifest.json ファイル とサンプル コードを更新して、正しい UART (ISU1 など) を指定します。

  3. F5 キーを押してデバッガーを起動します。 プロジェクトが以前にビルドされていない場合、またはファイルが変更され、再構築が必要な場合、Visual Studio Code はデバッグを開始する前にプロジェクトをビルドします。

  4. Azure Sphere の出力ウィンドウに "イメージのデプロイ... " が表示されます。SDK とコンパイラへのパスが続きます。

  5. 接続されたターミナル エミュレーターには、HelloWorld_RTApp_MT3620_Baremetal プログラムからの出力が表示されます。 プログラムは、次の単語を 1 秒間隔で送信します。

    Tick

    Tock

  6. Visual Studio Code デバッグ機能を使用して、ブレークポイントの設定、変数の検査、その他のデバッグ タスクの試行を行います。

トラブルシューティング

OpenOCD が接続する前に、アプリケーションの実行が開始される可能性があります。 その結果、コードの早い段階で設定されたブレークポイントが見逃される可能性があります。 この簡単な回避策は、OpenOCD が接続されるまでアプリの起動を遅らせることです。

  1. アプリケーション エントリ ポイント RTCoreMain の先頭に次のコードを挿入します。 これにより、変数ftrue に設定されるまで、アプリケーションはループにwhile入り続けます。

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. F5 キーを押してデバッグ (F5) でアプリを起動し、実行に中断します。

  3. [ ローカル ] デバッグ ウィンドウで、 の f 値を 0 から 1 に変更します。

  4. 通常どおりにコードをステップ実行します。

サンプルをビルドする

  1. PowerShell、Windows コマンド プロンプト、または Linux コマンド シェルを使用して、コマンド ライン インターフェイスを開きます。 プロジェクトビルドディレクトリに移動します。

  2. プロジェクト ビルド ディレクトリから、コマンド プロンプトで、次のパラメーターを指定して 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) は読みやすくするために使用できますが、必須ではありません。

    次の例は、RTApp の CMake コマンドを示しています。 示されている場所で、ファイルパス>をシステム上のGNU Arm Embedded Toolchainのインストールパスに置き換えます<。

    Windows コマンド プロンプト

    cmake ^
    --preset "ARM-Debug" ^
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

    cmake `
    --preset "ARM-Debug" `
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    
  3. 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

特に CMake コマンドに変更を加えてからトラブルシューティングを行う場合は、ビルド全体を削除してやり直してください。

サンプルを実行する

  1. デバイスに既にデプロイされているアプリケーションを削除します。

    az sphere device sideload delete
    
  2. プロジェクト ディレクトリから、コマンド プロンプトで、ninja によって作成されたイメージ パッケージを読み込みます。

    az sphere device sideload deploy --image-package <path-to-imagepackage>
    

    アプリケーションが読み込まれた直後に、アプリケーションの実行が開始されます。 接続されたターミナル エミュレーターには、次の情報が表示されます。

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. イメージのコンポーネント ID を取得します。

    az sphere image-package show --image-package <path-to-imagepackage>
    

    コマンドは、イメージ パッケージのすべてのメタデータを返します。 アプリケーションのコンポーネント ID は、[アプリケーション イメージの種類] の [ID] セクションに表示されます。 例えば:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

    次のコマンドを使用して、アプリケーションの停止、起動、および状態の取得を行うことができます。

    az sphere device app stop --component-id <component id>
    
    az sphere device app start --component-id <component id>
    
    az sphere device app show-status --component-id <component id>
    

サンプルをデバッグする

  1. アプリケーションが実行されている場合は停止します。

    az sphere device app stop --component-id <component id>
    
  2. デバッグのためにアプリケーションを再実行します。

    az sphere device app start --debug-mode true  --component-id <component id>
    

    このコマンドは、アプリケーションが実行されているコアを返します。

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. アプリケーションがビルドされた sysroot の Openocd フォルダーに移動します。 sysroots は、Azure Sphere SDK のインストール フォルダーにインストールされます。 たとえば、Windows では、フォルダーは既定で Linux の と /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linuxC:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd インストールされます。

  4. 次の例に示すようにを実行 openocd します。 この例では、アプリがコア 0 で実行されていることを前提としています。 アプリがコア 1 で実行されている場合は、"targets io0" を "targets io1" に置き換えます。

    openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. アプリケーション .out ファイルを含むフォルダーに移動し、GNU Arm Embedded Toolchain の一部である を開始 arm-none-eabi-gdbします。

    Windows コマンド プロンプト

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    
  6. OpenOCD サーバーは、:4444 で GDB サーバー インターフェイスを提供します。 デバッグのターゲットを設定します。

    target remote :4444

  7. これで、gdb コマンドを実行できるようになりました。

  8. 接続されたターミナル エミュレーターには、アプリケーションからの出力が表示されます。

パートナー アプリを使用する

Azure Sphere デバイスにアプリケーションを読み込むと、Azure Sphere デプロイ ツールによって既定ですべての既存のアプリケーションが削除されます。 相互に通信するアプリケーションを開発するときにこの問題が発生しないようにするには、アプリケーションを パートナーとしてマークする必要があります。 いずれかのアプリケーションをデプロイしても、そのパートナーは削除されません。 詳細については、「 アプリケーションをパートナーとしてマークする 」を参照してください。

次の手順