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

Nucleus RTOS/SE分区内存:实用服务与数据结构

Nucleus RTOS/SE分区内存:实用服务与数据结构
查看RTOS Revealed系列

基于我们早前对RTOS分区内存的探索,本文深入实用工具和底层数据结构,实现Nucleus RTOS及其精简版Nucleus SE中的高效内存管理。

分区池实用服务

Nucleus RTOS提供三个专用API调用,为分区池提供基本信息和管理能力:检索详细池信息、确定应用中池总数、获取所有池结构指针。前两功能在Nucleus SE全支持,因功能集减少有所差异。

获取分区池信息

NU_Partition_Pool_Information服务返回指定分区池综合快照。在Nucleus SE中,函数返回精简数据集,反映无对象命名、挂起排序、任务挂起支持。

Nucleus RTOS分区池信息API调用

服务调用原型:

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);

参数:

pool – 请求信息的分区池指针。

name – 接收池名称(含空终止符)的8字符缓冲区指针。

start_address – 接收池数据区基址的变量指针。

pool_size – 接收池总大小(字节)的变量指针。

partition_size – 接收每分区大小的变量指针。

available – 接收当前空闲分区计数的变量指针。

allocated – 接收使用中分区计数的变量指针。

suspend_type – 接收挂起策略(有效值:NU_FIFO或NU_PRIORITY)的变量指针。

tasks_waiting – 接收挂起在该池任务数的变量指针。

first_task – 接收首个挂起任务指针的变量指针。

返回:

NU_SUCCESS – 操作成功。

NU_INVALID_POOL – 提供的池指针无效。

Nucleus SE分区池信息API调用

Nucleus SE通过下方精简接口提供相同功能。因SE不支持任务挂起,相关字段省略。

服务调用原型:

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)

参数:

pool – 分区池索引。

start_address – 接收池数据区基址的变量指针。

pool_size – 接收池总大小(字节)的变量指针。

partition_size – 接收每分区大小的变量指针。

available – 接收空闲分区数的变量指针。

allocated – 接收使用中分区数的变量指针。

tasks_waiting – 接收等待任务数的变量指针(任务挂起禁用时为零)。

first_task – 接收首个挂起任务索引的变量指针(任务挂起禁用时为零)。

返回:

NUSE_SUCCESS – 操作成功。

NUSE_INVALID_POOL – 池索引无效。

NUSE_INVALID_POINTER – 一个或多个指针参数为空。

Nucleus SE分区池信息实现

SE实现简洁:例程填充请求字段,启用阻塞API时设置等待任务计数和首个任务索引(否则置零)。

Nucleus RTOS/SE分区内存:实用服务与数据结构

获取分区池数量

此服务返回应用中定义的分区池总数。在Nucleus RTOS中计数可随池创建/销毁动态变化;在Nucleus SE中构建时固定。

Nucleus RTOS分区池数量API调用

服务调用原型:

UNSIGNED NU_Established_Partition_Pools(VOID);

参数:无。

返回:活动分区池当前数量。

Nucleus SE分区池数量API调用

服务调用原型:

U8 NUSE_Partition_Pool_Count(void);

参数:无。

返回:编译时配置的分区池数量。

实现

SE例程仅返回编译时常量NUSE_PARTITION_POOL_NUMBER的值。

嵌入式

  1. 数字存储器基础:寻址、访问与易失性
  2. 微处理器:存储程序计算的演进
  3. C++结构体与类:嵌入式开发者实战指南
  4. Nucleus SE邮箱:配置与使用实战指南
  5. Nucleus RTOS信号量:实用服务与数据结构
  6. Nucleus SE信号量:概览、配置与API要点
  7. 掌握事件标志组:Nucleus RTOS/SE实用服务与数据结构
  8. Nucleus SE事件标志组:配置与API使用入门指南
  9. Nucleus SE队列:介绍与核心服务调用
  10. 云托管 vs 自建服务器:如何选择适合的数据托管方案
  11. Microsoft Azure推出区块链代币化与数据管理服务:重塑数据安全新范式
  12. 构建负责任可信AI:可解释性、问责制与伦理三大支柱实战指南