生成支持实时的应用程序
重要
这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。
可以使用 Visual Studio、Visual Studio Code 或命令行 (CLI) 以与高级应用程序相同的方式开发和调试支持实时的应用程序 (RTApp)。
先决条件
- 将 Azure Sphere 设备连接到计算机
- 安装 Azure Sphere
- 安装 GNU Arm Embedded 工具链
- 设置硬件以显示专用 UART 的输出 (如果尚未这样做)
启用开发和调试
在 Azure Sphere 设备上生成示例应用程序或为其开发新应用程序前,必须启用开发和调试。 默认情况下,Azure Sphere 设备处于“锁定”状态;也就是说,这些设备不允许从电脑加载开发中的应用程序,并且不允许调试应用程序。 对设备进行调试准备可消除此限制、加载调试所需的软件,以及解锁设备功能,如设备功能和通信中所述。
若要在实时核心上进行调试,请使用 azsphere device enable-development 命令。 此命令将设备配置为接受来自电脑的应用程序进行调试,并将设备分配给开发设备组,而开发设备不允许云应用程序更新。 在应用程序开发和调试期间,应将设备保留在该组中,以便云应用程序更新不会覆盖开发中的应用程序。
在 Windows 上,必须添加参数 --enable-rt-core-debugging
,该参数将调试服务器和每种核心类型所需的驱动程序加载到设备上。
如果尚未登录 Azure Sphere,请执行以下操作:
azsphere login
使用 PowerShell 或具有管理员权限的 Windows 命令提示符打开命令行界面。 该
--enable-rt-core-debugging
参数需要管理员权限,因为它为调试器安装 USB 驱动程序。输入以下命令:
azsphere device enable-development --enable-rt-core-debugging
命令完成后关闭窗口,因为不再需要管理员权限。 作为最佳做法,应始终使用可以完成任务的最低权限。
如果 azsphere device enable-development 命令失败,请参阅排查 Azure Sphere 问题以获取帮助。
启用开发和调试
在 Azure Sphere 设备上生成示例应用程序或为其开发新应用程序前,必须启用开发和调试。 默认情况下,Azure Sphere 设备处于“锁定”状态;也就是说,这些设备不允许从电脑加载开发中的应用程序,并且不允许调试应用程序。 对设备进行调试准备可消除此限制、加载调试所需的软件,以及解锁设备功能,如设备功能和通信中所述。
若要在实时核心上进行调试,请使用 azsphere device enable-development 命令。 此命令将设备配置为接受来自电脑的应用程序进行调试,并将设备分配给开发设备组,而开发设备不允许云应用程序更新。 在应用程序开发和调试期间,应将设备保留在该组中,以便云应用程序更新不会覆盖开发中的应用程序。
在 Windows 上,必须添加参数 --enable-rt-core-debugging
,该参数将调试服务器和每种核心类型所需的驱动程序加载到设备上。
如果尚未登录 Azure Sphere,请执行以下操作:
azsphere login
使用具有管理员权限的 PowerShell、Windows 命令提示符或 Linux 命令行界面打开命令行界面。 该
--enable-rt-core-debugging
参数需要管理员权限,因为它为调试器安装 USB 驱动程序。输入以下命令:
azsphere device enable-development --enable-rt-core-debugging
命令完成后关闭窗口,因为不再需要管理员权限。 作为最佳做法,应始终使用可以完成任务的最低权限。
如果 azsphere 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 'azsphere device show-deployment-status'.
使用 Visual Studio Code 生成 RTApp
若要生成 RTApp:
在 Visual Studio Code 中,打开 Azure Sphere 示例存储库克隆中的 HelloWorld_RTApp_MT3620_BareMetal 文件夹。 如果系统提示你选择工具包,请选择“不使用工具包。”
按 F5 启动调试器。 如果以前未生成项目,或者文件已更改且需要重新生成,则 Visual Studio Code 会在调试开始之前生成项目。
已连接的终端仿真器应显示应用程序的输出。 该程序以一秒为间隔发送以下关键字:
Tick
Tock
注意
Visual Studio Code 提供了 Intellisense,但在修改 CMakeLists.txt 时它不会自动更新。 需要运行 CMake:删除缓存并重新配置 命令以刷新 Intellisense。 可以在左侧栏的 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 部署应用程序。
已连接的终端仿真器应显示应用程序的输出。 该程序以一秒为间隔发送以下关键字:
Tick
Tock
注意
Visual Studio 通过从其 CMake 缓存中收集数据,为 Azure Sphere RTApps 提供 Intellisense。 只要 RTApp 中的 CMakeLists.txt 或 CMakeSettings.json 文件发生更改,Visual Studio 就会更新缓存。
默认情况下,Visual Studio 使用文件夹视图。 如果你更喜欢 CMake 项目的逻辑视图,则可以切换到 CMake 目标视图。 在解决方案资源管理器中,选择文件夹切换图标:
从下拉菜单中选择 “CMake 目标视图”。
应用程序可能在 OpenOCD 建立连接之前就已开始执行。 因此,在代码早期设置的断点可能会丢失。 此问题的一个简单的解决方法是在 OpenOCD 连接之前延迟应用程序的启动。
在应用程序入口点 RTCoreMain 的开头插入以下代码。 此操作将导致应用程序进入并保持在
while
循环中,直到变量f
设置为 true。volatile bool f = false; while (!f) { // empty. }
按 F5 通过调试启动应用,然后中断执行。
在“ 局部变量 调试”窗格中,将值
f
从零更改为 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>
设置为
<binary-dir>
包含 CMake 缓存的二进制目录。 例如,如果在 Azure Sphere 示例中运行 CMake,则生成命令将是cmake --build out/ARM-Debug
。删除已部署到设备的所有应用程序:
azsphere device sideload delete
部署 Ninja 创建的映像包:
azsphere device sideload deploy --image-package <package-name>
获取映像的组件 ID:
azsphere image-package show --image-package <path-to-imagepackage>
该命令返回映像包的所有元数据。 应用程序的组件 ID 显示在应用程序映像类型的“标识”部分中。 例如:
Image package metadata: Section: Identity Image Type: Application Component ID: <component id> Image ID: <image id>
确定应用正在运行的核心。
默认情况下,RTApp 将部署到设备上第一个可用的实时核心;你当前不能指定特定核心。 要找出运行应用程序的核心,请使用 azsphere device app 命令停止,然后重启应用程序。 在命令中提供应用程序的组件 ID。 例如:
azsphere device app stop --component-id <component id> <component id>: App state: stopped
azsphere device app start --component-id <component id> <component id> App state: running Core : Real-time 0
已连接的终端仿真器应显示应用程序的输出。 该程序以一秒为间隔发送以下关键字:
Tick
Tock
RTApp 日志输出
MT3620 上的每个实时核心都有一个专用 UART,用于日志记录输出。 实时核心还可以访问 ISU UART。 MT3620 RDB 仅公开 TX 引脚,可用于显示应用程序的日志输出。 其他硬件可能会以不同方式公开,或者根本不公开。 若要查看日志输出,请按照快速入门中的说明设置硬件以显示此输出。 专用 UART 不需要 Uart
应用程序清单要求。但应仅将其用于记录 RTApp 的输出。
使用合作伙伴应用进行开发
当你将应用程序加载到 Azure Sphere 设备上时,默认情况下 Azure Sphere 部署工具会删除所有现有应用程序。 若要防止在开发相互通信的应用程序时发生这种情况,需要将应用程序 标记为合作伙伴。 部署其中一个应用程序时,不会删除其合作伙伴。 有关详细信息,请参阅将应用程序标记为合作伙伴。
故障排除
如果遇到问题,请参阅对支持实时的应用程序进行故障排除。
其他资源
面向 MT3620 芯片上的 M4 实时核心的 RTApps 的其他驱动程序和示例可从 Azure Sphere 合作伙伴的 GitHub 上获取: