内核对象容器的数据结构: structrt_object_information{/* 对象类型 */enumrt_object_class_typetype;/* 对象链表 */rt_list_tobject_list;/* 对象大小 */rt_size_tobject_size;}; 一类对象由一个 rt_object_information 结构体来管理,每一个这类对象的具体实例都通过链表的形式挂接在 object_list 上。而...
SAL 套接字表数据结构: 1static struct sal_socket_table socket_table; 初始化sal套接字: 1int sal_init(void); 该初始化函数主要是对 SAL 组件进行初始化,动态申请socket_table对象。支持组件重复初始化判断,完成对组件中使用的互斥锁等资源的初始化。如果AT组件使用了SAL 套接字,则在sal_at_netdev_set...
所以个人理解内核对象管理器,主要是为其他内核功能模块提供数据管理支撑,属于内核底层支持功能组件,并从设计上兼顾了可扩展、可裁剪的需求。 怎么实现的呢? RT-Thread内核对象子系统其主要核心数据结构如下: 其中rt_object_class_type枚举定义内核对象类别: 而rt_object_information则抽象了对象类型,加入了一个双向链表指...
开始分析之前先做几个说明,RT-Thread 中用的最多的是双向循环链表,而且是插入式链表,这样的链表只起链接作用,本身不携带数据,因此可以插入到各种自定义的结构体中,这些不同的结构体也能灵活的连接起来。这也是个人最喜欢的地方,对比 ucos 一个结构体一个链表的臃肿设计,RT-Thread 这个设计方便太多,链表有了统一的...
数据结构 RT-Thread 定义了 rt_ringbuffer 结构体,包括四组成员:缓冲区指针 buffer_ptr、缓冲区大小 buffer_size、读指针、写指针。 structrt_ringbuffer { rt_uint8_t*buffer_ptr; rt_uint16_tread_mirror:1; rt_uint16_tread_index:15; rt_uint16_twrite_mirror:1; ...
在RT-Thread 中,线程控制块由结构体struct rt_thread 表示,线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包含线程与线程之间连接用的链表结构,线程等待事件集合等,详细定义如下: 代码语言:javascript ...
所以个人理解内核对象管理器,主要是为其他内核功能模块提供数据管理支撑,属于内核底层支持功能组件,并从设计上兼顾了可扩展、可裁剪的需求。 怎么实现的呢? RT-Thread内核对象子系统其主要核心数据结构如下: 其中rt_object_class_type枚举定义内核对象类别:
如果数据结构没有进行字节对齐,例如一个2字节的数据结构放置在奇数地址上,那么在访问这个数据结构时就需要进行两次内存访问操作。而如果数据结构进行了字节对齐,将其放置在合适的地址上,可以减少内存访问次数,提高数据的读取效率。 CPU对齐要求:许多CPU架构对于某些数据类型有对齐要求。如果数据没有按照要求对齐,可能会...
rt-thread的小内存管理是其默认的堆内存管理算法。是采用静态链表来实现的,源文件为mem.c。 1.数据结构 === struct heap_mem { /* magic and used flag */ rt_uint16_t magic; // 如果此内存块被分配了,则置0x1ea0,以此标志 // 此块内存是正常分配出来的,而不是非法指针 rt_...
rt-thread的小内存管理是其默认的堆内存管理算法。是采用静态链表来实现的,源文件为mem.c。 1.数据结构 === struct heap_mem { /* magic and used flag */ rt_uint16_t magic; // 如果此内存块被分配了,则置0x1ea0,以此标志 // 此块内存是正常分配出来的,而不是非法指针 rt_...