亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

Nucleus SE分区内存:配置、API与最佳实践

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有启用宏。分区相关符号:

默认全设为FALSE,从构建中剥离实现。使用功能需将对应宏设为TRUE。未定义池时启用API(除NUSE_Partition_Pool_Count())导致编译时错误。使用未启用API导致链接时错误。

Nucleus SE分区内存:配置、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); 

参数:

返回码镜像RTOS但带NUSE_前缀。非任务线程无效挂起请求或阻塞API禁用时产生NUSE_INVALID_SUSPEND。

完整实现演练见RTOS Revealed系列后续文章。

嵌入式

  1. 精密平面磨削服务:微米级平面度与表面质量的专业交付
  2. 加工中心与车削中心:专家对比选型指南
  3. 数字存储器基础:寻址、访问与易失性
  4. 不锈钢详解:成分、生产与全球影响
  5. Nucleus SE邮箱:配置与使用实战指南
  6. Nucleus RTOS信号量:实用服务与数据结构
  7. Nucleus SE信号量:概览、配置与API要点
  8. Nucleus SE事件标志组:配置与API使用入门指南
  9. Nucleus SE队列:介绍与核心服务调用
  10. Rutronik 成为 AP Memory IoT RAM 欧洲独家分销商,达成全球协议
  11. C# 基础:输入输出核心技巧完全指南
  12. C++ 动态内存管理:new 与 delete 专家级实战指南