Nucleus SE分区内存:配置、API与最佳实践
查看RTOS Revealed系列
内存分区在早前文章引入,对比传统C malloc()函数。分区是来自分区池的固定大小内存块,提供任务可依赖的确定性分配和释放。
使用分区
在Nucleus SE中,分区池在编译时定义。每应用最多配置16个池。若无池定义,所有相关数据结构和API代码从构建中省略,保持占用最小。
池简单是连续内存区划分为设定数量的相同分区。应用控制每池大小和数量。任务请求分区并获取块指针。调用者责任保持在分配边界内。任意任务可通过释放API将分区归还池。若池耗尽,调用视API参数和构建选项可能返回错误或挂起任务。
配置内存分区
分区池数量
分区池通过nuse_config.h中#define语句启用。关键符号NUSE_PARTITION_POOL_NUMBER设定池数量。默认0表示无活动池。有效值1到16;无效值触发nuse_config_check.h产生的编译时#error。
设非零值激活必要数据结构并在ROM中初始化。也解锁下述API启用符号。
API启用
每个服务调用在nuse_config.h有启用宏。分区相关符号:
NUSE_PARTITION_ALLOCATENUSE_PARTITION_DEALLOCATENUSE_PARTITION_POOL_INFORMATIONNUSE_PARTITION_POOL_COUNT
默认全设为FALSE,从构建中剥离实现。使用功能需将对应宏设为TRUE。未定义池时启用API(除NUSE_Partition_Pool_Count())导致编译时错误。使用未启用API导致链接时错误。

分区池服务调用
Nucleus RTOS提供七个分区池服务调用。Nucleus SE仅实现核心分配和释放API。下表列出各调用、实现状态、简述:
| API | 实现 | 描述 |
|---|---|---|
NU_Allocate_Partition() | 已实现 | 分配分区。 |
NU_Deallocate_Partition() | 已实现 | 释放分区。 |
NU_Partition_Pool_Information() | 已实现 | 检索池元数据。 |
NU_Established_Partition_Pools() | 已实现 | 统计活动池。 |
NU_Create_Partition_Pool() | 未实现 | 动态创建池。 |
NU_Delete_Partition_Pool() | 未实现 | 动态删除池。 |
NU_Partition_Pool_Pointers() | 未实现 | 返回池指针。 |
注意Nucleus RTOS和SE均不提供分区池重置例程。此设计选择反映典型用例:任务分配分区并将指针传给最终释放它的另一任务。重置池会静默标记所有分区为空闲,破坏任务级契约。
分配与释放服务
核心操作:
- 分配:标记分区为已用并返回地址。
- 释放:标记分区为空闲。
Nucleus RTOS分配API
原型:
STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, VOID **return_pointer, UNSIGNED suspend); 返回值含NU_SUCCESS、NU_NO_PARTITION、NU_INVALID_POOL、NU_INVALID_POINTER、NU_INVALID_SUSPEND、NU_TIMEOUT、NU_POOL_DELETED。
Nucleus SE分配API
原型:
STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL pool, ADDR *return_pointer, U8 suspend); 参数:
pool– 使用的池索引。return_pointer– 分配块地址。suspend–NUSE_NO_SUSPEND或NUSE_SUSPEND。
返回码镜像RTOS但带NUSE_前缀。非任务线程无效挂起请求或阻塞API禁用时产生NUSE_INVALID_SUSPEND。
完整实现演练见RTOS Revealed系列后续文章。
嵌入式
- 精密平面磨削服务:微米级平面度与表面质量的专业交付
- 加工中心与车削中心:专家对比选型指南
- 数字存储器基础:寻址、访问与易失性
- 不锈钢详解:成分、生产与全球影响
- Nucleus SE邮箱:配置与使用实战指南
- Nucleus RTOS信号量:实用服务与数据结构
- Nucleus SE信号量:概览、配置与API要点
- Nucleus SE事件标志组:配置与API使用入门指南
- Nucleus SE队列:介绍与核心服务调用
- Rutronik 成为 AP Memory IoT RAM 欧洲独家分销商,达成全球协议
- C# 基础:输入输出核心技巧完全指南
- C++ 动态内存管理:new 与 delete 专家级实战指南