Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Mailboxes in Nucleus SE: Een Practische Gids voor Configuratie en Gebruik

Mailboxes in Nucleus SE: Een Practische Gids voor Configuratie en Gebruik
Bekijk de RTOS Revealed serie

Mailboxes werden in een eerder artikel geïntroduceerd als een van de meest voor de hand liggende inter-task communicatiemechanismen in Nucleus SE – direct na signals. Ze bieden een laag-kost, hoog-flexibele manier om simpele data tussen taken over te dragen.

Mailboxes Gebruiken

In Nucleus SE worden mailboxes gedefinieerd op build-tijd. Maximaal 16 mailboxes kunnen per applicatie geconfigureerd worden. Als u nul mailboxes configureert, laat de compiler alle gerelateerde datastructuren en API-code weg, wat de binary lean houdt.

Een mailbox is essentieel een opslagslot dat een enkele variabele van type ADDR kan bevatten. Slechts één taak mag op een gegeven moment naar een mailbox schrijven. Eenmaal vol, zullen volgende schrijfpogingen falen totdat de mailbox gelezen of gereset wordt. Afhankelijk van de API-opties kan een poging om naar een volle mailbox te schrijven een error returnen of de taak suspenderen totdat ruimte beschikbaar komt.

Mailboxes vs. Queues

Sommige besturingssystemen vervangen mailboxes door een single-entry queue. Hoewel een queue een mailbox' gedrag kan nabootsen, draagt het extra overhead – head- en tail-pointers, grotere datastructuren, en meer code-paden – wat leidt tot hoger geheugengebruik en uitvoeringstijd.

In Nucleus SE kunt u kiezen tussen mailboxes of queues. Als uw ontwerp veel queues gebruikt maar slechts enkele mailboxes, zal het ruilen van een mailbox voor een queue de data-grootte licht verhogen maar mailbox-specifieke API-code verwijderen, wat onderhoud vereenvoudigt. Het is eenvoudig om beide configuraties te testen om geheugenvoetafdruk en prestaties te vergelijken.

Queues zullen in een toekomstig artikel behandeld worden.

Mailboxes Configureren

Aantal Mailboxes

nuse_config.h is NUSE_MAILBOX_NUMBER. De standaardwaarde is 0, wat betekent dat geen mailboxes ingeschakeld zijn. U kunt het instellen op elk integer tussen 1 en 16. Een compile-time check in nuse_config_check.h zal een error triggeren als de waarde out-of-range is.

Het instellen van een non-zero waarde activeert het mailbox-subsysteem: datastructuren worden gesized, en de API-enabling symbolen worden verwerkt.

API Enables

Elke mailbox API-call heeft een corresponderende #define in nuse_config.h:

  • NUSE_MAILBOX_SEND
  • NUSE_MAILBOX_RECEIVE
  • NUSE_MAILBOX_RESET
  • NUSE_MAILBOX_INFORMATION
  • NUSE_MAILBOX_COUNT

Standaard zijn allemaal ingesteld op FALSE, wat de call en de implementatie uitschakelt. Om een API te gebruiken, stel de corresponderende macro in op TRUE. Een API inschakelen zonder mailboxes geconfigureerd te hebben zal een compile-time error veroorzaken (behalve NUSE_Mailbox_Count(), wat altijd beschikbaar is). Een uitgeschakelde API gebruiken zal een link-time error produceren.

/* Aantal mailboxes in het systeem – 0-16 */ #define NUSE_MAILBOX_NUMBER 0 /* Service call enablers: */ #define NUSE_MAILBOX_SEND FALSE #define NUSE_MAILBOX_RECEIVE FALSE #define NUSE_MAILBOX_RESET FALSE #define NUSE_MAILBOX_INFORMATION FALSE #define NUSE_MAILBOX_COUNT FALSE 

Mailbox Service Calls

