创建合作伙伴应用程序

创建新的合作伙伴应用程序对的最简单方法是创建一个顶级目录,以包含支持高级和实时的应用程序,然后依次创建支持高级和实时的应用。

创建高级应用

若要创建高级应用程序,请从 Visual Studio Code Azure Sphere 扩展中的 HLCore 空白模板开始,然后按照以下步骤调整项目的配置:

  1. 启动Visual Studio Code。 选择“ 查看>命令”面板,然后键入“Azure Sphere:生成新项目”。

    Visual Studio 代码中的命令栏

  2. 从“模板”菜单中选择“HLCore 空白”。

    带有模板名称的弹出菜单

  3. Visual Studio Code然后显示文件资源管理器窗口。 导航到要在其中放置空白应用程序的文件夹 (或选择“新建文件夹”,) 创建新的顶级合作伙伴项目目录,并为项目指定名称,例如 NewHLApp。 Visual Studio Code在所选位置创建 NewHLApp 文件夹,并为空白应用程序生成生成文件。 应会看到来自 CMake 的消息。

  4. 打开 CMakeLists.txt 文件,并指定包含正在使用的硬件定义的文件夹。 默认情况下,HLCore 空白应用程序不包含任何硬件定义。 可以在 Azure Sphere 示例存储库中找到 示例硬件定义 ,或创建一个,如 硬件定义中所述。

    下面演示如何为 Seeed Azure Sphere MT3620 开发工具包添加示例硬件定义:

    azsphere_target_hardware_definition(${PROJECT_NAME} TARGET_DIRECTORY "HardwareDefinitions/mt3620_rdb" TARGET_DEFINITION "sample_appliance.json")

    应在最后一个命令开始 azsphere_target_add_image_package之前插入此行。

还可以根据任何高级 Azure Sphere 示例创建新的高级应用程序:

  1. 克隆 示例存储库 (如果尚未这样做)。 复制其中一个高级应用程序文件夹,并将其重命名为项目。

  2. 在 CMakeLists.txt 文件中,将项目名称更改为新文件夹的名称。 例如:

    PROJECT(NewHLApp C)

创建 RTApp

若要创建新的实时应用程序,请从 Visual Studio Code Azure Sphere 扩展中的 RTCore 空白模板开始,然后按照以下步骤调整项目的配置:

  1. 启动Visual Studio Code。 选择“ 查看>命令”面板,然后键入“Azure Sphere:生成新项目”。

    Visual Studio 代码中的命令栏

  2. 从“模板”菜单中选择“RTCore 空白”。

    带有模板名称的弹出菜单

  3. Visual Studio Code然后显示文件资源管理器窗口。 导航到包含高级应用程序文件夹的文件夹,并为项目指定名称,例如 NewRTApp。 Visual Studio Code在所选位置创建 NewRTApp 文件夹,并为空白应用程序生成生成文件。 应会看到来自 CMake 的消息。

还可以根据任何支持实时的 Azure Sphere 示例创建新的支持实时的应用程序:

  1. 克隆 示例存储库 (如果尚未这样做)。 复制其中一个高级应用程序文件夹,并将其重命名为项目。

  2. 在 CMakeLists.txt 文件中,将项目名称更改为新文件夹的名称。 例如:

    PROJECT(NewRTApp C)

为合作伙伴应用开发配置工作区

若要有效地将高级应用程序和支持实时的应用程序加入开发,请将两个应用程序合并到单个多根工作区中,如下所示:

  1. 在 Visual Studio Code 中打开高级应用程序文件夹。

  2. 选择“ 文件>将文件夹添加到工作区”,然后选择支持实时的应用程序文件夹。

  3. 选择“ >工作区另存为...”,然后将文件保存在包含支持实时和高级应用程序的文件夹中。

  4. 在文本编辑器中打开工作区文件,并在 行后面 "settings" 立即添加以下启动信息:

    "launch": {
        "configurations": [{
            "name": "Launch Azure Sphere Apps (All Cores)",
            "type": "azurespheredbg",
            "request": "launch",
            "args": [],
            "stopAtEntry": false,
            "environment": [],
            "externalConsole": true,
            "partnerComponents": [],
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }],
        "compounds": []
    }

有关多根工作区的详细信息,请参阅Visual Studio Code文档

创建高级应用

