Grupos de banderas de evento en Nucleus SE: Guía introductoria de configuración y uso de API
Ver la serie RTOS Revealed
Los grupos de banderas de evento proporcionan un mecanismo ligero y flexible para comunicación entre tareas en Nucleus SE, similar a las señales pero con funcionalidad más rica.
Uso de Banderas de Evento
En Nucleus SE, las banderas de evento se configuran en tiempo de compilación. Se pueden definir un máximo de 16 grupos. Si no se configura ninguno, el RTOS omite todas las estructuras de datos y código API relacionados.
Configuración de Grupos de Banderas de Evento
Número de Grupos de Banderas de Evento
La configuración se controla mediante directivas #define en nuse_config.h. La macro clave NUSE_EVENT_GROUP_NUMBER establece cuántos grupos usará la aplicación (por defecto 0). Valores arriba de 16 o negativos disparan un error #error en tiempo de compilación generado por nuse_config_check.h.
Establecer un valor no cero activa el subsistema de banderas de evento: se asignan estructuras de datos y se consideran los habilitadores de API.
Habilitadores de API
Cada llamada de servicio tiene una macro de habilitación en nuse_config.h:
NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT
Por defecto todas son FALSE, deshabilitando las funciones correspondientes. Para usar una API, establezca las macros deseadas en TRUE. Una discrepancia (habilitar una API mientras NUSE_EVENT_GROUP_NUMBER es 0) causa un error en tiempo de compilación, excepto para NUSE_Event_Group_Count(), que siempre está disponible.
Extracto de ejemplo del nuse_config.h por defecto:
#define NUSE_EVENT_GROUP_NUMBER 0 /* Número de grupos de evento – 0‑16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Habilitador de llamada de servicio */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Habilitador de llamada de servicio */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Habilitador de llamada de servicio */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Habilitador de llamada de servicio */
Si su código referencia una API que no fue habilitada, el enlazador emitirá un error porque la implementación fue omitida.
Llamadas de Servicio de Banderas de Evento
Nucleus SE ofrece siete llamadas de servicio relacionadas con banderas de evento, aunque solo cuatro están implementadas:
- NUSE_Event_Group_Set() – establecer o limpiar banderas.
- NUSE_Event_Group_Retrieve() – leer estado actual de banderas.
- NUSE_Event_Group_Information() – consultar estado de un grupo.
- NUSE_Event_Group_Count() – obtener número de grupos configurados.
- Creación, borrado y enumeración de grupos no están implementados en SE.
No hay función dedicada de reset; un grupo puede reiniciarse a todos ceros usando NUSE_Event_Group_Set() con una operación OR sobre una máscara de bandera cero.
Operaciones Set y Retrieve
Como las banderas de evento son bits, se expresan mejor como valores binarios. Nucleus SE incluye nuse_binary.h, que define macros como b01010101 para cada patrón de 8 bits.
Establecimiento de Banderas de Evento
Tanto RTOS como SE exponen APIs similares. El prototipo RTOS es:
STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation);
Parámetros:
group– puntero al bloque de control de banderas de evento.event_flags– máscara de bits de banderas a manipular.operation–NU_OR(establecer) oNU_AND(limpiar).
Valores de retorno:
NU_SUCCESSNU_INVALID_GROUPNU_INVALID_OPERATION
El equivalente SE es:
STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation);
Parámetros y códigos de retorno reflejan la versión RTOS, con NUSE_SUCCESS, NUSE_INVALID_GROUP y NUSE_INVALID_OPERATION.
Aspectos Destacados de la Implementación
La rutina central comprueba operation y aplica la máscara:
NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; }
Cuando el bloqueo está habilitado (NUSE_BLOCKING_ENABLE), la función itera sobre todas las tareas, despierta las que están suspendidas en este grupo y actualiza el contador de bloqueo. Después, puede ocurrir una reprogramación si un planificador de prioridad está activo.
Las tareas suspendidas se reanudan una vez que el estado de banderas cambia, permitiéndoles evaluar sus condiciones de espera.
Continuar a página dos >>
Incrustado
- Cerraduras de leva (cam locks) explicadas: cómo aseguran gabinetes discretamente
- ¿Qué Son los Tornillos de Ojo (Eye Screws)? Guía Profesional de Diseño y Usos
- Entendiendo los ojales (grommets): tipos, usos y cómo protegen sus equipos
- Acero inoxidable explicado: composición, producción e impacto global
- Buzones en Nucleus SE: Guía práctica de configuración y uso
- Semaforos en Nucleus RTOS: Servicios de utilidad y estructuras de datos
- Semaforos en Nucleus SE: Visión general, configuración y API esenciales
- Dominando grupos de banderas de evento: Servicios de utilidad y estructuras de datos en Nucleus RTOS/SE
- Colas en Nucleus SE: Introducción y llamadas de servicio principales
- Arrow y Freelancer.com lanzan ArrowPlus: Marketplace global para servicios de ingeniería electrónica y eléctrica
- Fundamentos de C#: Entrada y salida esenciales