Comunicar-se com um aplicativo de alto nível
Os RTApps (aplicativos com capacidade em tempo real) se comunicam com aplicativos de alto nível por meio de um buffer de anel mapeado para uma região compartilhada de memória.
Os exemplos do IntercoreComms mostram como os RTApps podem se comunicar com aplicativos de alto nível. Use o exemplo IntercoreComms_RTApp_MT3620_BareMetal como ponto de partida para desenvolver seu próprio código de comunicação RTApp. Consulte Comunicar-se com um aplicativo capaz em tempo real para obter informações sobre o código necessário em um aplicativo de alto nível.
Importante
Para obter informações sobre endereços de registro e outros detalhes específicos do hardware, solicite o "Guia do Programador MT3620 M4" por email Azure.Sphere@avnet.com.
Operação
Na perspectiva do RTApp, a comunicação com um aplicativo de alto nível envolve as seguintes operações básicas:
- Lendo informações de configuração da caixa de correio que ela compartilha com o núcleo de alto nível no MT3620
- Leitura e gravação de dados na memória compartilhada
Inicializar tamanhos de buffer e ponteiros
O RTApp recebe informações sobre o buffer de anel por meio de três mensagens na caixa de correio que os núcleos em tempo real e de alto nível compartilham. Cada mensagem contém um comando e dados. As duas primeiras mensagens fornecem os endereços base dos buffers de leitura e gravação que os aplicativos usarão para se comunicar; a terceira mensagem indica que a transmissão de informações de instalação para os buffers está concluída.
Valor de comando | Dados |
---|---|
0xba5e0001 | Descritor de buffer de saída (gravação) para o RTApp |
0xba5e0002 | Descritor de buffer de entrada (leitura) para o RTApp |
0xba5e0003 | Fim da configuração |
O RTApp calcula o tamanho dos buffers de leitura e gravação e configura ponteiros para a posição inicial de cada buffer com base nos dados nos descritores de buffer.
Consulte o exemplo IntercoreComms_RTApp_MT3620_BareMetal para obter mais detalhes sobre como usar a caixa de correio.
Ler e gravar nos buffers
Após a inicialização, o RTApp pode ler e gravar nos buffers. Como a comunicação é implementada com um buffer de anel, leituras e gravações podem ser encapsuladas até o início do buffer.
As mensagens escritas ou lidas do buffer têm a seguinte estrutura:
Cabeçalho de mensagem | Conteúdo da mensagem | ||||||
---|---|---|---|---|---|---|---|
|
|
O primeiro campo do cabeçalho de mensagem (16 bytes) contém a ID do componente do aplicativo de alto nível.
Se o RTApp estiver iniciando a comunicação com o aplicativo de alto nível, verifique se a ordenação de bytes em cada um dos três primeiros segmentos da ID do componente será pouco endiana (byte menos significativo primeiro). A ordenação dos bytes nos dois segmentos restantes deve ser big-endian.
Se o RTApp estiver respondendo a uma mensagem do aplicativo de alto nível, basta copiar a ID do componente na mensagem de origem para o cabeçalho da mensagem de resposta.
O segundo campo do cabeçalho de mensagem (4 bytes) está reservado no momento e deve conter 0s.
O cabeçalho da mensagem está sempre alinhado em um limite de 16 bytes.
Atualmente, o conteúdo da mensagem pode ter no máximo 1 KB de tamanho.
Após cada operação de leitura ou gravação no buffer, o RTApp usa a caixa de correio compartilhada para notificar o aplicativo de alto nível que recebeu ou transmitiu uma mensagem.
Configurações do manifesto do aplicativo
Os manifestos do aplicativo para o RTApp e o aplicativo de alto nível devem listar as IDs de componente dos aplicativos com os quais eles se comunicam. Para configurar essa configuração, adicione o AllowedApplicationConnections
recurso ao manifesto do aplicativo e adicione cada ID do componente ao recurso.
O manifesto do aplicativo Azure Sphere tem mais detalhes. Aqui está um trecho de um manifesto de aplicativo que configura um RTApp para se comunicar com um outro aplicativo.
"AllowedApplicationConnections": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
Aplicativos parceiros
Quando você carrega um aplicativo no dispositivo do Azure Sphere, as ferramentas de implantação do Azure Sphere, por padrão, excluem todos os aplicativos existentes. Para evitar que isso aconteça quando você desenvolve aplicativos que se comunicam entre si, você precisa marcar os aplicativos como parceiros. Quando você implanta um dos aplicativos, seus parceiros não serão excluídos. Consulte Marcar aplicativos como parceiros para obter detalhes.