【原创】LWIP技术--->答网友问080421

网友:冰火枫林

问:

ethernetif_input()函数我是作为了一个任务建立的,ethernetif_input()通过查询来看太网是否有新数据我也明白。low_level_input()的作用应该是读取缓冲区得到数据吧,但是我不明白的是
static struct pbuf * low_level_input(struct netif *netif)
{
 struct ethernetif *ethernetif;
 struct pbuf *p = NULL, *q;
 u32_t len;
 int flag;
 unsigned int i;
 unsigned char buffer[4096];
 unsigned char *des;
 unsigned char *data;
 
 data =  buffer;
   
 ethernetif = netif->state;
  
 flag = board_eth_rcv(data,&len);

 if(flag == 1) {
 
    //p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
    //Modify by Small.Box at 06.10.16
    if(p == NULL) {
     p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
    }
  
    if (p != NULL) {
       for(q = p; q != NULL; q = q->next) {
    memcpy(q->payload,(unsigned char *)data, q->len);
         data += q->len;
      }

    }
 }
  return p;   
}
这个函数怎么就能实现这个功能呢?能结合low_level_input()程序讲讲low_level_input()这个函数如何实现读取缓冲区得到的数据的呢?也就是给这个low_level_input()做一下注释,其中希望详细讲一下board_eth_rcv(data,&len);是用来做什么的?我的理解是接收数据的核心,但是那两个参数data,&len我不明白data作为参数有什么用,&len做为参数是想返回帧长吧。 上次我提的问题想表达的也是这个问题。
答:low_level_input()这个函数主要完成的就是信息包接收的功能;

在这个函数里面完成信息的接收功能的是board_eth_rcv(data,len);

对于这个函数主要功能是读取以太网缓冲区的里面的数据,这个函数的原型是这样的

int board_eth_rcv(unsigned char *data, unsigned int *len)

*data 接收到的数据

*len 接收到的数据长度

board_eth_rcv这个函数就是以太网接收功能的驱动函数,在我的博客里面有这个函数的原函数就是基于RTL8019以太网的驱动程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值