天线|RF射频
直播中

王跃

7年用户 120经验值
私信 关注
[问答]

请问LWIP底层接口函数中返回的P是什么意思?

static struct pbuf * low_level_input(struct netif *netif)
{  
        struct pbuf *p, *q;
        u16_t len;
        int l =0;
        FrameTypeDef frame;
        u8 *buffer;
        p = NULL;
        frame=ETH_Rx_Packet();
        len=frame.length;
        buffer=(u8 *)frame.buffer;
        p=pbuf_alloc(PBUF_RAW,len,PBUF_POOL);
        if(p!=NULL)
        {
                for(q=p;q!=NULL;q=q->next)
                {
                        memcpy((u8_t*)q->payload,(u8_t*)&buffer[l], q->len);
                        l=l+q->len;
                }   
        }
        frame.descriptor->Status=ETH_DMARxDesc_OWN;
        if((ETH->DMASRÐ_DMASR_RBUS)!=(u32)RESET)
        {
                ETH->DMASR=ETH_DMASR_RBUS;
                ETH->DMARPDR=0;
        }
        return p;
}
返回的P是什么意思?不是应该返回q才对吗?

回帖(4)

陈藜文

2019-11-5 08:26:13
为什么要返回q?p就是pbuf,q只是个临时变量!
举报

张秀云

2019-11-5 08:43:45
这里是不是返回q或者p都可以?直接对p进行操作不行吗?为什么一定要多个变量出来呢?
举报

李远

2019-11-5 09:00:18
学习一下C语言中链表的遍历吧。
举报

华农武

2019-11-5 09:10:56
for(q=p;q!=NULL;q=q->next)在这里的时候已经把p的地址赋给q了,所以操作q就是在操作p,在进行for循环的时候q=q->next,最后q指向了链表的最后NULL,而p还是开始的位置,所以返回p.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分