记一次Lwip移植CubeMx STM32F407+Rtthread nano+Lan8720a要点

时间:2024-04-12 07:14:05

lwip移植rtt nano调试两天,粗心忽略一个小细节,导致DHCP一直都是失败,无法ping通。
rtt只用内核,没用他的驱动框架,rtt nano移植跟前一个博文一样。
lwip是先用CubeMx生成在freertos下的框架,然后复制到我的工程里面。这里移植有几个地方要改,sys_arch.c/.h文件参考(基本就是复制)rtt完整版里面lwip组件的sys_arch.c/.h文件,这里文件主要是信号量,邮箱等用于线程同步,线程建立,然后就是ethernetif.c文件,这个文件主要是硬件接口和和协议栈对接和一些接收线程的建立,因为lwip是从cubemx freertos工程复制过来的,所以关于freertos的地方全部换成rtt的,卡我的问题在于low_level_init()中接收数据线程建立的时候sys_thread_new(“ethif”,ethernetif_input,netif,256,2);网卡配置参数传递我习惯性写成NULL,还有就是link状态改变回调函数参数传递我也写成NULL,认真回头看了半天才发现。改了之后dhcp就可以了,ping也能ping通。但还是有些问题比如上电时很久都不能获取ip,要拔掉网线再插上才行。。。。。
第一次用lwip协议栈,感觉还是复杂一些,开发难度,稳定性,占用内存空间能都要考虑,以前用过集成tcpip协议栈的w5500,实际使用过程中可以长时间稳定运行除了成本高点什么都好,对于一般数据采集也是足够的。换不换方案再观察观察。。移植的工程可以到我的资源找。
记一次Lwip移植CubeMx STM32F407+Rtthread nano+Lan8720a要点