rtems:定长内存区(Partition)管理器 2
16.4: 函数 API
%A 16.4.1 : PARTITION_CREATE- 创建一个内存区
%A
%A 函数原型:
%A
%A rtems_status_code rtems_partition_create(
%A
%A rtems_name name,
%A
%A void *starting_address,
%A
%A rtems_unsigned32 length,
%A
%A rtems_unsigned32 buffer_size,
%A
%A rtems_attribute attribute_set,
%A
%A rtems_id *id
%A
%A );
%A
%A
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功创建分区
%A
%A RTEMS_INVALID_NAME- 无效分区名字
%A
%A RTEMS_TOO_MANY- 已经创建太多分区
%A
%A RTEMS_INVALID_ADDRESS- 地址不是 32 位对齐方式
%A
%A RTEMS_INVALID_ADDRESS- starting_address 是空值
%A
%A RTEMS_INVALID_ADDRESS- id 是空值
%A
%A RTEMS_INVALID_SIZE- 内存区长度尺寸是 0
%A
%A RTEMS_INVALID_SIZE- 定长内存区大小比内存块小
%A
%A RTEMS_INVALID_SIZE- 内存区大小不是 4 的整数倍
%A
%A RTEMS_MP_NOT_CONFIGURED- 未配置多重处理 ( 针对全局内存区 )
%A
%A RTEMS_TOO_MANY- 太多全局对象
%A
%A
%A
%A 描述 :
%A
%A 该函数创建一个从 starting_address 开始的连续定长内存区 , 定长内存区大小为 length , 里面每个内存块大小为 buffer_size 。id返回了定长内存区的id。函数中RTEMS 为定长内存区分配 PTCB并且将其初始化。
%A
%A
%A
%A 注意:
%A
%A starting_address 和 buffer_size 参数一定要是是四的整数倍。
%A
%A 定长内存区没有被 RTEMS 用来储存定长内存区控制区段。
%A
%A 全局定长内存区的 PTCB 在本地结点分配。全局定长内存区必须在共享内存中创建。为了减少开销,除非是远端任务发出请求,全局的定长内存区仍然被当作本地内存区处理。当一个全局定长内存区建立时,分区的名字和ID标识将存放到全局对象表格中并会传送到每个结点上。
%A
%A 全局对象的总数,包括分区,被配置表格中 maximum_global_objects字段限制。
%A
%A
%A 16.4.2 : PARTITION_IDENT-获取定长内存区的 ID标识
%A
%A 函数原型:
%A
%A rtems_status_code rtems_partition_ident(
%A
%A rtems_name name,
%A
%A rtems_unsigned32 node,
%A
%A rtems_id *id
%A
%A );
%A
%A
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功地获取 ID
%A
%A RTEMS_INVALID_ADDRESS- ID 标识是空值
%A
%A RTEMS_INVALID_NAME- 没找到对应名字
%A
%A RTEMS_INVALID_NODE- 无效的结点 ID 标识
%A
%A
%A
%A 描述 :
%A
%A 该函数按照名称搜索内存分区 ID 标识。 如果分区名字不唯一,将会返回第一个找到的符合条件定长内存区ID。
%A
%A
%A
%A 注意:
%A
%A 如果node是 RTEMS_SEARCH_ALL_NODES,将搜索所有的节点,次序是先本地,然后按照节点编号搜索。
%A
%A 如果结点不是本地的,将会搜索对应远端节点的全局内存器导出信息。函数将会在本地的全局信息表中查找相关信息。
%A
%A
%A
%A
%A 16.4.3 : PARTITION_DELETE- 删除一个定长内存区
%A
%A 函数原型 :
%A
%A rtems_status_code rtems_partition_delete(
%A
%A rtems_id id
%A
%A );
%A
%A
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 分区成功地被删除
%A
%A RTEMS_INVALID_ID- 无效分区 ID 标识
%A
%A RTEMS_RESOURCE_IN_USE- 区内内存块正在被使用
%A
%A RTEMS_ILLEGAL_ON_REMOTE_OBJECT- 不能删除远端定长内存区
%A
%A
%A
%A 描述 :
%A
%A 该函数删除 ID 标识指定的分区。 如果分区内有内存块正在被使用 , 那么无法删除定长内存区 , 函数返回 RTEMS_RESOURCE_IN_USE 。删除后PTCB将被回收。
%A
%A
%A
%A 注意:
%A
%A 调用者不必是创建者,只要是知道分区ID标识的本地任务就可以进行删除。
%A
%A
%A
%A 当一个全局分区被删除时,分区的ID标识将会广播到每个节点。
%A
%A 内存分区驻留在本地节点上,即使分区使用 RTEMS_GLOBAL选项创建。
%A
%A
%A 16.4.4 : PARTITION_GET_BUFFER-从一个定长内存区获取内存块
%A
%A 函数原型:
%A
%A rtems_status_code rtems_partition_get_buffer(
%A
%A rtems_id id,
%A
%A void **buffer
%A
%A );
%A
%A
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功地获得内存
%A
%A RTEMS_INVALID_ADDRESS- 内存是空
%A
%A RTEMS_INVALID_ID- 无效分区 ID 标识
%A
%A RTEMS_UNSATISFIED- 所有的内存都被分配
%A
%A
%A
%A 描述 :
%A
%A 该函数从 ID 标识指定的内存区获得内存块。使用buffer存放返回值。
%A
%A
%A
%A 注意:
%A
%A 所有的内存必须按照4字节的方式对齐。
%A
%A 任务不会因为获取内存而等待。
%A
%A 如果需要从远程节点获取全局的内存,该函数将会对远程节点发出对应请求。
%A
%A
%A 16.4.5 : PARTITION_RETURN_BUFFER-将内存块释放回内存区
%A
%A 函数原型:
%A
%A rtems_status_code rtems_partition_return_buffer(
%A
%A rtems_id id,
%A
%A void *buffer
%A
%A );
%A
%A
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 成功地释放内存
%A
%A RTEMS_INVALID_ADDRESS- 内存是空
%A
%A RTEMS_INVALID_ID- 无效分区 ID标识
%A
%A RTEMS_INVALID_ADDRESS - 所有内存块不是来自于该内存区
%A
%A
%A
%A 描述:
%A
%A 该函数将内存块释放回ID标识指定的定长内存区。
%A
%A
%A
%A 注意:
%A
%A 如果需要对远端节点内存进行操作,该函数将会对远程节点发出对应请求。
%A
%A
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。