Memória de Partição no Nucleus SE: Configuração, APIs e Boas Práticas
Veja a série RTOS Revealed
Partições de memória foram introduzidas em artigo anterior, onde comparamos com função convencional C malloc(). Partição é bloco de memória de tamanho fixo que vem de partition pool, oferecendo alocação e desalocação determinísticas nas quais tarefas podem confiar.
Usando Partições
No Nucleus SE, partition pools são definidos em tempo de compilação. Até 16 pools podem ser configurados por aplicação. Se nenhum pool definido, todas estruturas de dados e código API relacionados omitidos do build, mantendo footprint mínimo.
Pool é simplesmente área de memória contígua dividida em número definido de partições idênticas. Aplicação controla tamanho e contagem de cada pool. Tarefas requisitam partição e recebem ponteiro para bloco. É responsabilidade do chamador permanecer dentro dos limites alocados. Partição pode ser retornada ao pool por qualquer tarefa via API de desalocação. Se pool esgotado, chamada pode retornar erro ou suspender tarefa, dependendo de parâmetros da API e opções de build.
Configurando Partições de Memória
Número de Partition Pools
Partition pools habilitados através de declarações #define em nuse_config.h. Símbolo-chave é NUSE_PARTITION_POOL_NUMBER, que define contagem de pools. Padrão é 0, significando nenhum pool ativo. Valores válidos variam de 1 a 16; valor inválido dispara erro de compilação #error gerado por nuse_config_check.h.
Definir valor não-zero ativa estruturas de dados necessárias e inicializa-as em ROM. Também desbloqueia símbolos de habilitação da API descritos abaixo.
Habilitações da API
Cada chamada de serviço tem macro de habilitação em nuse_config.h. Para partições, seguintes símbolos existem:
NUSE_PARTITION_ALLOCATENUSE_PARTITION_DEALLOCATENUSE_PARTITION_POOL_INFORMATIONNUSE_PARTITION_POOL_COUNT
Por padrão todas FALSE, removendo implementação do build. Para usar feature, defina macro correspondente como TRUE. Habilitar API enquanto nenhum pool definido (exceto NUSE_Partition_Pool_Count()) resulta em erro de compilação. Usar API não habilitada causa erro de link.

Chamadas de Serviço de Partition Pool
Nucleus RTOS oferece sete chamadas de serviço para partition pools. No Nucleus SE, apenas APIs centrais de alocação e desalocação implementadas. Tabela abaixo lista cada chamada, status de implementação, e breve descrição:
| API | Implementação | Descrição |
|---|---|---|
NU_Allocate_Partition() | Implementado | Alocar partição. |
NU_Deallocate_Partition() | Implementado | Liberar partição. |
NU_Partition_Pool_Information() | Implementado | Recuperar metadados do pool. |
NU_Established_Partition_Pools() | Implementado | Contar pools ativos. |
NU_Create_Partition_Pool() | Não implementado | Criação dinâmica de pool. |
NU_Delete_Partition_Pool() | Não implementado | Deleção dinâmica de pool. |
NU_Partition_Pool_Pointers() | Não implementado | Retornar ponteiros de pool. |
Note que nem Nucleus RTOS nem SE fornecem rotina de reset para partition pools. Esta escolha de design reflete casos de uso típicos onde tarefa aloca partição e passa seu ponteiro para outra tarefa que eventualmente desalocará. Resetar pool silenciosamente marcaria todas partições como livres, quebrando contrato no nível de tarefa.
Serviços de Alocação e Desalocação
Operações centrais são:
- Alocar: marcar partição como usada e retornar seu endereço.
- Desalocar: marcar partição como livre.
API de Alocação Nucleus RTOS
Protótipo:
STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, VOID **return_pointer, UNSIGNED suspend);
Valores de retorno incluem NU_SUCCESS, NU_NO_PARTITION, NU_INVALID_POOL, NU_INVALID_POINTER, NU_INVALID_SUSPEND, NU_TIMEOUT, e NU_POOL_DELETED.
API de Alocação Nucleus SE
Protótipo:
STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL pool, ADDR *return_pointer, U8 suspend);
Parâmetros:
pool– índice do pool a usar.return_pointer– endereço do bloco alocado.suspend–NUSE_NO_SUSPENDouNUSE_SUSPEND.
Códigos de retorno espelham RTOS mas prefixados com NUSE_. Requisições de suspend inválidas de non-task threads ou quando blocking APIs desabilitadas produzem NUSE_INVALID_SUSPEND.
Para walkthrough completo de implementação, veja artigos subsequentes na série RTOS Revealed.
Integrado
- Aço Inoxidável (Stainless Steel) Explicado: Composição, Produção e Impacto Global
- Fundamentos de Memória Digital: Endereçamento, Acesso e Volatilidade
- Fundamentos de C#: Essenciais de Entrada e Saída
- Dominando Gerenciamento de Memória em C++: Uso Expert de new e delete
- 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
- Grupos de Event Flags no Nucleus SE: Guia Introdutório de Configuração e Uso da API
- Queues no Nucleus SE: Introdução e Chamadas de Serviço Centrais
- Rutronik Torna-se Distribuidor Exclusivo Europeu de IoT RAM da AP Memory sob Acordo Global