rt_list_t list;/* 对象列表 */rt_list_t tlist;/* 线程列表 *//* 栈指针与入口指针 */void*sp;/* 栈指针 */void*entry;/* 入口函数指针 */void*parameter;/* 参数 */void*stack_addr;/* 栈地址指针 */rt_uint32_t stack_size;/* 栈大小 *//* 错误代码 */rt_err_t error;/* 线程错...
voidrt_system_scheduler_init(void){register rt_base_t offset;rt_scheduler_lock_nest=0;for(offset=0;offset<RT_THREAD_PRIORITY_MAX;offset++){rt_list_init(&rt_thread_priority_table[offset]);}rt_current_priority=RT_THREAD_PRIORITY_MAX-1;rt_current_thread=RT_NULL;/* initialize ready priority ...
RT-Thread中的链表指针定义为rt_list_t或者rt_slist_t,而不是节点类型作为指针,这就可以使链表的操作(例如:插入、删除)不用和节点类型绑定,使得一套插入删除函数可以被各种节点类型使用,甚至可以将不同类型的节点插入链表。 使用举例://定义单向链表结构体类型structrt_slist_node {structrt_slist_node *next;...
rt_list_t list;/**< 内核对象的列表节点 */};typedef struct rt_object*rt_object_t;/**< 内核对象数据类型重定义 */ 这个对象结构体包含的信息都是各类对象的公共部分。每类对象都有创建一个对应的结构体,如: 定时器对象: 线程对象: 有点不明白的是,线程对象结构体怎么直接把rt_object里的内容全搬过...
rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];初始化就绪列表:for (offset = 0; ...
rt_list_t tlist; /* 线程链表节点 */ }; 线程控制块类型 typedef struct rt_thread *rt_thread_t; 线程控制块指针 3、实现线程创建函数 rt_err_t rt_thread_init(struct rt_thread *thread, void (*entry)(void *parameter), void *parameter, ...
RT_OBJECT_HOOK_CALL(rt_timer_enter_hook, (t)); /* remove timer from timer list firstly */ _rt_timer_remove(t); if (!(t->parent.flag & RT_TIMER_FLAG_PERIODIC)) { t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; } /*add timer to temporary list */ ...
通过打印rt_object等结构体的大小,了解了rt_object的基本构成。 基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器控制块),rt_list_t(双向链表)的RAM占用大小。 了解到rt_object的派生方式,增加其他对象的特殊属性,构成其他的对象,用链表链接起来,用于OS管理。
//在rt_object_delete(rt_object_t object)函数中,主要执行了两个操作,一个是rt_list_remove(&object->list),一个是RT_KERNEL_FREE(object); //object是指针,作为变量传递赋值的时候,可不等价于传递地址了吗? //malloc函数在分配地址的时候,会自动先拿出4字节存储分配的内存大小,然后把后面的地址返回; ...
voidrt_system_scheduler_init(void){register rt_base_t offset;rt_scheduler_lock_nest=0;for(offset=0;offset<RT_THREAD_PRIORITY_MAX;offset++){rt_list_init(&rt_thread_priority_table[offset]);}rt_current_priority=RT_THREAD_PRIORITY_MAX-1;rt_current_thread=RT_NULL;/* initialize ready priority ...