lwip移植 有操作系统(超详细教程,简单好学,看了秒懂)

首先准备几份资料:

(1)资料

1.lwip2.1.3 最新版   例程最新版contrib-2.1.0

下载地址

Index of /releases/lwip/

下载的是稳定版的2.1.3

lwip.git - lwIP - A Lightweight TCPIP stack

2.freertos 10 最新版 FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

3.stm固件库 我上传到云盘了

4.stm网口驱动程序

STSW-STM32070 - STM32F4x7微控制器的LwIP TCP/IP堆栈演示(AN3966) - STMicroelectronics

(2)移植freertos:(本次移植是带操作系统的)

具体移植看教程:

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_IT小生lkc的博客-CSDN博客_freertos移植步骤

(3)目录结导入:

lwip工程结构:基本的外设库导入这里就不提及了

1.将lwip包放进目录下

主要工程目录:LWIP_API LWIP_CORE LWIP_NETIF LWIP_ARCH

将下载包内下src目录下的文件,移动到工程目录ThirtyParty下

2.将lwip文件导入工程

导入lwip api 全部文件

导入LWIP_CORE: core目录下以及ipv4目录下全部文件

LWIP_NETIF:除了ppp都添加

3.添加头文件:

注意:关于缺少的头文件,放进一个可以索引的头文件目录就可以,不必太在意我放在哪个目录

 

(4)基本出现的问题:

开始运行一遍:

问题1:

..\ThirtyParty\lwip\include\lwip/opt.h(51): error:  #5: cannot open source input file "lwipopts.h": No such file or directory

提示没有lwipopts.h  也就是没有整个lwip的配置文件

解决:在例程文件中搜索lwipopts.h  使用例程的lwipopts.h

LWIP\source\contrib-2.1.0\examples\example_app

推荐下边这个lwipopts,比较容易调试

LWIP\source\STM32F4x7_ETH_LwIP_V1.1.1\Project\FreeRTOS\udptcp_echo_server_netconn\inc

放在头文件的目录里边,我暂且将该文件放在User中,其实都是一样的

问题2:

然后继续运行

..\ThirtyParty\lwip\include\lwip/arch.h(48): error:  #5: cannot open source input file "arch/cc.h": No such file or directory

提示没有cc.h,cc.h其实是代表cpu

接续在例程中搜索,其实有两个win32和unix其实都是可以的,这里我们选择unix

LWIP\source\contrib-2.1.0\ports\unix\port\include\arch

这里我们也暂时将这个文件放在User里边,新建一个arch,放在arch里边

问题3:

..\User\arch/cc.h(51): error:  #5: cannot open source input file "sys/time.h": No such file or directory

在例程搜索:然后在User新建sys,将time.h放进去,因为原先的存在这个,这个头文件可能后边没有使用,但是引用了,暂时将其导入

问题4:

..\ThirtyParty\lwip\include\lwip/sys.h(95): error:  #5: cannot open source input file "arch/sys_arch.h": No such file or directory

将arch里边的sys_arch.c和sys_arch.h都放到User下的arch

LWIP\source\contrib-2.1.0\ports\freertos\include\arch

问题5:

..\User\sys/time.h(7): error:  #20: identifier "time_t" is undefined

查看了一下原先的定义,是long,重命名一下就可以了

 

问题6: 这里是我的问题,忘记导入网卡的驱动

..\ThirtyParty\lwip\api\sockets.c(486): error:  #20: identifier "EBADF" is undefined

导入网口驱动:,这里的驱动是上边stm的一个网口驱动例程里的

LWIP\source\STM32F4x7_ETH_LwIP_V1.1.1\Libraries

导入头文件

问题7:

..\ThirtyParty\lwip\api\err.c(51): error:  #20: identifier "ENOBUFS" is undefined

显示这些没有被定义,应该是跟头文件有关系,但是头文件都导入了,使用sourceinsight 全局搜索了一下,在errno.h定义了,头文件也包含了,发现宏定义

LWIP_PROVIDE_ERRNO应该是没有被定义,所以在lwipopts.h配置文件中定义该红一定

问题8:

..\Library\STM32F4x7_ETH_Driver\inc\stm32f4x7_eth.h(38): error:  #5: cannot open source input file "stm32f4x7_eth_conf.h": No such file or directory

随便找一个网口驱动找freertos中的这个配置:

C:\Users\lkc\Desktop\project\csdn\LWIP\source\STM32F4x7_ETH_LwIP_V1.1.1\Project\FreeRTOS\udptcp_echo_server_netconn\inc

也放到User中吧

问题9:

..\Library\STM32F4x7_ETH_Driver\src\stm32f4x7_eth.c(377): warning:  #223-D: function "Delay" declared implicitly

这里使用freertos中的延时

问题10:

LWIP\source\STM32F4x7_ETH_LwIP_V1.1.1\Utilities\Third_Party\lwip-1.4.1\port\STM32F4x7\FreeRTOS

这里是驱动和lwip的底层接口,可以直接使用stm例程

拷贝到User

问题11:

最后一个错误:因为拷贝的ethernetif是1.4版本写的,所以期间到2.1.3修改了名字,现在叫timerouts.h

..\User\ethernetif.c(50): error:  #5: cannot open source input file "lwip/timers.h": No such file or directory

问题12:

..\User\ethernetif.c(74): error:  #20: identifier "xSemaphoreHandle" is undefined

缺少这个,因为是头文件没有在文件中声明

我统一把头文件声明在一个文件,当然如果你想声明在其他文件也没问题,只要能引入到就行

问题13:固件库网卡例程关于mac地址等等的定义

最后还是DELAY函数没有,还有这些mac地址,主要是因为网卡驱动的main,.h中的东西自己没有引用过来

将基本的mac地址和delay函数声明复制到自己的main.h

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lwip是一个轻量级的网络通讯协议栈,用于嵌入式系统中实现TCP/IP通讯。而IAR是一款嵌入式开发工具,用于编译和调试嵌入式系统的程序。要在没有操作系统的嵌入式系统上移植lwip,可以通过以下步骤实现: 首先,需要将lwip的源码加入到项目中,并进行必要的配置。lwip的源码通常会包括TCP/IP协议栈的实现,以及与操作系统、硬件相关的部分。因为目标系统没有操作系统,所以需要根据实际情况修改lwip的配置,包括内存管理、任务调度等相关设置。 其次,需要根据目标硬件编写lwip的底层驱动程序,以适配目标系统的网卡或者以太网控制器。这部分工作涉及到硬件接口的调试和适配,需要对目标系统的硬件结构和寄存器进行深入了解。 接着,需要在IAR开发环境中编写应用程序,包括实现网络通讯的功能,并与lwip协议栈进行集成。这部分工作包括网络套接字的编程,数据包的发送和接收等。 最后,需要进行调试和测试工作,确保lwip在目标系统上能够正常工作,实现基本的网络通讯功能。这其中可能需要借助IAR提供的调试工具,对程序进行逐步调试和性能优化。 通过以上步骤,就可以在没有操作系统的嵌入式系统上成功移植lwip,并利用IAR进行开发和调试。这样就能够在嵌入式系统中实现基于TCP/IP协议的网络通讯功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值