Comunicare con un'applicazione di alto livelloCommunicate with a high-level application

Le applicazioni con operazioni in tempo reale (RTApp) comunicano con le applicazioni di alto livello tramite un buffer circolare associato a un'area di memoria condivisa.Real-time capable applications (RTApps) communicate with high-level applications through a ring buffer that is mapped to a shared region of memory.

Gli esempi IntercoreComms illustrano le modalità di comunicazione delle applicazioni RTApp con le applicazioni di alto livello.The IntercoreComms samples show how RTApps can communicate with high-level applications. Usare l'esempio IntercoreComms_RTApp_MT3620_BareMetal come punto di partenza per sviluppare il codice per la comunicazione con le applicazioni RTApp.Use the IntercoreComms_RTApp_MT3620_BareMetal sample as a starting point for developing your own RTApp communication code. Per informazioni sui requisiti di codice per un'applicazione di alto livello, vedere Comunicare con un'applicazione con funzionalità in tempo reale.See Communicate with a real-time capable application for information about the code required in a high-level application.

Importante

Per informazioni sugli indirizzi di registro e altri dettagli specifici dell'hardware, richiedere la "Guida per programmatori di MT3620 M4" tramite posta elettronica Azure.Sphere@avnet.com .For information about register addresses and other hardware-specific details, request the "MT3620 M4 Programmer's Guide" by emailing Azure.Sphere@avnet.com.

OperazioneOperation

Dalla prospettiva dell'applicazione RTApp, la comunicazione con un'applicazione di alto livello comporta le operazioni di base seguenti:From the perspective of the RTApp, communication with a high-level application involves the following basic operations:

  • Lettura delle informazioni di configurazione dalla cassetta postale che condivide con il core di alto livello sul dispositivo MT3620Reading set-up information from the mailbox it shares with the high-level core on the MT3620
  • Lettura e scrittura dei dati nella memoria condivisaReading and writing data to shared memory

Inizializzazione di dimensioni del buffer e puntatoriInitialize buffer sizes and pointers

L'applicazione RTApp riceve informazioni sul buffer circolare tramite tre messaggi nella cassetta postale condivisa dai core per operazioni in tempo reale e di alto livello.The RTApp receives information about the ring buffer via three messages in the mailbox that the real-time and high-level cores share. Ogni messaggio contiene un comando e dei dati.Each message contains a command and data. I primi due messaggi forniscono gli indirizzi di base dei buffer di lettura e scrittura usati dalle applicazioni per la comunicazione. Il terzo messaggio indica che la trasmissione di informazioni di configurazione per i buffer è terminata.The first two messages provide the base addresses of the read and write buffers that the applications will use to communicate; the third message indicates transmission of setup information for the buffers is finished.

Valore del comandoCommand Value DataData
0xba5e00010xba5e0001 Descrittore del buffer in uscita (scrittura) per l'applicazione RTAppOutbound (write) buffer descriptor for the RTApp
0xba5e00020xba5e0002 Descrittore del buffer in ingresso (lettura) per l'applicazione RTAppInbound (read) buffer descriptor for the RTApp
0xba5e00030xba5e0003 Fine della configurazioneEnd of setup

L'applicazione RTApp calcola le dimensioni dei buffer di lettura e scrittura e configura i puntatori alla posizione iniziale di ogni buffer, in base ai dati nei descrittori dei buffer.The RTApp calculates the size of the read and write buffers and sets up pointers to the initial position of each buffer based on the data in the buffer descriptors.

Vedere l'esempio IntercoreComms_RTApp_MT3620_BareMetal per altri dettagli su come usare la cassetta postale.See the IntercoreComms_RTApp_MT3620_BareMetal sample for additional details about how to use the mailbox.

Leggere e scrivere nei bufferRead from and write to the buffers

Dopo l'inizializzazione, l'applicazione RTApp può eseguire operazioni di lettura e scrittura nei buffer.After initialization, the RTApp can read from and write to the buffers. Poiché la comunicazione viene implementata con un buffer circolare, le operazioni di lettura e scrittura possono tornare all'inizio del buffer.Because communication is implemented with a ring buffer, both reads and writes can wrap around to the beginning of the buffer.

