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

Event Flag Groups in Nucleus SE: Een Introductie tot Configuratie en API-Gebruik

Event Flag Groups in Nucleus SE: Een Introductie tot Configuratie en API-Gebruik
Bekijk de RTOS Revealed serie

Event flag groups bieden een lichtgewicht, flexibel mechanisme voor inter-task communicatie in Nucleus SE, vergelijkbaar met signals maar met rijker functionaliteit.

Event Flags Gebruiken

In Nucleus SE worden event flags geconfigureerd op build-tijd. Maximaal 16 groepen kunnen gedefinieerd worden. Als er geen geconfigureerd zijn, laat de RTOS alle gerelateerde datastructuren en API-code weg.

Event Flag Groups Configureren

Aantal Event Flag Groups

Configuratie wordt gedreven door #define directieven in nuse_config.h. De sleutelmacro NUSE_EVENT_GROUP_NUMBER stelt in hoeveel groepen de applicatie zal gebruiken (standaard 0). Waarden boven 16 of negatieve waarden triggeren een compile-time #error gegenereerd door nuse_config_check.h.

Het instellen van een non-zero waarde activeert het event-flag-subsysteem: datastructuren worden toegewezen en API-enables overwogen.

API Enables

Elke service-call heeft een enable-macro in nuse_config.h:

NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT 

Standaard zijn alle FALSE, wat de corresponderende functies uitschakelt. Om een API te gebruiken, stel de gewenste macros in op TRUE. Een mismatch (een API inschakelen terwijl NUSE_EVENT_GROUP_NUMBER 0 is) veroorzaakt een compile-time error, behalve voor NUSE_Event_Group_Count(), wat altijd beschikbaar is.

Voorbeeld-uitzug uit het standaard nuse_config.h:

#define NUSE_EVENT_GROUP_NUMBER 0 /* Aantal event groups – 0‑16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Service call enabler */ 

Als uw code een API refereert die niet ingeschakeld was, zal de linker een error emitten omdat de implementatie weggelaten werd.

Event Flag Service Calls

Nucleus SE biedt zeven service-calls gerelateerd aan event flags, hoewel er slechts vier geïmplementeerd zijn:

  • NUSE_Event_Group_Set() – flags zetten of wissen.
  • NUSE_Event_Group_Retrieve() – huidige flag-state lezen.
  • NUSE_Event_Group_Information() – een groep's status opvragen.
  • NUSE_Event_Group_Count() – het aantal geconfigureerde groepen verkrijgen.
  • Creatie, verwijdering, en enumeratie van groepen zijn niet geïmplementeerd in SE.

Er is geen dedicated reset-functie; een groep kan gereset worden naar alle nullen door NUSE_Event_Group_Set() te gebruiken met een OR-operatie op een nul-flag-mask.

Set en Retrieve Operaties

Omdat event flags bits zijn, worden ze het best uitgedrukt als binaire waarden. Nucleus SE levert nuse_binary.h, wat macros definieert zoals b01010101 voor elk 8-bit patroon.

Event Flags Zetten

Zowel RTOS als SE exposen vergelijkbare APIs. Het RTOS-prototype is:

STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation); 

Parameters:

  • group – pointer naar het event-flag control block.
  • event_flags – bitmask van flags te manipuleren.
  • operation – NU_OR (set) of NU_AND (wissen).

Return-waarden:

  • NU_SUCCESS
  • NU_INVALID_GROUP
  • NU_INVALID_OPERATION

Het SE-equivalent is:

STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation); 

Parameters en return-codes mirroren de RTOS-versie, met NUSE_SUCCESS, NUSE_INVALID_GROUP, en NUSE_INVALID_OPERATION.

Implementatie Highlights

De kernroutine checkt operation en past de mask toe:

NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; } 

Wanneer blocking ingeschakeld is (NUSE_BLOCKING_ENABLE), itereert de functie over alle taken, wekt welke die gesuspendeerd zijn op deze groep, en updated de blocking-counter. Daarna kan een reschedule optreden als een priority-scheduler actief is.

Gesuspendeerde taken hervatten zodra de flag-state verandert, wat hen in staat stelt hun wait-condities te evalueren.

Vervolg op pagina twee >>

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. Mailboxes in Nucleus SE: Een Practische Gids voor Configuratie en Gebruik
  6. Semaphores in Nucleus RTOS: Utility Services & Datastructuren
  7. Semaphores in Nucleus SE: Overzicht, Configuratie en API-Essenties
  8. Event Flag Groups in Nucleus RTOS/SE Beheersen: Utility Services & Datastructuren
  9. Queues in Nucleus SE: Introductie en Kern-Service-Calls
  10. Arrow & Freelancer.com lanceren ArrowPlus: wereldwijde marktplaats voor elektronica & elektrotechnische diensten
  11. C# Fundamentals: Invoer en Uitvoer Basis