《嵌入式实时操作系统:RT-Thread设计与实现》 —3.5.4 内核对象管理方式
3.5.4 内核对象管理方式
内核对象容器的数据结构如下。
struct rt_object_information
{
/* 对象类型 */
enum rt_object_class_type type;
/* 对象链表 */
rt_list_t object_list;
/* 对象大小 */
rt_size_t object_size;
};
一类对象由一个rt_object_information结构体来管理,这类对象的每个具体实例都通过链表的形式挂接在object_list上。而这类对象的内存块尺寸由object_size标识(每一类对象的具体实例所占有的内存块大小都是相同的)。
1.初始化对象
在使用一个未初始化的静态对象前必须先对其进行初始化。初始化对象使用以下接口:
void rt_object_init(struct rt_object* object ,
enum rt_object_class_type type ,
const char* name)
当调用该函数进行对象初始化时,系统会把这个对象放置到对象容器中进行管理,即初始化对象的一些参数,然后把这个对象节点插入到对象容器的对象链表中,对该函数的输入参数的描述如表3-2所示。
表3-2 rt_object_init()的输入参数
2.脱离对象
可从内核对象管理器中脱离一个对象。脱离对象使用以下接口:
void rt_object_detach(rt_object_t object);
调用该接口,可使得一个静态内核对象从内核对象容器中脱离出来,即从内核对象容器链表上删除相应的对象节点。对象脱离后,对象占用的内存并不会被释放。
3.分配对象
上述描述的都是对象初始化、脱离的接口,都是在面向对象内存块已经有的情况下,而动态对象则可以在需要时申请,不需要时释放内存空间给其他应用使用。申请分配新的对象可以使用以下接口:
rt_object_t rt_object_allocate(enum rt_object_class_type type ,
const char* name)
在调用以上接口时,系统首先需要根据对象类型来获取对象信息(特别是对象类型的大小信息,以便系统能够分配正确大小的内存数据块),而后从内存堆中分配对象所对应大小的内存空间,然后再对该对象进行必要的初始化,最后将其插入到它所在的对象容器链表中。对该函数的输入参数的描述如表3-3所示。
表3-3 rt_object_allocate()的输入参数和返回值
4.删除对象
当不再使用一个动态对象时,可以调用如下接口删除该对象,并释放相应的系统资源:
void rt_object_delete(rt_object_t object)
当调用以上接口时,首先从对象容器链表中脱离对象,然后释放对象所占用的内存。对该函数的输入参数的描述如表3-4所示。
5.辨别对象
判断指定对象是否是系统对象(静态内核对象)。辨别对象使用以下接口:
rt_err_t rt_object_is_systemobject(rt_object_t object);
调用rt_object_is_systemobject接口可判断一个对象是否是系统对象,在RT-Thread操作系统中,一个系统对象就是一个静态对象,对象类型标识上RT_Object_Class_Static位置位。通常,使用rt_object_init()方式初始化的对象都是系统对象。对该函数的输入参数的描述如表3-5所示。
表3-5 rt_object_is_systemobject()的输入参数
- 点赞
- 收藏
- 关注作者
评论(0)