I messaggi scritti o letti dal buffer hanno la struttura seguente:Messages written to or read from the buffer have the following structure:

Intestazione del messaggioMessage header Contenuto del messaggioMessage content
ID componenteComponent ID RiservatoReserved
16 byte16 Bytes 4 byte4 Bytes
DataData
0 - 1 KB0 - 1 KB
  • Il primo campo dell'intestazione del messaggio (16 byte) contiene l'ID componente dell'app di alto livello.The first field of the message header (16 bytes) contains the component ID of the high-level app.

    Se l'applicazione RTApp avvia la comunicazione con l'app di alto livello, assicurarsi che l'ordine dei byte in ognuno dei primi 3 segmenti dell'ID componente sia little endian (byte meno significativo per primo).If the RTApp is initiating communication with the high-level app, ensure that the ordering of bytes in each of the first 3 segments of the component ID is little-endian (least significant byte first). L'ordine dei byte nei due segmenti rimanenti deve essere big endian.The ordering of the bytes in the remaining two segments must be big-endian.

    Se l'applicazione RTApp risponde a un messaggio dell'app di alto livello, è sufficiente copiare l'ID componente del messaggio di origine nell'intestazione del messaggio di risposta.If the RTApp is responding to a message from the high-level app, you just need to copy the component ID in the source message to the header of the response message.

  • Il secondo campo dell'intestazione del messaggio (4 byte) è attualmente riservato e deve contenere zeri.The second field of the message header (4 bytes) is currently reserved and must contain 0s.

  • L'intestazione del messaggio è sempre allineata a limite di 16 byte.The message header is always aligned on a 16-byte boundary.

  • Attualmente, il contenuto del messaggio può avere dimensioni massime di 1 KB.Currently, message content can be at most 1 KB in size.

Dopo ogni operazione di lettura o scrittura nel buffer, l'applicazione RTApp usa la cassetta postale condivisa per notificare all'app di alto livello che ha ricevuto o trasmesso un messaggio.After each read or write operation to the buffer, the RTApp uses the shared mailbox to notify the high-level app that it has received or transmitted a message.

Impostazioni del manifesto dell'applicazioneApplication manifest settings

I manifesti dell'applicazione per l'app di alto livello e l'applicazione RTApp devono elencare gli ID componente delle applicazioni con cui comunicano.The application manifests for both the RTApp and the high-level app must list the component IDs of the applications with which they communicate. Per configurare questa impostazione, aggiungere la funzionalità AllowedApplicationConnections al manifesto dell'applicazione e quindi aggiungere ogni ID componente a tale funzionalità.To configure this setting, add the AllowedApplicationConnections capability to the application manifest, and then add each component ID to the capability. Nell'argomento Manifesto dell'applicazione di Azure Sphere sono disponibili informazioni più dettagliate.The Azure Sphere application manifest topic has more details. Ecco un estratto del manifesto dell'applicazione che configura un'applicazione RTApp per la comunicazione con un'altra applicazione.Here's an excerpt from an application manifest that configures an RTApp to communicate with one other application.

"AllowedApplicationConnections": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]

Applicazioni partnerPartner applications

Quando si carica un'applicazione nel dispositivo Azure Sphere, per impostazione predefinita gli strumenti di distribuzione di Azure Sphere eliminano tutte le applicazioni esistenti.When you load an application onto the Azure Sphere device, the Azure Sphere deployment tools by default delete all existing applications. Per evitare che ciò accada quando si sviluppano applicazioni che comunicano tra loro, è necessario contrassegnare le applicazioni come partner.To prevent this from happening when you develop applications that communicate with each other, you need to mark the applications as partners. Quando si distribuisce una delle applicazioni, i relativi partner non verranno eliminati.When you deploy one of the applications, its partners will not be deleted. Per informazioni dettagliate, vedere Contrassegnare le applicazioni come partner.See Mark applications as partners for details.