_OBJ_CONTAINER_LIST_INIT(c)的理解

说的在具体点就是:
#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                  
 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值