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) ofNU_AND(wissen).
Return-waarden:
NU_SUCCESSNU_INVALID_GROUPNU_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
- Cam-sloten Uitgelegd: Hoe Ze Kasten Discreet Beveiligen
- Wat Zijn Oogschroeven? Een Professionele Gids Naar Hun Ontwerp En Gebruik
- Oogjes Begrijpen: Typen, Toepassingen En Hoe Ze Uw Apparatuur Beschermen
- Roestvrij Staal Uitgelegd: Samenstelling, Productie En Mondiale Impact
- Mailboxes in Nucleus SE: Een Practische Gids voor Configuratie en Gebruik
- Semaphores in Nucleus RTOS: Utility Services & Datastructuren
- Semaphores in Nucleus SE: Overzicht, Configuratie en API-Essenties
- Event Flag Groups in Nucleus RTOS/SE Beheersen: Utility Services & Datastructuren
- Queues in Nucleus SE: Introductie en Kern-Service-Calls
- Arrow & Freelancer.com lanceren ArrowPlus: wereldwijde marktplaats voor elektronica & elektrotechnische diensten
- C# Fundamentals: Invoer en Uitvoer Basis