OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3303|回复: 4

LWIP底层接口函数

[复制链接]

87

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2016-3-26
在线时间
116 小时
发表于 2016-7-8 20:21:54 | 显示全部楼层 |阅读模式
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&ETH_DMASR_RBUS)!=(u32)RESET)
        {
                ETH->DMASR=ETH_DMASR_RBUS;
                ETH->DMARPDR=0;
        }
        return p;
}


返回的P是什么意思?不是应该返回q才对吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-7-8 23:38:32 | 显示全部楼层
为什么要返回q?p就是pbuf,q只是个临时变量!
回复 支持 反对

使用道具 举报

87

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2016-3-26
在线时间
116 小时
 楼主| 发表于 2016-7-23 09:32:09 | 显示全部楼层
zuozhongkai 发表于 2016-7-8 23:38
为什么要返回q?p就是pbuf,q只是个临时变量!

这里是不是返回q或者p都可以?直接对p进行操作不行吗?为什么一定要多个变量出来呢?
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-7-23 09:34:10 | 显示全部楼层
zhoujianwen 发表于 2016-7-23 09:32
这里是不是返回q或者p都可以?直接对p进行操作不行吗?为什么一定要多个变量出来呢?

学习一下C语言中链表的遍历吧。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-2-21
在线时间
16 小时
发表于 2016-8-11 00:28:05 | 显示全部楼层
for(q=p;q!=NULL;q=q->next)在这里的时候已经把p的地址赋给q了,所以操作q就是在操作p,在进行for循环的时候q=q->next,最后q指向了链表的最后NULL,而p还是开始的位置,所以返回p.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表