Memória de Partição no Nucleus RTOS/SE: Serviços Utilitários e Estruturas de Dados
Veja a série RTOS Revealed
Baseando-se em nossa exploração anterior de memória de partição RTOS, este artigo aprofunda utilitários práticos e estruturas de dados subjacentes que permitem gerenciamento de memória eficiente no Nucleus RTOS e sua edição simplificada, Nucleus SE.
Serviços Utilitários de Partition Pool
Nucleus RTOS oferece três chamadas de API dedicadas que fornecem capacidades essenciais de informação e gerenciamento para partition pools: recuperar informação detalhada do pool, determinar número total de pools na aplicação, e adquirir ponteiros para todas estruturas de pool. As duas primeiras funções são totalmente suportadas no Nucleus SE, embora com algumas diferenças de features devido ao conjunto reduzido.
Obtendo Informação de Partition Pool
O serviço NU_Partition_Pool_Information retorna snapshot abrangente de partition pool especificado. No Nucleus SE, função retorna conjunto reduzido de dados, refletindo ausência de nomeação de objetos, ordenação de suspensão, e suporte a task suspend.
Chamada de API Nucleus RTOS para Informação de Partition Pool
Protótipo da chamada de serviço:
STATUS NU_Partition_Pool_Information(NU_PARTITION_POOL *pool, CHAR *name, VOID **start_address, UNSIGNED *pool_size, UNSIGNED *partition_size, UNSIGNED *available, UNSIGNED *allocated, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task);
Parâmetros:
pool – ponteiro para partition pool para qual informação requisitada.
name – ponteiro para buffer de 8 caracteres que receberá nome do pool (incluindo terminador null).
start_address – ponteiro para variável que receberá endereço base da área de dados do pool.
pool_size – ponteiro para variável que receberá tamanho total do pool em bytes.
partition_size – ponteiro para variável que receberá tamanho de cada partição.
available – ponteiro para variável que receberá contagem de partições atualmente livres.
allocated – ponteiro para variável que receberá contagem de partições em uso.
suspend_type – ponteiro para variável que receberá política de suspensão (valores válidos: NU_FIFO ou NU_PRIORITY).
tasks_waiting – ponteiro para variável que receberá número de tarefas suspensas neste pool.
first_task – ponteiro para variável que receberá ponteiro para primeira tarefa suspensa.
Retornos:
NU_SUCCESS – operação sucedeu.
NU_INVALID_POOL – ponteiro de pool fornecido inválido.
Chamada de API Nucleus SE para Informação de Partition Pool
No Nucleus SE, mesma funcionalidade fornecida via interface simplificada abaixo. Como SE não suporta task suspend, campos relacionados omitidos.
Protótipo da chamada de serviço:
STATUS NUSE_Partition_Pool_Information(NUSE_PARTITION_POOL pool, ADDR *start_address, U32 *pool_size, U16 *partition_size, U8 *available, U8 *allocated, U8 *tasks_waiting, NUSE_TASK *first_task)
Parâmetros:
pool – índice do partition pool.
start_address – ponteiro para variável que receberá endereço base da área de dados do pool.
pool_size – ponteiro para variável que receberá tamanho total do pool em bytes.
partition_size – ponteiro para variável que receberá tamanho de cada partição.
available – ponteiro para variável que receberá número de partições livres.
allocated – ponteiro para variável que receberá número de partições usadas.
tasks_waiting – ponteiro para variável que receberá número de tarefas esperando (zero se task suspend desabilitado).
first_task – ponteiro para variável que receberá índice da primeira tarefa suspensa (zero se task suspend desabilitado).
Retornos:
NUSE_SUCCESS – operação sucedeu.
NUSE_INVALID_POOL – índice de pool inválido.
NUSE_INVALID_POINTER – um ou mais argumentos ponteiro nulos.
Implementação Nucleus SE de Informação de Partition Pool
Implementação SE é concisa: rotina popula campos requisitados e, quando blocking APIs habilitadas, define waiting-task count e first task index (caso contrário estes campos zerados).

Obtendo Número de Partition Pools
Este serviço retorna número total de partition pools definidos na aplicação. No Nucleus RTOS, contagem pode mudar dinamicamente conforme pools criados ou destruídos; no Nucleus SE, contagem fixa em tempo de build.
Chamada de API Nucleus RTOS para Número de Partition Pools
Protótipo da chamada de serviço:
UNSIGNED NU_Established_Partition_Pools(VOID);
Parâmetros: Nenhum.
Retorna: Número atual de partition pools ativos.
Chamada de API Nucleus SE para Número de Partition Pools
Protótipo da chamada de serviço:
U8 NUSE_Partition_Pool_Count(void);
Parâmetros: Nenhum.
Retorna: Número de partition pools configurados em tempo de compilação.
Implementação
Rotina SE simplesmente retorna valor da constante de compilação NUSE_PARTITION_POOL_NUMBER.
Integrado
- Nuvem vs. Servidores In-House: Escolhendo a Solução de Hospedagem Certa
- Microsoft Azure Anuncia Serviços de Tokenização Blockchain e Gerenciamento de Dados
- Fundamentos de Memória Digital: Endereçamento, Acesso e Volatilidade
- Microprocessadores: A Evolução da Computação com Programa Armazenado
- Estruturas vs Classes em C++: Guia Prático para Desenvolvedores Embarcados
- 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
- Grupos de Event Flags no Nucleus SE: Guia Introdutório de Configuração e Uso da API