与高级应用程序进行通信
重要
这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。
支持实时的应用程序 (RTApps) 通过映射到共享内存区域的环形缓冲区与高级应用程序进行通信。
IntercoreComms 示例演示了 RTApps 如何与高级应用程序进行通信。 使用 IntercoreComms_RTApp_MT3620_BareMetal 示例作为开发自己的 RTApp 通信代码的起点。 有关高级应用程序所需代码的信息,请参阅与支持实时的应用程序进行通信。
重要
有关注册地址和其他特定于硬件的详细信息,请通过电子邮件 Azure.Sphere@avnet.com请求“MT3620 M4 程序员指南”。
操作
从 RTApp 的角度来看,与高级应用程序进行通信包含以下基本操作:
- 从与 MT3620 上的高级核心共享的邮箱中读取设置信息
- 从共享内存读取和写入数据
初始化缓冲区大小和指针
RTApp 通过实时和高级核心共享的邮箱中的三条消息接收有关环形缓冲区的信息。 每条消息都包含一个命令和数据。 前两条消息提供读取和写入缓冲区的基址,应用程序将使用这两个缓冲区进行通信;第三条消息表示缓冲区的设置信息的传输已完成。
命令值 | Data |
---|---|
0xba5e0001 | RTApp 的出站(写入)缓冲区描述符 |
0xba5e0002 | RTApp 的入站(读取)缓冲区描述符 |
0xba5e0003 | 设置结束 |
RTApp 计算读取和写入缓冲区的大小,并根据缓冲区描述符中的数据设置指向每个缓冲区初始位置的指针。
有关如何使用邮箱的其他详细信息,请参阅 IntercoreComms_RTApp_MT3620_BareMetal 示例。
从缓冲区读取和写入数据
初始化后,RTApp 可以从缓冲区读取和写入数据。 由于通信是使用环形缓冲区实现的,因此读取和写入都可以包含在缓冲区的开头。
写入缓冲区或从缓冲区读取的消息具有以下结构:
消息标头 | 消息内容 | ||||||
---|---|---|---|---|---|---|---|
|
|
消息头的第一个字段(16 个字节)包含高级别应用的组件 ID。
如果 RTApp 正在启动与高级应用的通信,请确保组件 ID 的前 3 段中的每段中的字节顺序为 little-endian(最不重要的字节最先出现)。 其余两个段中的字节顺序必须是 big-endian。
如果 RTApp 正在响应来自高级应用的消息,只需将源消息中的组件 ID 复制到响应消息的标头。
消息头的第二个字段(4 个字节)当前已保留,并且必须包含 0。
消息标头始终与 16 个字节的边界对齐。
目前,消息内容最大可为 1 KB。
在对缓冲区执行每次读取或写入操作后,RTApp 使用共享邮箱通知高级应用程序它已收到或传输了一条消息。
应用程序清单设置
RTApp 和高级应用程序的应用程序清单都必须列出与之通信的应用程序的组件 ID。 要配置此设置,请将 AllowedApplicationConnections
功能添加到应用程序清单,然后将每个组件 ID 添加到该功能中。 Azure Sphere 应用程序清单 具有更多详细信息。 以下是应用程序清单的摘录,该清单配置 RTApp 以与另一个应用程序通信。
"AllowedApplicationConnections": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
合作伙伴应用程序
当你将应用程序加载到 Azure Sphere 设备上时,默认情况下 Azure Sphere 部署工具会删除所有现有应用程序。 若要防止在开发相互通信的应用程序时发生这种情况,需要将应用程序 标记为合作伙伴。 部署其中一个应用程序时,不会删除其合作伙伴。 有关详细信息,请参阅将应用程序标记为合作伙伴。