リアルタイム対応アプリケーションの開発とデバッグDevelop and debug a real-time capable application

Visual Studio、Visual Studio Code、またはコマンド ライン (CLI) を使用して、高度なアプリケーションとほとんど同じ方法で、リアルタイム対応アプリケーション (RTApp) を開発してデバッグできます。You can use Visual Studio, Visual Studio Code, or the command line (CLI) to develop and debug real-time capable applications (RTApps) in much the same way as high-level applications.

新しい RTApp を作成するCreate a new RTApp

新しいリアルタイム対応アプリケーションを作成する最も簡単な方法は、HelloWorld_RTApp_MT3620_BareMetal サンプルから始めて、プロジェクトの構成を次の手順に従って調整することです。The easiest way to create a new real-time capable application is to start with the HelloWorld_RTApp_MT3620_BareMetal sample and adjust the configuration to your project by following these steps:

  1. まだ行っていない場合は、サンプル リポジトリを複製します。Clone the samples repo if you haven't already done so. HelloWorld_RTApp_MT3620_BareMetal フォルダーをコピーし、自分のプロジェクトに合わせて名前を変更します。Copy the HelloWorld_RTApp_MT3620_BareMetal folder and rename it for your project.

  2. CMakeLists.txt ファイルで、プロジェクトの名前を新しいフォルダーの名前に変更します。In the CMakeLists.txt file, change the project name to the name of your new folder. 次に例を示します。For example:

    PROJECT(NewRTApp C)

  3. Azure Sphere RTApp サンプルをガイドとして使って、コードを記述します。Write your code, using the Azure Sphere RTApp samples as guides. 次のトピックでは、特定の実装シナリオについて説明されています。The following topics describe specific implementation scenarios:

  4. app_manifest.json ファイルで:In the app_manifest.json file:

    • Name にプロジェクト名を設定します。Set Name to your project name,
    • ApplicationType"RealTimeCapable" に設定しますSet ApplicationType to "RealTimeCapable"
    • ハードウェア リソースや接続など、コードで必要なアプリケーション固有の機能を追加します。Add any application-specific capabilities that your code requires, such as hardware resources or connections. RTApp で高度なアプリと通信する場合は、高度なアプリケーションのコンポーネント ID を AllowedApplicationConnections 機能に追加します。If the RTApp communicates with a high-level app, add the component ID of the high-level application to the AllowedApplicationConnections capability.
  5. RTApp を高度なパートナー アプリと共にデプロイする場合は、launch.vs.json ファイル (Visual Studio) または .vscode/launch.json (VS Code) ファイルの configurations セクションの partnerComponents フィールドに、パートナーのコンポーネント ID を追加します。If you want to deploy your RTApp alongside a high-level partner app, add the component ID of the partner to the partnerComponents field of the configurations section of the launch.vs.json (Visual Studio) or .vscode/launch.json (VS Code) file :

    "partnerComponents": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]

RTApp をビルドするBuild the RTApp

RTApp をビルドするには:To build an RTApp:

  1. Azure Sphere デバイスを USB で PC に接続します。Connect your Azure Sphere device to your PC by USB.

  2. コマンド プロンプトまたはシェルを開きます。Open a command prompt or shell. Windows 上でビルドしている場合は、管理者特権で新しい Azure Sphere 開発者コマンド プロンプトを開きます。If you're building on Windows, open a new Azure Sphere Developer Command Prompt with Administrator privileges. 次のコマンドを実行し、コマンドが成功した後にウィンドウを閉じます。Issue the following command, and then close the window after the command succeeds:

    azsphere device enable-development --enablertcoredebugging

  3. まだ行っていない場合は、専用 UART からの出力を表示するようにハードウェアを設定します。Set up the hardware to display output from the dedicated UART, if you haven't done so already. Windows 用または Linux 用の手順を参照してください。See the instructions for Windows or for Linux.

Visual Studio を使用して RTApp をビルドするBuild RTApp using Visual Studio

  1. Visual Studio で、 [ファイル] メニューを開き、 [開く] > [CMake] を選択して、サンプルが含まれるフォルダーに移動します。In Visual Studio, open the File menu, select Open>CMake... and navigate to the folder that contains the sample.

  2. CMake の生成が自動的に始まらない場合は、CMakeLists.txt ファイルを選択します。If CMake generation does not start automatically, select the CMakeLists.txt file.

  3. Visual Studio の出力ウィンドウに、CMake の出力の CMake generation started. および CMake generation finished. というメッセージが表示されます。In the Visual Studio Output window, the CMake output should show the messages CMake generation started. and CMake generation finished.

  4. CMake のメニューで (表示される場合)、[すべてビルド] をクリックします。On the CMake menu (if present), click Build All. メニューが表示されない場合は、ソリューション エクスプローラーを開き、CMakeLists.txt ファイルを右クリックして、[ビルド] を選択します。If the menu is not present, open Solution Explorer, right-click the CMakeLists.txt file, and select Build. Azure Sphere アプリケーションの出力の場所が、出力ウィンドウに表示されます。The output location of the Azure Sphere application appears in the Output window.

  5. F5 キーを押して、アプリケーションを配置します。Press F5 to deploy the application.

  6. 接続されているターミナル エミュレーターに、アプリケーションからの出力が表示されます。The connected terminal emulator should display output from the application. プログラムでは、1 秒間隔で次の単語が送信されます。The program sends the following words at one-second intervals:

    Tick

    Tock

    注意

    Visual Studio では、CMake キャッシュからデータを収集することにより、Azure Sphere RTApp 用の IntelliSense が提供されます。Visual Studio provides Intellisense for Azure Sphere RTApps by gathering data from its CMake cache. RTApp の CMakeLists.txt ファイルまたは CMakeSettings.json ファイルが変更されるたびに、Visual Studio でキャッシュが更新されます。Visual Studio updates the cache whenever the CMakeLists.txt or CMakeSettings.json file in the RTApp changes.

    既定では、Visual Studio ではフォルダー ビューが使われます。By default, Visual Studio uses the Folder view. CMake プロジェクトの論理ビューの方がよい場合は、CMake ターゲット ビューに変更できます。If you prefer a logical view of the CMake project, you can change to the CMake Targets view. ソリューション エクスプローラーで、フォルダー切り替えアイコンを選択します。In Solution Explorer, select the folder toggle icon:

    ソリューション ビューとフォルダー ビューを切り替える

    ドロップダウン メニューから、[CMake ターゲット ビュー] を選択します。From the drop-down menu, select CMake Targets View.

VS Code を使用して RTApp をビルドするBuild RTApp using VS Code

  1. Visual Studio Code で、Azure Sphere サンプル リポジトリの複製内の HelloWorld_RTApp_MT3620_BareMetal フォルダーを開きます。In Visual Studio Code, open the HelloWorld_RTApp_MT3620_BareMetal folder in your clone of the Azure Sphere samples repo. キットを選択するように求めるメッセージが表示されたら、[キットを使用しない] を選択します。If you're prompted to select a kit, choose "Do not use a kit."

  2. F5 キーを押してデバッガーを起動します。Press F5 to start the debugger. プロジェクトがまだビルドされていない場合、またはファイルが変更され、リビルドが必要な場合は、デバッグを開始する前に、VS Code によってプロジェクトがビルドされます。If the project has not previously been built, or if files have changed and rebuild is required, VS Code will build the project before debugging starts.

  3. 接続されているターミナル エミュレーターに、アプリケーションからの出力が表示されます。The connected terminal emulator should display output from the application. プログラムでは、1 秒間隔で次の単語が送信されます。The program sends the following words at one-second intervals:

    Tick

    Tock

    注意

    VS Code では Intellisense が提供されますが、CMakeLists.txt を変更しても自動的に更新されることはありません。VS Code provides Intellisense, but it won't automatically update when you modify CMakeLists.txt. "CMake: Delete Cache and Reconfigure" コマンドを実行して、Intellisense を更新する必要があります。You need to run the "CMake: Delete Cache and Reconfigure" command to refresh Intellisense. 左側のバーにある CMake 拡張機能ビューで、CMake ターゲット ビューを見つけることができます。The CMake targets view can be found in the CMake extension view on the left bar.

CLI を使用して RTApp をビルドするBuild RTApp using the CLI

次の手順は、CMake を使用していることを前提としています。The instructions that follow assume you're using CMake. CMake を使用せずにコマンド ラインでビルドする場合は、Azure Sphere SDK と一緒にインストールされる AzureSphereToolchainBase.cmake と AzureSphereRTCoreToolchain.cmake ファイルを参照して、適切なコンパイラとリンカーのオプションを決定できます。If you prefer to build on the command line without using CMake, you can determine the appropriate compiler and linker options by looking at the AzureSphereToolchainBase.cmake and AzureSphereRTCoreToolchain.cmake files, which are installed with the Azure Sphere SDK.

  1. コマンド プロンプトまたはシェルを開きます。Open a command prompt or shell. Windows で実行する場合は、Azure Sphere 開発者コマンド プロンプトである必要があります。If you're running on Windows, it must be an Azure Sphere Developer Command Prompt.

  2. ビルド プロセス中に生成されるビルドと .imagepackage ファイルが格納されるディレクトリを作成するか、そこへ移動します。Create or navigate to the directory that will contain the build and .imagepackage files that will be generated during the build process. たとえば、"buildfiles" という名前の新規ディレクトリを作成して開くには、コマンド ラインで以下のコマンドを入力します。For example, to create and open a new directory called "buildfiles" you would enter the following commands at the command line:

    mkdir buildfiles

    cd buildfiles

  3. 次に示すように、コマンド ラインで cmake を実行します。Run cmake at the command line as shown below. 最初に、パラメーターの一覧に以下の変更を加えます。First, make the following changes to the parameter list:

    • DARM_GNU_PATH を、Windows 用または Linux用の RT コア ツールチェーンをインストールした場所に設定します。Set DARM_GNU_PATH to the location in which you installed the RT core toolchain for Windows or for Linux.
    • 最後のパラメーターを、ローカル コンピューター上の HelloWorld_RTApp_MT3620_BareMetal サンプル アプリケーションのソース ファイルが格納されているディレクトリのパス名に設定します。Set the final parameter to the pathname of the directory that contains the source files for the HelloWorld_RTApp_MT3620_BareMetal sample application on your local machine.

    たとえば次のコマンドは、作業ディレクトリが前の手順で作成された buildfiles ディレクトリであると想定して、作業ディレクトリの 1 レベル上のフォルダーでソース ファイルを探します。For example, the following command assumes that the working directory is the buildfiles directory created in the previous step, and looks for source files in the folder one level above the working directory.

    cmake \
    -G "Ninja" \
    -DCMAKE_TOOLCHAIN_FILE="<path to SDK>/CMakeFiles/AzureSphereRTCoreToolchain.cmake" \  
    -DARM_GNU_PATH:STRING="<path to RT core toolchain>" \
    -DAZURE_SPHERE_TARGET_API_SET="3+Beta1909" \
    --no-warn-unused-cli \
    -DCMAKE_BUILD_TYPE="Debug" \
    -DCMAKE_MAKE_PROGRAM="ninja" \ 
    <path to cloned samples repo>/azure-sphere-samples/Samples/HelloWorld/HelloWorld_RTApp_MT3620_BareMetal
    

    注意

    Windows の場合は、DCMAKE_TOOLCHAIN_FILE で C:/Program Files/<path to SDK>/CMakeFiles/AzureSphereRTCoreToolchain.cmake をポイントする必要があります。For Windows, the DCMAKE_TOOLCHAIN_FILE should point to C:/Program Files/<path to SDK>/CMakeFiles/AzureSphereRTCoreToolchain.cmake.

    すべてのプラットフォームで、DARM_GNU_PATH は、コンパイラの実行可能ファイル自体へのパスではなく、arm-none-eabi-gcc を含むディレクトリへのパスです。For all platforms, DARM_GNU_PATH is the path to the directory that contains the arm-none-eabi-gcc, and not the path to the compiler executable itself.

    特に CMake コマンドを変更した後にトラブルシューティングを行う場合は、ビルド全体を削除してから、やり直してください。When troubleshooting, especially after making any changes to your CMake commands, delete your entire build and try again.

  4. ninja を実行してアプリケーションをビルドし、イメージ パッケージ ファイルを作成します。Run ninja to build the application and create the image package file.

    ninja

  5. デバイスに既にデプロイされているアプリケーションをすべて削除します。Delete any applications that are already deployed to the device:

    azsphere device sideload delete

  6. ninja によって作成されたイメージ パッケージをデプロイします。Deploy the image package that ninja created:

    azsphere device sideload deploy --imagepackage <package-name>

  7. イメージのコンポーネント ID を取得します。Get the component ID for the image:

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

    このコマンドは、イメージ パッケージのすべてのメタデータを返します。The command returns all the metadata for the image package. アプリケーションのコンポーネント ID は、イメージの種類 Application の Identity セクションに表示されます。The component ID for the application appears in the Identity section for the Application Image Type. 次に例を示します。For example:

    Image package metadata:
    Section: Identity
    Image Type:           Application
    Component ID:         08fd36f7-4ef5-430b-8543-09acd7ea0d04
    Image ID:             12af5735-067e-4f3a-9341-6f2f8c7e3548
    
  8. アプリが実行されているコアを確認するDetermine which core your app is running on

    既定では、RTApp はデバイス上で使用可能な最初のリアルタイム コアに配置されます。現在特定のコアを指定することはできません。By default, the RTApp is deployed to the first available real-time core on the device; you cannot currently specify a particular core. アプリケーションがどのコアで実行されているかを確認するには、azsphere device app コマンドを使ってアプリケーションを停止してから再起動します。To find out which core the application is running on, use the azsphere device app command to stop and then restart the application. コマンドでアプリケーションのコンポーネント ID を指定します。Supply the component ID for the application in the commands. 次に例を示します。For example:

    azsphere device app stop --componentid d3b80666-feaf-433a-b294-6a5846853b4a`
    d3b80666-feaf-433a-b294-6a5846853b4a: App state: stopped
    
    azsphere device app start --componentid d3b80666-feaf-433a-b294-6a5846853b4a
    d3b80666-feaf-433a-b294-6a5846853b4a
    App state: running
    Core     : 0
    
    Command completed successfully in 00:00:01.8273541.
    
  9. 次の例に示すように openocd を実行します。Run openocd as the following example shows. この例は、アプリがコア 0 で実行されていると想定されています。The example assumes the app is running on core 0. アプリがコア 1 で実行されている場合は、"targets io0" を "targets io1" に置き換えます。If the app is running on core 1, replace "targets io0" with "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"
    
  10. アプリケーションの .out ファイルが格納されているフォルダーに移動し、ARM GNU Embedded Toolchain の一部である arm-none-eabi-gdb を起動します。Navigate to the folder that contains the application .out file and start arm-none-eabi-gdb, which is part of the ARM GNU Embedded Toolchain:

    <ARM GNU toolchain path>/arm-none-eabi-gdb HelloWorld_RTApp_MT3620_BareMetal.out
    
  11. OpenOCD サーバーにより、3333 上に GDB サーバー インターフェイスが提供されます。The OpenOCD server provides a GDB server interface on :3333. デバッグのターゲットを設定します。Set the target for debugging.

    target remote :3333

  12. 選択したいずれかの gdb コマンドを発行します。Issue whatever gdb commands you choose.

  13. 接続されているターミナル エミュレーターに、アプリケーションからの出力が表示されます。The connected terminal emulator should display output from the application. プログラムでは、1 秒間隔で次の単語が送信されます。The program sends the following words at one-second intervals:

    Tick

    Tock

RTApp からのログ出力Log output from an RTApp

MT3620 上の各リアルタイム コアには、ログ出力用の専用 UART があります。Each real-time core on the MT3620 has a dedicated UART that is intended for logging output. (リアルタイム コアでは ISU UART にもアクセスできます。)MT3620 RDB では TX ピンのみが公開されており、それを使ってアプリケーションからのログ出力を表示できます。(The real-time cores can also access the ISU UARTs.) The MT3620 RDB exposes only the TX pin, which you can use to display logging output from the application. 他のハードウェアでは、異なる方法で公開されている場合、またはまったく公開されていない場合があります。Other hardware may expose this differently, or not at all. ログ出力を表示するには、クイックスタートの説明に従って、この出力を表示するようにハードウェアを設定します。To see the log output, set up your hardware to display this output as described in the quickstart. 専用の UART は Uart アプリケーション マニフェスト要件を必要としません。ただし、RTApp の出力のログ記録以外の目的には使用しないでください。The dedicated UART doesn't require the Uart application manifest requirement; however, it shouldn't be used for purposes other than logging output for an RTApp.

RTApp をデバッグするDebug an RTApp

RTApp は GDB と OpenOCD を使ってデバッグされます。これらは、Azure Sphere SDK でインストールされます。RTApps are debugged using GDB and OpenOCD, which are installed with the Azure Sphere SDK.

Visual Studio で RTApp をデバッグするDebug RTApp with Visual Studio

Visual Studio では、プロジェクトの launch.vs.json ファイルからの情報を使って、デバッグ ツールが構成されます。Visual Studio uses information from the launch.vs.json file in your project to configure the debugging tools. サンプルのいずれかで始めた場合、このようなファイルは既にあります。If you start with one of the samples, you already have such a file. このファイルが存在しない場合は、Visual Studio でデバッグと起動の設定を行うと作成されます。If this file is not present, Visual Studio creates it when you set Debug and Launch settings:

  • ソリューション エクスプローラーで、対象のアプリケーションを右クリックし、[デバッグ設定と起動設定] を選択してから、[Launch for Azure Sphere RTApps (gdb)](Azure Sphere RTApps (gdb) 用の起動) を選択します。In Solution Explorer, right-click the target application, select Debug and Launch settings, and then Launch for Azure Sphere RTApps (gdb).

  • [選択] を選択して、アプリケーション用の launch.vs.json ファイルを作成します。Choose Select to create the launch.vs.json file for your application.

  • launch.vs.json ファイルでは、"configurations" フィールドで project値を設定します。In the launch.vs.json file, set the project value in the "configurations" field:

    "project": "CMakeLists.txt"

Visual Studio により GDB サーバーと OpenOCD の間の接続が設定されて、高度なアプリと同じように、RTApp で Visual Studio の標準デバッグ インターフェイス (F5、F6、ブレークポイント用の F9 など) を使用できるようになります。Visual Studio sets up connections between the GDB server and OpenOCD so that you can use the standard Visual Studio debugging interface (F5, F6, F9 for breakpoints and so forth) on an RTApp, in the same way as on a high-level app.

VS Code で RTApp をデバッグするDebug RTApp with VS Code

F5 キーを押すか、左側のバーの [デバッグ] ビューからデバッグ コマンドを実行することで、VS Code をデバッグします。VS Code is debugged by pressing F5 or running the debug command from the debug view on the left bar. サンプルには .vscode/launch.json が既に存在するため、デバッグはすぐに開始されます。In the samples, the .vscode/launch.json already exists, so debugging will immediately start. 新しいアプリのデバッグでは、これが HLApp であるか RTApp であるかの確認から始まり、確認に対する回答から .vscode/launch.json が作成されます。In a new app, debugging will first ask whether this is an HLApp or RTApp, and create a .vscode/launch.json from your answer. その後、デバッグが有効になります。Debugging will then be enabled.

注意

MT3620 RDB ハードウェアを使用していない場合は、正しい UART (例: ISU1) を指定するように app_manifest.json ファイルとサンプル コードを更新します。If you're not using MT3620 RDB hardware, update the app_manifest.json file and the sample code to specify the correct UART, for example ISU1.

CLI を使用して RTApp をデバッグするDebug RTApp using the CLI

  1. デバッグのためにアプリケーションを起動します。Start the application for debugging:

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

    このコマンドは、アプリケーションが実行中のコアを返します。This command returns the core on which the application is running.

  2. アプリケーションのビルドに使用された、Openocd フォルダー内の sysroot に移動します。Navigate to the Openocd folder for the sysroot that the application was built with. このクイック スタートでは、sysroot は 3+Beta1909 です。In this Quickstart, the sysroot is 3+Beta1909. sysroot は、Azure Sphere SDK インストール フォルダーにインストールされます。The sysroots are installed in the Azure Sphere SDK installation folder. たとえば、Windows では、フォルダーは既定で C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\3+Beta1909\tools\openocd にインストールされ、Linux では /opt/azurespheresdk/Sysroots/3+Beta1909/tools/sysroots/x86_64-pokysdk-linux/usr/bin/openocd にインストールされます。For example, on Windows the folder is installed by default at C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\3+Beta1909\tools\openocd and on Linux, at /opt/azurespheresdk/Sysroots/3+Beta1909/tools/sysroots/x86_64-pokysdk-linux/usr/bin/openocd.

  3. 次の例に示すように openocd を実行します。Run openocd as the following example shows. この例は、アプリがコア 0 で実行されていると想定されています。The example assumes the app is running on core 0. アプリがコア 1 で実行されている場合は、"targets io0" を "targets io1" に置き換えます。If the app is running on core 1, replace "targets io0" with "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"

  4. アプリケーションの .out ファイルが格納されているフォルダーに移動し、ARM GNU Embedded Toolchain の一部である arm-none-eabi-gdb を起動します。Navigate to the folder that contains the application .out file and start arm-none-eabi-gdb, which is part of the ARM GNU Embedded Toolchain:

    <ARM GNU toolchain path>/arm-none-eabi-gdb HelloWorld_RTApp_MT3620_BareMetal.out

  5. OpenOCD サーバーにより、4444 上に GDB サーバー インターフェイスが提供されます。The OpenOCD server provides a GDB server interface on :4444. デバッグのターゲットを設定します。Set the target for debugging.

    target remote :4444

  6. 選択したいずれかの gdb コマンドを発行します。Issue whatever gdb commands you choose.

    注意

    このリリースでは、CMake を実行するコマンドのブレークポイントは Windows のみを対象としています。For this release, the breakpoint in the command to run CMake is for Windows only.

トラブルシューティングTroubleshooting

問題が発生した場合は、「リアルタイム対応アプリケーションのトラブルシューティング」をご覧ください。If you encounter problems, see Troubleshooting real-time capable applications.