说的在具体点就是:
#define _OBJ_CONTAINER_LIST_INIT(c) \
{&(rt_object_container[c].object_list),&(rt_object_container[c].object_list)}(1)
式(1)让人感到迷惑主要是因为&(rt_object_container[c].object_list)命令连续出现两次
首先来到_OBJ_CONTAINER_LIST_INIT(c)调用的地方:
static struct rt_object_information rt_object_container[RT_Object_Info_Unknown] =
{
/*初始化对象容器-线程*/
{
RT_Object_Class_Thread ,
_OBJ_CONTAINER_LIST_INIT (RT_Object_Info_Thread ),
sizeof(struct rt_thread)
}, (2)
式(2)的类型为rt_object_information型:
/**
*内核对象信息结构体
*
*/
struct rt_object_information
{
enum rt_object_class_type type; /*对象类型*/
rt_list_t object_list; /*对象列表节点*/
rt_size_t object_size; /*对象大小*/
}; (3)
将(2)和(3)相对应:
RT_Object_Class_Thread --------------------->rt_object_class_type
_OBJ_CONTAINER_LIST_INIT (RT_Object_Info_Thread )------------------->rt_list_t
注意rt_list_t 包含着 *next 和 *prev两个指针,刚好对应着{&(rt_object_container[c].object_list),
&(rt_object_container[c].object_list)},*next 和 *prev两个指针都为&(rt_object_container[c].object_list),
意味着形成闭合双向链表。
sizeof(struct rt_thread)--------------------------------->rt_size_t