与高级应用程序通信

支持实时的应用程序 (RTApps) 映射到共享内存区域的环形缓冲区与高级应用程序通信。

IntercoreComms 示例展示了 RTApps 如何与高级应用程序通信。 使用 IntercoreComms_RTApp_MT3620_BareMetal 示例作为开发自己的 RTApp 通信代码的起点。 有关高级应用程序中所需的代码的信息,请参阅 与支持实时的应用程序通信

重要

有关注册地址和其他特定于硬件的详细信息,请通过电子邮件 Azure.Sphere@avnet.com请求“MT3620 M4 程序员指南”。

操作

从 RTApp 的角度来看,与高级应用程序的通信涉及以下基本操作:

  • 从它与 MT3620 上的高级核心共享的邮箱读取设置信息
  • 将数据读取和写入共享内存

初始化缓冲区大小和指针

RTApp 通过实时和高级核心共享的邮箱中的三条消息接收有关环形缓冲区的信息。 每条消息都包含一个命令和数据。 前两条消息提供应用程序将用于通信的读取和写入缓冲区的基址;第三条消息指示缓冲区的设置信息的传输已完成。

命令值 数据
0xba5e0001 RTApp 的出站 (写入) 缓冲区描述符
0xba5e0002 RTApp 的入站 (读取) 缓冲区描述符
0xba5e0003 设置结束

RTApp 计算读取和写入缓冲区的大小,并根据缓冲区描述符中的数据设置指向每个缓冲区的初始位置的指针。

有关如何使用邮箱的其他详细信息,请参阅IntercoreComms_RTApp_MT3620_BareMetal示例。

从缓冲区读取和写入

初始化后,RTApp 可以从缓冲区读取和写入缓冲区。 由于通信是使用环形缓冲区实现的,因此读取和写入操作都可以环绕到缓冲区的开头。

写入缓冲区或从缓冲区读取的消息具有以下结构:

邮件头 消息内容
组件 ID 保留
16 字节 4 字节
数据
0 - 1 KB
  • 消息头的第一个字段 (16 个字节) 包含高级应用的组件 ID。

    如果 RTApp 正在启动与高级应用的通信,请确保组件 ID 的前 3 个段中每个字节的排序都是小端 (最小有效字节的第一个) 。 其余两个段中的字节顺序必须为 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 部署工具默认会删除所有现有应用程序。 若要防止在开发相互通信的应用程序时发生这种情况,需要将应用程序标记为 合作伙伴。 部署其中一个应用程序时,不会删除其伙伴。 有关详细信息 ,请参阅将应用程序标记为合作伙伴