rtems;:变长内存区管理器(region manager)API
14.4: 函数
%A 14.4.1 : REGION_CREATE- 创建一个变长内存区域
%A
%A 函数原型:
%A
%A rtems_status_code rtems_region_create(
%A
%A rtems_name name,
%A
%A void *starting_address,
%A
%A rtems_unsigned32 length,
%A
%A rtems_unsigned32 page_size,
%A
%A rtems_attribute attribute_set,
%A
%A rtems_id *id
%A
%A );
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 成功地创造变长内存区域
%A
%A RTEMS_INVALID_NAME- 无效的任务名称
%A
%A RTEMS_INVALID_ADDRESS- id标识是空值
%A
%A RTEMS_INVALID_ADDRESS- starting_address 是空值(返回值的确相同,不是我写错了 J )
%A
%A RTEMS_INVALID_ADDRESS- address 没有按照 4 字节对齐
%A
%A RTEMS_TOO_MANY- 已经创建太多的区域
%A
%A RTEMS_INVALID_SIZE- 无效内存块 ( page ) 大小
%A
%A 描述:
%A
%A 该函数创建用户命名的变长内存区域。区域在内存中的起始地址是 starting_address, 内部页面初始大小为page_size,页面数目为length。从区域被分派的段将会是长度的 page_size 位元组的复。 变长内存区域的ID存放在*id中。
%A
%A 对于控制和维护变长内存区域,RTEMS 从RNCB池中分配空闲RNCB控制块。虽然RNCB并占用变长内存区域的存储空间,但是变长内存区域相关的信号量将会占用存储空间。
%A
%A attribute_set参数如果是RTEMS_PRIORITY那么阻塞任务按照优先级排序,如果是RTEMS_FIFO(缺省),任务将会按照FIFO排序。
%A
%A starting_address 和page_size 必须符合32位系统的对齐方式。
%A
%A
%A 14.4.2 : REGION_IDENT- 获取变长内存区的 ID
%A
%A 函数原型 :
%A
%A rtems_status_code rtems_region_ident(
%A
%A rtems_name name,
%A
%A rtems_id *id
%A
%A );
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功地找到内存区
%A
%A RTEMS_INVALID_ADDRESS- ID 标识是空值
%A
%A RTEMS_INVALID_NAME- 找不到对应内存区
%A 14.4.3 : REGION_DELETE- 删除一个变长内存区
%A
%A 函数原型:
%A
%A rtems_status_code rtems_region_delete(
%A
%A rtems_id id
%A
%A );
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 成功地删除变长内存区
%A
%A RTEMS_INVALID_ID- 无效区域ID标识
%A
%A RTEMS_RESOURCE_IN_USE- 区域中有正在使用的内存块
%A
%A 描述:
%A
%A 该函数删除ID标识指定的变长内存区。如果其中有内存块正在被使用,那么变长内存区不能删除。删除后释放RNCB。
%A
%A
%A
%A 注意:
%A
%A 任何知道区域 ID标识的本地任务都能删除内存区。
%A
%A
%A 14.4.4 : REGION_EXTEND-动态增加变长内存区尺寸
%A
%A 函数原型:
%A
%A rtems_status_code rtems_region_extend(
%A
%A rtems_id id,
%A
%A void *starting_address,
%A
%A rtems_unsigned32 length
%A
%A );
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功地增加内存到内存区
%A
%A RTEMS_INVALID_ADDRESS- starting_address 是空值
%A
%A RTEMS_INVALID_ID- 无效 ID 标识
%A
%A RTEMS_INVALID_ADDRESS- 无效的地址
%A
%A 描述 :
%A
%A 该函数增加为可变内存区增加内存 , starting_address 是增加的内存块起始地址 , legnth 是增加量。
%A
%A 注意:
%A
%A 调用函数的任务不必是创建内存区的任务。
%A
%A
%A 14.4.5 : REGION_GET_SEGMENT-从变长内存区获取内存块
%A
%A 函数原型:
%A
%A rtems_status_code rtems_region_get_segment(
%A
%A rtems_id id,
%A
%A rtems_unsigned32 size,
%A
%A rtems_option option_set,
%A
%A rtems_interval timeout,
%A
%A void **segment
%A
%A );
%A
%A
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功地获取内存块
%A
%A RTEMS_INVALID_ADDRESS- segment 是空值
%A
%A RTEMS_INVALID_ID- 无效 ID 标识
%A
%A RTEMS_INVALID_SIZE- 请求的内存块大小为 0 或者超出区域中可允许的最大尺寸
%A
%A RTEMS_UNSATISFIED- 无法获得需求尺寸的内存
%A
%A RTEMS_TIMEOUT- 计时器时间到
%A
%A RTEMS_OBJECT_WAS_DELETED- 当等候的时候 , 信号量被删除
%A
%A 描述 :
%A
%A 该函数从 ID 标识指定的变长内存区中取的内存块。被分派的段地址在段中被退还。option_set中RTEMS_WAIT 或者RTEMS_NO_WAIT分量用来叙述调用者在没有合适内存块时是否愿等候。成功获得内存块后,调用者将获得RTEMS_SUCCESSFUL返回码。
%A
%A 如果调用者使用RTEMS_NO_WAIT立即返回,并且没有合适内存区,那么函数将返回对应错误码。如果调用者要等待合适的内存块,那么任务排序将按照RTEMS_PRIORITY 或者RTEMS_FIFO 方式进行。
%A
%A timeout参数叙述任务愿意等候的时间长度。如果该参数被设置为RTEMS_NO_TIMEOUT,那么调用任务将会永远等候。
%A
%A 注意:
%A
%A 位任务时间分配的内存块会比任务需求的内存块大,这主要是因为信号量的开销。
%A
%A 如果需要等待指定时间,就需要定时器的支持。
%A
%A
%A 14.4.6 : REGION_RETURN_SEGMENT- 释放内存块到内存区
%A
%A 函数原型:
%A
%A rtems_status_code rtems_region_return_segment(
%A
%A rtems_id id,
%A
%A void *segment
%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 注意:
%A
%A 如果释放后内存块满足阻塞队列的要求,那么任务将会被就绪,并有可能产生抢占式调度。
%A
%A 任务需求的内存小于实际分配的内存。
%A
%A 一个候补任务有一个较高的优先级胜于召集任务
%A
%A 必需的段尺寸藉着候补任务是较少的超过或对被退还的段尺寸相等。
%A
%A 14.4.7 : REGION_GET_SEGMENT_SIZE-获得一个内存块的尺寸
%A
%A 函数原型:
%A
%A rtems_status_code rtems_region_get_segment_size(
%A
%A rtems_id id,
%A
%A void *segment,
%A
%A rtems_unsigned32 *size
%A
%A );
%A
%A
%A
%A 返回值代表的状态 :
%A
%A RTEMS_SUCCESSFUL- 成功地获得内存块尺寸
%A
%A RTEMS_INVALID_ADDRESS- segment 是空值
%A
%A RTEMS_INVALID_ADDRESS- size 是空值
%A
%A RTEMS_INVALID_ID- 无效区域 ID标识
%A
%A RTEMS_INVALID_ADDRESS- segment超出了内存区的界限
%A
%A
%A
%A 描述:
%A
%A 该函数获得内存区中一个内存块的尺寸
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。