Nucleus SE biedt negen mailbox-gerelateerde service calls. De geïmplementeerde in SE zijn:

  • NUSE_Mailbox_Send() – een bericht naar een mailbox schrijven.
  • NUSE_Mailbox_Receive() – een bericht van een mailbox lezen.
  • NUSE_Mailbox_Reset() – een mailbox wissen zonder taken te suspenderen.
  • NUSE_Mailbox_Information() – status van een mailbox opvragen.
  • NUSE_Mailbox_Count() – het aantal geconfigureerde mailboxes teruggeven.

Andere functies zoals creatie, verwijdering, bulk-ophaling, en broadcast zijn niet geïmplementeerd in SE.

Schrijf- en Leesoperaties

Mailboxes ondersteunen twee kernoperaties: versturen (schrijven) en ontvangen (lezen). Beide APIs zijn beschikbaar in Nucleus RTOS en Nucleus SE, met enige verschillen in flexibiliteit en foutafhandeling.

Versturen naar een Mailbox

In Nucleus RTOS ondersteunt de NU_Send_To_Mailbox call indefinite of getimeerde suspending als de mailbox vol is. Nucleus SE biedt een vereenvoudigde versie: suspending is optioneel en timeouts worden niet ondersteund.

Sample prototype voor Nucleus SE:

STATUS NUSE_Mailbox_Send(NUSE_MAILBOX mailbox, ADDR *message, U8 suspend);

Parameters:

  • mailbox – mailbox-index.
  • message – pointer naar een ADDR variabele.
  • suspend – NUSE_NO_SUSPEND of NUSE_SUSPEND.

Returnwaarden omvatten NUSE_SUCCESS, NUSE_INVALID_MAILBOX, NUSE_MAILBOX_FULL, en NUSE_MAILBOX_WAS_RESET.

Implementatie Overzicht

Wanneer blocking uitgeschakeld is, checkt de routine de mailbox-status-flag. Als de mailbox leeg is, schrijft het de data en markeert de mailbox als vol; anders returned het NUSE_MAILBOX_FULL.

Met blocking ingeschakeld, loopt de code totdat het bericht succesvol gepost is of de taak gewekt wordt door een receive-operatie. Als een taak gesuspendeerd is op de mailbox, wordt het onmiddellijk na een succesvolle send hervat.

Het volgende fragment demonstreert de kernlogica wanneer blocking ingeschakeld is (vereenvoudigd voor leesbaarheid):

do { if (!NUSE_Mailbox_Status[mailbox]) { // Mailbox leeg – data opslaan en wachtende taak wekken indien aanwezig. } else if (suspend == NUSE_NO_SUSPEND) { return NUSE_MAILBOX_FULL; } else { // Taak suspenderen tot mailbox leeg wordt. } } while (suspend == NUSE_SUSPEND); 

Samengevat, balanceert de mailbox API eenvoud en flexibiliteit, wat ontwikkelaars in staat stelt te kiezen tussen directe faling of taak-suspensie gebaseerd op hun applicatie's timing-vereisten.

Ingebed

  1. Cam-sloten Uitgelegd: Hoe Ze Kasten Discreet Beveiligen
  2. Wat Zijn Oogschroeven? Een Professionele Gids Naar Hun Ontwerp En Gebruik
  3. Oogjes Begrijpen: Typen, Toepassingen En Hoe Ze Uw Apparatuur Beschermen
  4. Roestvrij Staal Uitgelegd: Samenstelling, Productie En Mondiale Impact
  5. Semaphores in Nucleus RTOS: Utility Services & Datastructuren
  6. Semaphores in Nucleus SE: Overzicht, Configuratie en API-Essenties
  7. Event Flag Groups in Nucleus RTOS/SE Beheersen: Utility Services & Datastructuren
  8. Event Flag Groups in Nucleus SE: Een Introductie tot Configuratie en API-Gebruik
  9. Queues in Nucleus SE: Introductie en Kern-Service-Calls
  10. COVID-19 en de Cloud: Hoe Grote Providers Bedrijven Ondersteunden Tijdens de Pandemie
  11. C# Fundamentals: Invoer en Uitvoer Basis