次の方法で共有


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

重要

これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。

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

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

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

重要

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

前提条件

サンプル アプリケーションのダウンロード

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

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

GNU Arm 埋め込みツールチェーンをインストールします

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

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

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

  1. File>Preferences>Settings>Extensions>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 Friend などの USB-to-シリアル アダプターを使用して、リアルタイム コア上の UART をコンピューターの USB ポートに接続します。 また、出力を表示するには、 ターミナル エミュレーター 115200-8-N-1 ターミナル設定 (115200 bps、8 ビット、パリティ ビットなし、1 ストップ ビット) でシリアル接続を確立する必要があります。

RTApp からの出力を表示するようにハードウェアを設定するには、次の手順に従います。 ピンの場所を決定するには、ハードウェア製造元のドキュメントを参照する必要があります。 Seeed Studios の MT3620 開発キットなど、MT3620 参照ボード設計 (RDB) ハードウェアに準拠しているハードウェアを使用している場合、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 でデバイス マネージャーを起動し、View>Devices by container を選択し、"USB UART" を探します。 たとえば、FT232R USB UART は FTDI フレンド アダプターを示します。
  4. ターミナル エミュレーター プログラムを起動し、アダプターで使用される COM ポートに 115200-8-N-1 ターミナルを開きます。 ポートと速度を指定する方法については、ターミナル エミュレーターのドキュメントを参照してください。

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

現在、各リアルタイム コアでは TX 専用の UART がサポートされています。 RTApps は、この UART を使用してデバイスからログ出力を送信します。 アプリケーションの開発とデバッグの際には、一般に、出力を読み取って表示する手段が必要となります。 HelloWorld_RTApp_MT3620_BareMetal サンプルは、アプリケーションがどのように UART に書き込むかを示しています。

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

RTApp からの出力を表示するようにハードウェアを設定するには、次の手順に従います。 ピンの場所を決定するには、ハードウェア製造元のドキュメントを参照する必要があります。 Seeed Studios の MT3620 開発キットなど、MT3620 参照ボード設計 (RDB) ハードウェアに準拠しているハードウェアを使用している場合、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 でデバイス マネージャーを起動し、View>Devices by container を選択し、"USB UART" を探します。 たとえば、FT232R USB UART は FTDI フレンド アダプターを示します。

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

      dmesg | grep ttyUSB
      

      ポートには ttyUSBn という名前を付ける必要があります。この n はポート番号です。 dmesg コマンドが複数の 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 デバイス用の新しいアプリケーションを開発したりするには、その前に、開発とデバッグを有効にする必要があります。 既定では、Azure Sphere デバイスは "ロックされています"。つまり、開発中のアプリケーションを PC から読み込むことはできず、アプリケーションのデバッグは許可されません。 デバッグ用にデバイスを準備すると、この制限がなくなり、デバッグに必要なソフトウェアが読み込まれ、「デバイス機能と通信」で説明されているように、デバイスの機能がロック解除されます。

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

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

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

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

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

    azsphere device enable-development --enable-rt-core-debugging
    
  4. 管理者特権はもう必要ないので、コマンドが完了したらウィンドウを閉じます。 ベスト プラクティスとして、常に、タスクを実行できる最も低い特権を使用する必要があります。

azsphere 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>Build All を選択します。 メニューが表示されない場合は、ソリューション エクスプローラーを開き、CMakeLists.txt ファイルを右クリックし、Build を選択します。 HelloWorld_RTApp_MT3620_Baremetal アプリケーションの出力場所が Output ウィンドウに表示されます。

  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 の出力ウィンドウに、"Deploying image..."\(画像のデプロイ中...\) に続いて 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. Locals デバッグ ウィンドウで、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 パラメーターはスペースで区切られます。 行継続文字 (Windows コマンド ラインの場合は ^、Linux コマンド ラインの場合は \、PowerShell の場合は ' ) は読みやすくするために使用できますが、必須ではありません。

    次の例は、RTApp の CMake コマンドを示しています。 示されている場合は、 <file-path> をシステム上の 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>
    

    <binary-dir> CMake キャッシュを含むバイナリ ディレクトリに設定します。 たとえば、Azure Sphere サンプルで CMake を実行すると、ビルド コマンドが cmake --build out/ARM-Debugされます。

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

サンプルを実行する

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

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

    azsphere device sideload deploy --image-package <path-to-imagepackage>
    
  3. イメージのコンポーネント ID を取得します。

    azsphere image-package show --image-package <path-to-imagepackage>
    

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

    Image package metadata:
    Section: Identity
    Image Type:           Application
    Component ID:         <component id>
    Image ID:             <image id>
    

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

    azsphere device app stop --component-id <component id>
    
    azsphere device app start --component-id <component id>
    
    azsphere device app show-status --component-id <component id>
    

サンプルをデバッグする

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

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

    azsphere device app start --component-id <component id>
    

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

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

  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 ツールチェーンの一部である 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 のデプロイ ツールでは、既定で既存のアプリケーションがすべて削除されます。 相互に通信するアプリケーションを開発するときにこの問題が発生しないようにするには、アプリケーションを パートナーとしてマークする必要があります。 いずれかのアプリケーションをデプロイしても、そのパートナーは削除されません。 詳細については、「アプリケーションをパートナーとしてマークする」をご覧ください。

次のステップ