生成支持实时的应用程序
可以使用 Visual Studio、Visual Studio Code 或命令行 (CLI) 开发和调试支持实时的应用程序, (RTApps) 的方式与高级应用程序大致相同。
先决条件
- 将 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: Delete Cache and Reconfigure 命令来刷新 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 部署工具默认会删除所有现有应用程序。 若要防止在开发相互通信的应用程序时发生这种情况,需要将应用程序标记为 合作伙伴。 部署其中一个应用程序时,不会删除其伙伴。 有关详细信息 ,请参阅将应用程序标记为合作伙伴 。
故障 排除
如果遇到问题,请参阅 对支持实时的应用程序进行故障排除。
其他资源
Azure Sphere 合作伙伴的 GitHub 上提供了面向 MT3620 芯片上的 M4 实时核心的 RTApps 的其他驱动程序和示例: