Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

Grupos de banderas de evento en Nucleus SE: Guía introductoria de configuración y uso de API

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:

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:

Valores de retorno:

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

  1. Cerraduras de leva (cam locks) explicadas: cómo aseguran gabinetes discretamente
  2. ¿Qué Son los Tornillos de Ojo (Eye Screws)? Guía Profesional de Diseño y Usos
  3. Entendiendo los ojales (grommets): tipos, usos y cómo protegen sus equipos
  4. Acero inoxidable explicado: composición, producción e impacto global
  5. Buzones en Nucleus SE: Guía práctica de configuración y uso
  6. Semaforos en Nucleus RTOS: Servicios de utilidad y estructuras de datos
  7. Semaforos en Nucleus SE: Visión general, configuración y API esenciales
  8. Dominando grupos de banderas de evento: Servicios de utilidad y estructuras de datos en Nucleus RTOS/SE
  9. Colas en Nucleus SE: Introducción y llamadas de servicio principales
  10. Arrow y Freelancer.com lanzan ArrowPlus: Marketplace global para servicios de ingeniería electrónica y eléctrica
  11. Fundamentos de C#: Entrada y salida esenciales