新闻  |   论坛  |   博客  |   在线研讨会
rtems定长内存区(Partition)管理器
tongxin | 2009-04-12 20:35:09    阅读:891   发布文章

16.1: 介绍
%A
%A 定长内存区管理器为动态分配固定尺寸内存单元提供了接口。 由定长内存区管理器提供的函数是:
%A
%A rtems_partition_create- 创建一个内存定长内存区
%A
%A rtems_partition_ident- 获取定长内存区的 ID标识
%A
%A rtems_partition_delete- 删除一个定长内存区
%A
%A rtems_partition_get_buffer- 从定长内存区中获取内存
%A
%A rtems_partition_return_buffer- 将缓冲释放回定长内存区
%A
%A
%A 16.2: 背景
%A 16.2.1 : 定长内存区管理器定义
%A
%A 一个定长内存区是一个连续的内存块,内存块中有固定大小的buffer(linux 2.6中的MemoryPool和他比较类似)。
%A
%A 每个定长内存区使用链表的方式管理和维护buffer定长内存区。任务从定长内存区内存队列的头部获取buffer,释放时放回队列的尾部。RTMES中链表的组织和平时常用的指针链表略有不同,他使用buffer中特定的8个字节作为链表指针。buffer分配后,整个buffer都可以用来存储数据。由于没有专门的MMU模块,如果因为错误操作修改了buffer附近的内存区域,可能导致链表以及数据的破坏。所以对内存定长内存区的操作应该严格使用管理器提供的API。
%A 16.2.2 : 定长内存区的属性集合
%A
%A 有效的定长内存区属性如下所示:
%A
%A RTEMS_LOCAL- 地方任务 (默认)
%A
%A RTEMS_GLOBAL- 全局任务
%A
%A RTEMS_DEFAULT_ATTRIBUTES代表了缺省的属性集。定长内存区API中的attribute_set 参数用来指定定长内存区属性。
%A 16.3: 操作
%A 16.3.1 : 创造一个定长内存区
%A
%A rtems_partition_create 函数创建一个用户命名的内存定长内存区。定长内存区的名字 , 起始地址 , 长度和内存尺寸全部在 rtems_partition_create 函数的参数中指定。RTEMS在 定长内存区控制块(PTCB) 链表中分配一个空闲的 PTCB供系统管理定长内存区。定长内存区的buffer数目根据buffer大小以及定长内存区大小可以计算出,创建后将返回定长内存区的ID标识。
%A 16.3.2 : 获得定长内存区ID标识
%A
%A 当一个定长内存区被建立的时候, RTEMS 产生一个独特的定长内存区 ID标识,该ID将伴随定长内存区的整个生存周期。定长内存区 ID标识可二种方法获得。rtems_partition_create 函数返回以及rtems_partition_ident 函数。
%A 16.3.3 : 获取buffer内存
%A
%A 任务通过调用rtems_partition_get_buffer 函数获得一个buffer。如果有可用缓存,那么函数立刻返回一个成功码。否则返回错误码,任务不会因为内存获取失败而阻塞。
%A 16.3.4 : 释放一个内存区
%A
%A rtems_partition_return_buffer 函数将缓存释放回空闲链表。如果释放的缓存不属于函数制定定长内存区,函数返回错误码。
%A 16.3.5 : 删除一个定长内存区
%A
%A rtems_partition_delete 函数用于删除RTEMS内存定长内存区。 当定长内存区被删除, 对应的PTCB将会释放。如果定长内存区中有正在使用的buffer,那么不能释放该定长内存区。
%A%A
%A

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客