zynq Lwip学习笔记-xemacpsif_init函数

前言

最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部分内容可能也只针对lwip echo server例程有效,笔记可以供有缘人参考,但不敢保证全对,有不对的地方也期待有高人指点一二。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_40356705/article/details/136824649

一、概述

前面的笔记主要写了pbuf中有数据时cpu的处理过程,包括接收函数是怎么注册的,接收函数是在哪里被调用的,和各接收函数之间的关系是如何嵌套起来的。现在看数据是怎么从端口转移到内存的。首先前面介绍了xemac_add函数,该函数主要作用就是注册一个网络端口,包括ip地址,网关,mac地址,接收函数,还有初始化函数。其中初始化函数就包括了取数据的函数。在zynq echo server实验中,程序实际执行的是第三个case语句也就是其初始化函数为xemacpsif_init。今天就看一下xemacpsif_init函数中有什么内容。

  • 原型
err_t xemacpsif_init(struct netif *netif)
  • 参数
    struct netif *netif :结构体的指针,该结构体包含了网络接口的各种信息,如名称、输出函数、链路层输出函数等。
  • 作用
    这个函数主要完成了网络接口的基本设置和底层硬件的初始化,为后续的网络通信做准备

二、函数体

/*  
 * xemacpsif_init():  
 *  
 * 这个函数应该在程序开始时调用,以设置网络接口。  
 * 它调用 low_level_init() 函数来完成硬件的实际设置。  
 */  
err_t xemacpsif_init(struct netif *netif)  
{  
#if LWIP_SNMP  
	/* 设置网络接口类型为以太网(RFC 1213 中的 ethernetCsmacd),值为6 */  
	/* ifType ethernetCsmacd(6) @see RFC1213 */  
	netif->link_type = 6;  
	  
	/* 设置链接速度,这里需要填写具体的速度值,例如10000000表示100Mbps */  
	/* your link speed here */  
	netif->link_speed = ; /* 这里应该填写具体的速度值 */  
	  
	/* SNMP 时间戳初始化 */  
	netif->ts = 0;  
	  
	/* SNMP 接收方向的统计信息初始化 */  
	netif->ifinoctets = 0; /* 接收的字节数 */  
	netif->ifinucastpkts = 0; /* 接收的单播数据包数 */  
	netif->ifinnucastpkts = 0; /* 接收的非单播数据包数 */  
	netif->ifindiscards = 0; /* 接收时丢弃的数据包数 */  
	  
	/* SNMP 发送方向的统计信息初始化 */  
	netif->ifoutoctets = 0; /* 发送的字节数 */  
	netif->ifoutucastpkts = 0; /* 发送的单播数据包数 */  
	netif->ifoutnucastpkts = 0; /* 发送的非单播数据包数 */  
	netif->ifoutdiscards = 0; /* 发送时丢弃的数据包数 */  
#endif /* LWIP_SNMP */  
  
	/* 设置网络接口的名称,由 IFNAME0 和 IFNAME1 定义 */  
	netif->name[0] = IFNAME0;  
	netif->name[1] = IFNAME1;  
	  
	/* 设置用于处理网络数据包输出的函数 */  
	netif->output = xemacpsif_output;  
	  
	/* 设置用于链路层数据发送的函数 */  
	netif->linkoutput = low_level_output;  
	  
#if LWIP_IPV6  
	/* 如果支持 IPv6,则设置网络接口用于 IPv6 数据包输出的函数 */  
	netif->output_ip6 = ethip6_output;  
#endif /* LWIP_IPV6 */  
  
	/* 调用底层初始化函数,完成网络接口硬件的初始化 */  
	low_level_init(netif);  
	  
	/* 返回初始化成功的标志 */  
	return ERR_OK;  
}

可以看出,这个函数主要就是调用了low_level_init函数

三、调用关系

被xemac_add调用,调用了low_level_init函数。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值