FreeRTOS+Lwip+STM32 网卡驱动函数运行原理(网卡+wifi)

本文详细介绍了在STM32H743上结合以太网和WiFi驱动的实现,重点分析了LwIP网络接口函数,包括low_level_output、low_level_input、ethernetif_input、low_level_init和ethernetif_init等五个关键函数的职责和相互关系。以太网例程中,ethernetif_init函数用于初始化网络接口,low_level_init负责硬件初始化,ethernetif_input作为任务不断接收数据。同时,讨论了静态函数的作用以及netif_add函数在初始化网络接口中的角色。WiFi例程与以太网类似,但在数据接收上有所不同。

塞2564196

项目背景

主板是野火的STM32H743,例程也是野火附带的例程,有需要的可以去野火大学堂下载。因为野火只是给出了以太网和wifi的单独例程,而项目需要两者结合在一个工程,所以需要弄清楚两者驱动函数都是如何编写的,方便合并。

Lwip网络接口函数

在Lwip当中,源码作者用netif结构体来表示一个网卡接口,内含网卡的IP地址、数据接收函数、数据发送函数等。然后通过netif_add函数添加到网卡链表当中去。

在源码当中存在一个ethernetif.c文件,这个文件存在5个函数的框架,包括函数名、函数参数、函数内容等。这就是5个网卡驱动函数的框架,我们需要在这里面添加实际使用的网卡特性。

  1. static err_t low_level_output( struct netif *netif, struct pbuf *p )
  2. static struct pubf*low_level_input(strcut netif *netif)
  3. static void ethernetif_input(struvt netif *netif)
  4. static void low_level_init(struct netif *netif )
  5. err_t ethernetif_init(  struct netif *netif )

low_level_output函数为网卡的发送函数,它主要将内核的数据包发送出去,数据包采用 pbuf 数 据结构进行描述,该数据结构是一个比较复杂的数据结构。

low_level_input函数为网卡的数据接收函数,该函数会接收一个数据包,为了内核易于对数据 包的管理,该函数必须将接收的数据封装成 pbuf 的形式。

ethernetif_input函数的主要作用就是调用 low_level_input函数从网卡中读取一个数据包,然后解析该数据包的类型是属于 ARP 数据包还是 IP 数据包,再将包递交给上层。

 low_level_init函数为网卡初始化底层函数,它主要完成网卡的复位及参数初始化,根据实际的网卡属性进行配置 netif 中与网卡相关的字段,例如网卡的 MAC 地址、长度,最大发送单元等。

ethernetif_init函数,网卡初始化函数。

可以看到5个函数当中四个都带了static关键字,有关于这个关键字的作用如下所示。

在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值