主页 文档 下载 莱特 沙龙 English

RTESM文档
RTEMS精彩应用
RTEMS版权说明
其他RTOS
ARM/DSP专区
AVR/FPGA/PCB
嵌入式文件系统
ARM AVR仿真器DIY
莱特电子工作室
联系我们
 


定长内存区(Partition)管理器 2

作者 Ray

RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray

16.4: 函数 API

16.4.1 : PARTITION_CREATE- 创建一个内存区

函数原型:

rtems_status_code rtems_partition_create(

rtems_name name,

void *starting_address,

rtems_unsigned32 length,

rtems_unsigned32 buffer_size,

rtems_attribute attribute_set,

rtems_id *id

);

 

返回值代表的状态 :

RTEMS_SUCCESSFUL- 成功创建分区

RTEMS_INVALID_NAME- 无效分区名字

RTEMS_TOO_MANY- 已经创建太多分区

RTEMS_INVALID_ADDRESS- 地址不是 32 位对齐方式

RTEMS_INVALID_ADDRESS- starting_address 是空值

RTEMS_INVALID_ADDRESS- id 是空值

RTEMS_INVALID_SIZE- 内存区长度尺寸是 0

RTEMS_INVALID_SIZE- 定长内存区大小比内存块小

RTEMS_INVALID_SIZE- 内存区大小不是 4 的整数倍

RTEMS_MP_NOT_CONFIGURED- 未配置多重处理 ( 针对全局内存区 )

RTEMS_TOO_MANY- 太多全局对象

 

描述 :

该函数创建一个从 starting_address 开始的连续定长内存区 , 定长内存区大小为 length , 里面每个内存块大小为 buffer_size 。id返回了定长内存区的id。函数中RTEMS 为定长内存区分配 PTCB并且将其初始化。

 

注意:

starting_address 和 buffer_size 参数一定要是是四的整数倍。

定长内存区没有被 RTEMS 用来储存定长内存区控制区段。

全局定长内存区的 PTCB 在本地结点分配。全局定长内存区必须在共享内存中创建。为了减少开销,除非是远端任务发出请求,全局的定长内存区仍然被当作本地内存区处理。当一个全局定长内存区建立时,分区的名字和ID标识将存放到全局对象表格中并会传送到每个结点上。

全局对象的总数,包括分区,被配置表格中 maximum_global_objects字段限制。

 

16.4.2 : PARTITION_IDENT-获取定长内存区的 ID标识

函数原型:

rtems_status_code rtems_partition_ident(

rtems_name name,

rtems_unsigned32 node,

rtems_id *id

);

 

返回值代表的状态 :

RTEMS_SUCCESSFUL- 成功地获取 ID

RTEMS_INVALID_ADDRESS- ID 标识是空值

RTEMS_INVALID_NAME- 没找到对应名字

RTEMS_INVALID_NODE- 无效的结点 ID 标识

 

描述 :

该函数按照名称搜索内存分区 ID 标识。 如果分区名字不唯一,将会返回第一个找到的符合条件定长内存区ID。

 

注意:

如果node是 RTEMS_SEARCH_ALL_NODES,将搜索所有的节点,次序是先本地,然后按照节点编号搜索。

如果结点不是本地的,将会搜索对应远端节点的全局内存器导出信息。函数将会在本地的全局信息表中查找相关信息。

 

 

16.4.3 : PARTITION_DELETE- 删除一个定长内存区

函数原型 :

rtems_status_code rtems_partition_delete(

rtems_id id

);

 

返回值代表的状态 :

RTEMS_SUCCESSFUL- 分区成功地被删除

RTEMS_INVALID_ID- 无效分区 ID 标识

RTEMS_RESOURCE_IN_USE- 区内内存块正在被使用

RTEMS_ILLEGAL_ON_REMOTE_OBJECT- 不能删除远端定长内存区

 

描述 :

该函数删除 ID 标识指定的分区。 如果分区内有内存块正在被使用 , 那么无法删除定长内存区 , 函数返回 RTEMS_RESOURCE_IN_USE 。删除后PTCB将被回收。

 

注意:

调用者不必是创建者,只要是知道分区ID标识的本地任务就可以进行删除。

 

当一个全局分区被删除时,分区的ID标识将会广播到每个节点。

内存分区驻留在本地节点上,即使分区使用 RTEMS_GLOBAL选项创建。

 

16.4.4 : PARTITION_GET_BUFFER-从一个定长内存区获取内存块

函数原型:

rtems_status_code rtems_partition_get_buffer(

rtems_id id,

void **buffer

);

 

返回值代表的状态 :

RTEMS_SUCCESSFUL- 成功地获得内存

RTEMS_INVALID_ADDRESS- 内存是空

RTEMS_INVALID_ID- 无效分区 ID 标识

RTEMS_UNSATISFIED- 所有的内存都被分配

 

描述 :

该函数从 ID 标识指定的内存区获得内存块。使用buffer存放返回值。

 

注意:

所有的内存必须按照4字节的方式对齐。

任务不会因为获取内存而等待。

如果需要从远程节点获取全局的内存,该函数将会对远程节点发出对应请求。

 

16.4.5 : PARTITION_RETURN_BUFFER-将内存块释放回内存区

函数原型:

rtems_status_code rtems_partition_return_buffer(

rtems_id id,

void *buffer

);

 

返回值代表的状态:

RTEMS_SUCCESSFUL- 成功地释放内存

RTEMS_INVALID_ADDRESS- 内存是空

RTEMS_INVALID_ID- 无效分区 ID标识

RTEMS_INVALID_ADDRESS - 所有内存块不是来自于该内存区

 

描述:

该函数将内存块释放回ID标识指定的定长内存区。

 

注意:

如果需要对远端节点内存进行操作,该函数将会对远程节点发出对应请求。

 

 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有