Grupos de Event Flags no Nucleus SE: Guia Introdutório de Configuração e Uso da API
Veja a série RTOS Revealed
Event flag groups fornecem mecanismo leve e flexível para comunicação inter-tarefa no Nucleus SE, análogos a signals mas com funcionalidade mais rica.
Usando Event Flags
No Nucleus SE, event flags são configuradas em tempo de build. Máximo de 16 grupos pode ser definido. Se nenhum configurado, RTOS omite todas estruturas de dados e código API relacionadas.
Configurando Grupos de Event Flags
Número de Grupos de Event Flags
Configuração é dirigida por diretivas #define em nuse_config.h. Macro-chave NUSE_EVENT_GROUP_NUMBER define quantos grupos a aplicação usará (padrão 0). Valores acima de 16 ou negativos disparam erro de compilação #error gerado por nuse_config_check.h.
Definir valor não-zero ativa subsistema de event-flag: estruturas de dados alocadas e API enables consideradas.
Habilitações da API
Cada chamada de serviço tem macro de habilitação em nuse_config.h:
NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT
Por padrão todas FALSE, desabilitando funções correspondentes. Para usar API, defina macros desejadas como TRUE. Incompatibilidade (habilitar API enquanto NUSE_EVENT_GROUP_NUMBER é 0) causa erro de compilação, exceto NUSE_Event_Group_Count(), sempre disponível.
Trecho do nuse_config.h padrão:
#define NUSE_EVENT_GROUP_NUMBER 0 /* Número de 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 */
Se seu código referenciar API não habilitada, linker emitirá erro porque implementação foi omitida.
Chamadas de Serviço de Event Flags
Nucleus SE oferece sete chamadas de serviço relacionadas a event flags, embora apenas quatro sejam implementadas:
- NUSE_Event_Group_Set() – setar ou limpar flags.
- NUSE_Event_Group_Retrieve() – ler estado atual das flags.
- NUSE_Event_Group_Information() – consultar status de grupo.
- NUSE_Event_Group_Count() – obter número de grupos configurados.
- Criação, deleção e enumeração de grupos não implementadas no SE.
Não há função dedicada de reset; grupo pode ser resetado para todos zeros usando NUSE_Event_Group_Set() com operação OR em máscara de flag zero.
Operações Set e Retrieve
Como event flags são bits, são melhor expressas como valores binários. Nucleus SE inclui nuse_binary.h, que define macros como b01010101 para todo padrão de 8 bits.
Setando Event Flags
Tanto RTOS quanto SE expõem APIs similares. Protótipo RTOS:
STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation);
Parâmetros:
group– ponteiro para bloco de controle do event-flag.event_flags– bitmask de flags a manipular.operation–NU_OR(set) ouNU_AND(clear).
Valores de retorno:
NU_SUCCESSNU_INVALID_GROUPNU_INVALID_OPERATION
Equivalente SE:
STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation);
Parâmetros e códigos de retorno espelham versão RTOS, com NUSE_SUCCESS, NUSE_INVALID_GROUP, e NUSE_INVALID_OPERATION.
Destaques da Implementação
Rotina central verifica operation e aplica 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; }
Quando blocking habilitado (NUSE_BLOCKING_ENABLE), função itera sobre todas tarefas, acorda quaisquer suspensas neste grupo, e atualiza contador de blocking. Após, reschedule pode ocorrer se scheduler de prioridade ativo.
Tarefas suspensas retomam uma vez que estado da flag muda, permitindo que avaliem suas condições de espera.
Continue para página dois >>
Integrado
- Fechos de Came (Cam Locks) Explicados: Como Protegem Armários Discretamente
- O Que São Parafusos Olhal? Guia Profissional para Seu Design e Usos
- Entendendo Ilhós (Grommets): Tipos, Usos e Como Protegem Seus Equipamentos
- Aço Inoxidável (Stainless Steel) Explicado: Composição, Produção e Impacto Global
- Fundamentos de C#: Essenciais de Entrada e Saída
- Mailboxes no Nucleus SE: Guia Prático de Configuração e Uso
- Semáforos no Nucleus RTOS: Serviços Utilitários e Estruturas de Dados
- Semáforos no Nucleus SE: Visão Geral, Configuração e APIs Essenciais
- Dominando Grupos de Event Flags: Serviços Utilitários e Estruturas de Dados no Nucleus RTOS/SE
- Queues no Nucleus SE: Introdução e Chamadas de Serviço Centrais