Groupes de drapeaux d'événement dans Nucleus SE : Guide d'introduction à la configuration et l'utilisation des API
Voir la série RTOS Revealed
Les groupes de drapeaux d'événement fournissent un mécanisme léger et flexible pour la communication inter-tâches dans Nucleus SE, semblables aux signaux mais avec une fonctionnalité plus riche.
Utilisation des drapeaux d'événement
Dans Nucleus SE, les drapeaux d'événement sont configurés à la compilation. Un maximum de 16 groupes peut être défini. Si aucun n'est configuré, le RTOS omet toutes les structures de données et le code API associés.
Configuration des groupes de drapeaux d'événement
Nombre de groupes de drapeaux d'événement
La configuration est pilotée par des directives #define dans nuse_config.h. La macro clé NUSE_EVENT_GROUP_NUMBER définit combien de groupes l'application utilisera (défaut 0). Les valeurs au-dessus de 16 ou négatives déclenchent une erreur #error à la compilation générée par nuse_config_check.h.
Définir une valeur non-nulle active le sous-système drapeaux d'événement : les structures de données sont allouées et les activations d'API sont considérées.
Activations des API
Chaque appel de service a une macro d'activation dans nuse_config.h :
NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT
Par défaut, toutes sont FALSE, désactivant les fonctions correspondantes. Pour utiliser une API, définissez les macros souhaitées sur TRUE. Un désaccord (activer une API alors que NUSE_EVENT_GROUP_NUMBER est 0) cause une erreur à la compilation, sauf pour NUSE_Event_Group_Count(), toujours disponible.
Exemple d'extrait du nuse_config.h par défaut :
#define NUSE_EVENT_GROUP_NUMBER 0 /* Nombre de groupes d'événements – 0‑16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Activateur d'appel de service */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Activateur d'appel de service */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Activateur d'appel de service */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Activateur d'appel de service */
Si votre code référence une API qui n'a pas été activée, l'éditeur de liens émettra une erreur car l'implémentation a été omise.
Appels de service des drapeaux d'événement
Nucleus SE offre sept appels de service liés aux drapeaux d'événement, bien que seulement quatre soient implémentés :
- NUSE_Event_Group_Set() — définir ou effacer des drapeaux.
- NUSE_Event_Group_Retrieve() — lire l'état actuel des drapeaux.
- NUSE_Event_Group_Information() — interroger le statut d'un groupe.
- NUSE_Event_Group_Count() — obtenir le nombre de groupes configurés.
- Création, suppression, et énumération de groupes ne sont pas implémentées dans SE.
Il n'y a pas de fonction de réinitialisation dédiée ; un groupe peut être réinitialisé à tous zéros en utilisant NUSE_Event_Group_Set() avec une opération OR sur un masque de drapeau nul.
Opérations Set et Retrieve
Puisque les drapeaux d'événement sont des bits, ils sont mieux exprimés comme valeurs binaires. Nucleus SE fournit nuse_binary.h, qui définit des macros comme b01010101 pour chaque motif 8 bits.
Définition des drapeaux d'événement
RTOS et SE exposent des APIs similaires. Le prototype RTOS est :
STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation);
Paramètres :
group— pointeur vers le bloc de contrôle des drapeaux d'événement.event_flags— masque de bits des drapeaux à manipuler.operation—NU_OR(définir) ouNU_AND(effacer).
Valeurs de retour :
NU_SUCCESSNU_INVALID_GROUPNU_INVALID_OPERATION
L'équivalent SE est :
STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation);
Paramètres et codes de retour miroir de la version RTOS, avec NUSE_SUCCESS, NUSE_INVALID_GROUP, et NUSE_INVALID_OPERATION.
Points forts de l'implémentation
La routine de base vérifie operation et applique le masque :
NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; }
Quand le blocage est activé (NUSE_BLOCKING_ENABLE), la fonction itère sur toutes les tâches, réveille celles suspendues sur ce groupe, et met à jour le compteur de blocage. Ensuite, une réordonnancement peut survenir si un ordonnanceur par priorité est actif.
Les tâches suspendues reprennent une fois l'état du drapeau changé, leur permettant d'évaluer leurs conditions d'attente.
Continuer vers page deux >>
Embarqué
- Serrures à came (cam locks) expliquées : comment elles sécurisent armoires discrètement
- Qu'est-ce qu'une vis à œil (eye screw) ? Guide professionnel conception et usages
- Comprendre les œillets : types, utilisations et protection de vos équipements
- Acier inoxydable expliqué : composition, production et impact mondial
- Fondamentaux C# : Entrées et sorties essentielles
- Boîtes aux lettres dans Nucleus SE : Guide pratique de configuration et d'utilisation
- Sémaphores dans Nucleus RTOS : Services utilitaires et structures de données
- Sémaphores dans Nucleus SE : Vue d'ensemble, configuration et API essentielles
- Maîtriser les groupes de drapeaux d'événement : Services utilitaires et structures de données dans Nucleus RTOS/SE