若要创建新的高级应用程序,请从 Visual Studio Azure Sphere 扩展中的 HLCore 空白模板开始,然后按照以下步骤调整项目的配置:

  1. 启动 Visual Studio 并选择“ 创建新项目”。

  2. Azure Sphere在标记为“搜索模板”的搜索框中键入。 从返回的列表中选择“ Azure Sphere HLCore 空白 ”,然后选择“ 下一步”。

  3. 指定项目名称 (例如 NewHLApp) 、项目文件位置和解决方案名称 (可以与) 的项目名称相同,然后选择“ 创建”。 Visual Studio 在所选位置创建 NewHLpp 文件夹,并为空白应用程序生成生成文件。 应会看到来自 CMake 的消息。

  4. 打开 CMakeLists.txt 文件,并指定包含正在使用的硬件定义的文件夹。 默认情况下,HL 空白应用程序不包含硬件定义。 可以在 Azure Sphere 示例存储库中找到 示例硬件定义 ,或创建一个,如 硬件定义中所述。

    下面演示如何为 Seeed Azure Sphere MT3620 开发工具包添加示例硬件定义:

    azsphere_target_hardware_definition(${PROJECT_NAME} TARGET_DIRECTORY "HardwareDefinitions/mt3620_rdb" TARGET_DEFINITION "sample_appliance.json")

    应在最后一个命令开始 azsphere_target_add_image_package之前插入此行。

还可以根据任何高级 Azure Sphere 示例创建新的高级应用程序:

  1. 克隆 示例存储库 (如果尚未这样做)。 复制其中一个高级应用程序文件夹,并将其重命名为项目。

  2. 在 CMakeLists.txt 文件中,将项目名称更改为新文件夹的名称。 例如:

    PROJECT(NewHLApp C)

创建 RTApp

若要创建新的支持实时的应用程序,请从 Visual Studio Azure Sphere 扩展中的 RTCore 空白模板开始,然后按照以下步骤调整项目的配置:

  1. 启动 Visual Studio 并选择“ 创建新项目”。

  2. Azure Sphere在标记为“搜索模板”的搜索框中键入。 从返回的列表中选择“ Azure Sphere RTCore 空白 ”,然后选择“ 下一步”。

  3. 指定项目名称 (例如 NewRTApp) 、项目文件位置和用于高级应用程序的解决方案名称,然后选择“ 创建”。 Visual Studio 在所选位置创建 NewRTApp 文件夹,并为空白应用程序生成生成文件。 应会看到来自 CMake 的消息。

还可以根据任何支持实时的 Azure Sphere 示例创建新的支持实时的应用程序:

  1. 克隆 示例存储库 (如果尚未这样做)。 复制支持实时的应用程序文件夹之一,并将其重命名为项目。

  2. 在 CMakeLists.txt 文件中,将项目名称更改为新文件夹的名称。 例如:

    PROJECT(NewRTApp C)

创建顶级 Visual Studio 启动文件

若要同时使用合作伙伴应用程序,需要允许 Visual Studio 调试到多个核心。 可以通过在包含两个合作伙伴应用程序文件夹的顶级文件夹中创建 launch.vs.json 文件来启用此功能。 此文件的内容应如下所示:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "azurespheredbg",
      "name": "Azure Sphere Apps (All Cores)",
      "project": "PartnerAppsHL/CMakeLists.txt",
      "DebugBuildStepBuildAll": "true",
      "workingDirectory": "${workspaceRoot}",
      "applicationPath": "${debugInfo.target}",
      "imagePath": "${debugInfo.targetImage}",
      "targetCore": "AnyCore",
      "partnerComponents": [ "0cc81b35-08dd-4d65-b318-5fa73a4ff6b1", "a9d25f0a-807e-4cb9-80e8-80fee5a1bcb4" ]
    }
  ]
}

"project" 行应包含高级应用程序的 CMakeLists.txt 文件的相对路径,并且该 "partnerComponents" 行应包含两个合作伙伴应用程序的组件 ID。

创建此顶级 launch.vs.json 文件后,可以在顶级文件夹中打开 Visual Studio,并在“选择启动项”菜单中看到“Azure Sphere 应用 (所有核心) ”选项。

创建 CMakeWorkspaceSettings.json 文件

