Event Flag Groups in Nucleus SE: Einführender Guide zu Konfiguration und API Usage
View the RTOS Revealed series
Event Flag Groups bieten einen leichten, flexiblen Mechanismus für Inter-Task Communication in Nucleus SE, ähnlich Signals aber mit reichhaltigerer Funktionalität.
Event Flags nutzen
In Nucleus SE werden Event Flags zur Build Time konfiguriert. Maximal 16 Groups können definiert werden. Wenn keine konfiguriert sind, omittiert das RTOS alle zugehörigen Data Structures und API Code.
Event Flag Groups konfigurieren
Anzahl Event Flag Groups
Konfiguration wird durch #define Direktiven in nuse_config.h getrieben. Der Schlüssel Macro NUSE_EVENT_GROUP_NUMBER setzt, wie viele Groups die Applikation nutzen wird (Default 0). Werte über 16 oder negative Werte triggern einen Compile-Time #error generiert von nuse_config_check.h.
Ein Non-Zero Wert aktiviert das Event-Flag Subsystem: Data Structures werden allokiert und API Enables werden considered.
API Enables
Jeder Service Call hat ein Enable Macro in nuse_config.h:
NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT
Standardmäßig sind alle FALSE, disabling die entsprechenden Funktionen. Um ein API zu nutzen, setzen Sie die gewünschten Macros auf TRUE. Ein Mismatch (Enablen eines APIs während NUSE_EVENT_GROUP_NUMBER 0 ist) verursacht einen Compile-Time Error, außer für NUSE_Event_Group_Count(), das immer verfügbar ist.
Beispiel Auszug aus dem Default nuse_config.h:
#define NUSE_EVENT_GROUP_NUMBER 0 /* Number of 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 */
Wenn Ihr Code ein API referenziert, das nicht enabled war, wird der Linker einen Error emittieren, weil die Implementation omitted wurde.
Event Flag Service Calls
Nucleus SE bietet sieben Service Calls related zu Event Flags, though nur vier sind implementiert:
- NUSE_Event_Group_Set() – Flags setzen oder clearen.
- NUSE_Event_Group_Retrieve() – Aktuellen Flag State lesen.
- NUSE_Event_Group_Information() – Group Status abfragen.
- NUSE_Event_Group_Count() – Anzahl konfigurierter Groups erhalten.
- Creation, Deletion, und Enumeration von Groups sind in SE nicht implementiert.
Es gibt keine dedizierte Reset Funktion; eine Group kann auf all Zeros resetet werden mittels NUSE_Event_Group_Set() mit OR Operation auf Zero Flag Mask.
Set und Retrieve Operationen
Weil Event Flags Bits sind, werden sie am besten als Binary Values ausgedrückt. Nucleus SE shipped nuse_binary.h, welches Macros wie b01010101 für jedes 8-Bit Pattern definiert.
Event Flags setzen
Beide RTOS und SE exponieren ähnliche APIs. Der RTOS Prototype ist:
STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation);
Parameter:
group– Pointer zum Event-Flag Control Block.event_flags– Bitmask der zu manipulierenden Flags.operation–NU_OR(setzen) oderNU_AND(clearen).
Return Values:
NU_SUCCESSNU_INVALID_GROUPNU_INVALID_OPERATION
Das SE Equivalent ist:
STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation);
Parameter und Return Codes spiegeln die RTOS Version, mit NUSE_SUCCESS, NUSE_INVALID_GROUP, und NUSE_INVALID_OPERATION.
Implementation Highlights
Die Kern Routine checkt operation und applied die Mask:
NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; }
Wenn Blocking enabled ist (NUSE_BLOCKING_ENABLE), iteriert die Funktion über alle Tasks, weckt alle, die auf dieser Group suspended sind, und updated den Blocking Counter. Danach kann ein Reschedule erfolgen, wenn ein Priority Scheduler aktiv ist.
Suspended Tasks resumieren, sobald der Flag State sich ändert, erlaubend ihnen, ihre Wait Conditions zu evaluieren.
Continue to page two >>
Eingebettet
- Nockenschlösser (Cam Locks) erklärt: Wie sie Schränke dezent sichern
- Was sind Augenschrauben? Professioneller Leitfaden zu Design & Verwendung
- Rundösen verstehen: Arten, Einsatzbereiche und wie sie Ihre Ausrüstung schützen
- Rostfreier Stahl erklärt: Zusammensetzung, Herstellung und globale Bedeutung
- C# Grundlagen: Eingabe und Ausgabe Essentials
- Mailboxes in Nucleus SE: Praktischer Guide zu Konfiguration und Nutzung
- Semaphores in Nucleus RTOS: Utility Services & Data Structures
- Semaphores in Nucleus SE: Überblick, Konfiguration und API Essentials
- Event Flag Groups meistern: Utility Services & Data Structures in Nucleus RTOS/SE
- Queues in Nucleus SE: Einführung und Core Service Calls