Kommunicera med ett högnivåprogram
Viktigt!
Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).
Realtidskompatibla program (RTApps) kommunicerar med högnivåprogram via en ringbuffert som mappas till en delad minnesregion.
IntercoreComms-exemplen visar hur RTApps kan kommunicera med högnivåprogram. Använd IntercoreComms_RTApp_MT3620_BareMetal exempel som utgångspunkt för att utveckla din egen RTApp-kommunikationskod. Mer information om koden som krävs i ett högnivåprogram finns i Kommunicera med ett realtidskompatibelt program .
Viktigt!
För information om registeradresser och annan maskinvaruspecifik information, begär du "MT3620 M4 Programmer's Guide" genom att Azure.Sphere@avnet.comskicka e-post till .
Åtgärd
När det gäller RTApp innebär kommunikationen med ett högnivåprogram följande grundläggande åtgärder:
- Läsa konfigurationsinformation från postlådan som den delar med högnivåkärnan på MT3620
- Läsa och skriva data till delat minne
Initiera buffertstorlekar och pekare
RTApp tar emot information om ringbufferten via tre meddelanden i postlådan som kärnorna i realtid och på hög nivå delar. Varje meddelande innehåller ett kommando och data. De första två meddelandena anger basadresserna för de läs- och skrivbuffertar som programmen ska använda för att kommunicera. det tredje meddelandet anger att överföring av konfigurationsinformation för buffertarna är klar.
Kommandovärde | Data |
---|---|
0xba5e0001 | Utgående buffertbeskrivning (skrivning) för RTApp |
0xba5e0002 | Inbound (read) buffertbeskrivning för RTApp |
0xba5e0003 | Installationen har upphört |
RTApp beräknar storleken på läs- och skrivbuffertarna och ställer in pekare till den ursprungliga positionen för varje buffert baserat på data i buffertbeskrivningarna.
Mer information om hur du använder postlådan finns i IntercoreComms_RTApp_MT3620_BareMetal exempel.
Läsa från och skriva till buffertarna
Efter initieringen kan RTApp läsa från och skriva till buffertarna. Eftersom kommunikationen implementeras med en ringbuffert kan både läsningar och skrivningar omslutas till början av bufferten.
Meddelanden som skrivits till eller lästs från bufferten har följande struktur:
Meddelanderubrik | Meddelandeinnehåll | ||||||
---|---|---|---|---|---|---|---|
|
|
Det första fältet i meddelandehuvudet (16 byte) innehåller komponent-ID för högnivåappen.
Om RTApp initierar kommunikation med högnivåappen kontrollerar du att ordningen på byte i vart och ett av de tre första segmenten i komponent-ID:t är lite endiansk (minst betydande byte först). Ordningen på byte i de återstående två segmenten måste vara storslutande.
Om RTApp svarar på ett meddelande från högnivåappen behöver du bara kopiera komponent-ID:t i källmeddelandet till huvudet på svarsmeddelandet.
Det andra fältet i meddelanderubriken (4 byte) är för närvarande reserverat och måste innehålla 0s.
Meddelanderubriken är alltid justerad på en gräns på 16 byte.
För närvarande kan meddelandeinnehållet vara högst 1 KB stort.
Efter varje läs- eller skrivåtgärd till bufferten använder RTApp den delade postlådan för att meddela högnivåappen att den har tagit emot eller överfört ett meddelande.
Inställningar för programmanifest
Programmanifesten för både RTApp och högnivåappen måste visa en lista över komponent-ID:t för de program som de kommunicerar med. Om du vill konfigurera den AllowedApplicationConnections
här inställningen lägger du till funktionen i programmanifestet och lägger sedan till varje komponent-ID i funktionen. Azure Sphere-programmanifestet innehåller mer information. Här är ett utdrag från ett programmanifest som konfigurerar en RTApp att kommunicera med ett annat program.
"AllowedApplicationConnections": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
Partnerprogram
När du läser in ett program på Azure Sphere-enheten tar Azure Sphere-distributionsverktygen som standard bort alla befintliga program. För att förhindra att detta händer när du utvecklar program som kommunicerar med varandra måste du markera programmen som partner. När du distribuerar ett av programmen tas inte dess partner bort. Mer information finns i Markera program som partner .