如果使用 Visual Studio 2022 版本 17.1 或更高版本,并且项目具有多个根,例如 IntercoreComms 示例,则需要将 CMakeWorkspaceSettings.json 文件添加到项目的顶级文件夹。 该文件有两个条目,一个用于指定启用 CMake 生成,一个条目包含指向多个根的路径。 例如,对于 IntercoreComms 示例,CMakeWorkspaceSettings.json 包含以下内容:

{
  "enableCMake": true,
  "sourceDirectory": [ "IntercoreComms_HighLevelApp", "IntercoreComms_RTApp_MT3620_BareMetal" ]
}

路径是相对于包含 CMakeWorkspaceSettings.json 文件的文件夹指定的。

创建高级应用

若要创建新的高级应用程序,请从任何高级 Azure Sphere 示例开始:

  1. 克隆 示例存储库 (如果尚未这样做)。 复制其中一个高级应用程序文件夹,并将其重命名为项目。

  2. 在 CMakeLists.txt 文件中,将项目名称更改为新文件夹的名称。 例如:

    PROJECT(NewHLApp C)

创建 RTApp

创建支持实时的新应用程序的最简单方法是从 HelloWorld_RTApp_MT3620_BareMetal示例 开始,然后按照以下步骤调整项目的配置:

  1. 克隆 示例存储库 (如果尚未这样做)。 复制 HelloWorld_RTApp_MT3620_BareMetal 文件夹,并将其重命名为项目。

  2. 在 CMakeLists.txt 文件中,将项目名称更改为新文件夹的名称。 例如:

    PROJECT(NewRTApp C)

Azure Sphere 应用程序的基本文件结构

无论如何创建应用程序,所有 Azure Sphere 应用程序都共享以下核心文件:

  • 一个或多个文件中的应用程序源代码。 目前,仅支持 C 语言源代码。
  • CMake 生成文件。 需要 CMakeLists.txt。 CMake 与 ninja 轻型生成实用工具一起用于控制 Azure Sphere 应用程序生成过程。
  • 描述应用程序可用功能 的应用清单 文件。

高级应用程序通常至少有三个其他文件:

  • 一个 applibs-versions.h 文件,用于指定各种 Azure Sphere API 的版本级别
  • 两个硬件定义文件 (JSON 格式的可编辑版本,以及从其生成的 C 语言包含文件) ,该文件提供了一种在代码中引用硬件组件的便捷方式。 使用一组一致的硬件定义文件,可以编写独立于硬件的源代码,然后只需在 CMakeLists.txt 文件中重新定位相应的硬件定义文件,即可为特定硬件生成应用程序映像。

支持实时的应用程序至少添加另一个文件:linker.ld 文件,用于指定应用程序的各个组件在实时核心上加载的位置。

编写高级应用代码

  1. 使用 Azure Sphere 高级应用示例作为指南编写高级应用程序代码。 以下主题介绍特定的实现方案:
  2. CMakeLists.txt 文件中
    • 指定 Azure Sphere SDK 工具修订版
    • 指定目标 API 集
    • 指定目标硬件
  3. app_manifest.json 文件中
    • 将 设置为 Name 项目名称。
    • 添加代码所需的任何特定于应用程序的功能,例如硬件资源或连接。 如果高级应用与 RTApp 通信,请将高级应用程序的组件 ID 添加到 AllowedApplicationConnections 功能。
  1. 如果要将 RTApp 与高级合作伙伴应用一起部署,请将合作伙伴的组件 ID 添加到 launch.vs.json 的配置部分的 partnerComponents 字段, ( Visual Studio) 或 .vscode/launch.json (Visual Studio Code) 文件:

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

编写 RTApp 代码

  1. 使用 Azure Sphere RTApp 示例作为指南编写 RTApp 代码。 以下主题介绍特定的实现方案:
  2. app_manifest.json 文件中
    • 将 设置为 Name 项目名称,
    • 设置为ApplicationType"RealTimeCapable"
    • 添加代码所需的任何特定于应用程序的功能,例如硬件资源或连接。 如果 RTApp 与高级应用通信,请将高级应用程序的组件 ID 添加到 AllowedApplicationConnections 功能。
  1. 如果要将 RTApp 与高级合作伙伴应用一起部署,请将合作伙伴的组件 ID 添加到 launch.vs.json 的配置部分的 partnerComponents 字段, ( Visual Studio) 或 .vscode/launch.json (Visual Studio Code) 文件:

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

另请参阅