object = rt_list_entry(node, struct rt_object, list); node是information->object_list中的某个对象指针,来自于某个rt_object结构体中的成员rt_list_t list。 调用rt_list_entry()函数,根据成员(rt_list_t list)的地址获得结构体 rt_object 的地址(对象指针)。 information =rt_object_get_information(R...
对应到这里的宏,第一条初始化语句为pos = rt_list_entry((head)->next, typeof(*pos), member);,是一个对pos的赋值语句,所以这里结合代码和上面的注释就能很容易知道第一个参数pos就类似普通for循环的循环变量。初始化又用到了另外一个宏rt_list_entry,此宏相关的代码如下: /** @brief get the struct ...
总的来说rt_list_entry会通过成员地址返回包含该成员的实例的地址。一般使用方式是,ptr为类中rt_list_t成员的地址,type为类名,member为成员名 这段代码搜寻timer_list这个列表中的所有timer,当 else if ((t->timeout_tick - timer->timeout_tick) < RT_TICK_MAX / 2) 时停止,后面在这个位置,把当前timer...
voidrt_system_scheduler_start(void){register struct rt_thread*to_thread;register rt_ubase_t highest_ready_priority;highest_ready_priority=__rt_ffs(rt_thread_ready_priority_group)-1;/* get switch to thread */to_thread=rt_list_entry(rt_thread_priority_table[highest_ready_priority].next,struct...
所以我们要通过node来获取object结构体的起始地址。所以调用rt_list_entry() 后,obj就可以指向这个对象的起始地址了,故下图中Node和obj的指向是不一样的。 得到obj,就可以判断是否与object一样,我个人理解是判断这个obj指向的是不是真的object对象,如果不是,会提示。一个for循环结束后,Node指向后一个对象: ...
while (!rt_list_isempty(&rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1])) { t = rt_list_entry(rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next, struct rt_timer, row[RT_TIMER_SKIP_LIST_LEVEL - 1]); current_tick = rt_tick_get(); ...
void *entry; /* 线程入口地址 */ void *parameter; /* 线程形参 */ void *stack_addr; /* 线程起始地址 */ rt_uint32_t stack_size; /* 线程栈大小,单位为字节 */ rt_list_t tlist; /* 线程链表节点 */ }; 线程控制块类型 typedef struct rt_thread *rt_thread_t; 线程控制块指针 ...
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;/* 线程错...
thread=rt_list_entry( rt_thread_priority_table[i].next, structrt_thread, tlist);if(thread->remaining_tick >0) { thread->remaining_tick --; } }/*系统调度*/rt_schedule(); (4) } (1)系统时基计数器,是一个全局变量,用来记录产生了多少次SysTick 中断。
/* 线程控制块*/struct rt_thread{/* rt 对象*/char name[RT_NAME_MAX];/* 线程名称*/rt_uint8_t type;/* 对象类型*/rt_uint8_t flags;/* 标志位*/rt_list_t list;/* 对象列表*/rt_list_t tlist;/* 线程列表*//* 栈指针与入口指针*/void*sp;/* 栈指针*/void*entry;/* 入口函数指针...