正点原子lwIP学习笔记——带操作系统lwIP启动流程

1.带操作系统lwIP启动流程——旧版本

正点原子lwIP学习笔记——带操作系统lwIP启动流程_第1张图片
一上来,带操作系统的初始化就略有区别:在创建完任务之后,同样调用lwip_comm_init()函数进入初始化,初始化中首先进行tcpip_init(),而裸机移植是直接调用的lwip_init();当然tcpip_init里面的第一步就是调用lwip_init,然后进行其余操作。

更大的区别在于,裸机的netif->input会直接传递给ethernet_input然后判断是ARP还是ip4;
FreeRTOS则是通过netif->input传递给tcpip_init,然后通过定义的邮箱进行消息传递,交给tcpip_thread这个线程进行判断,判断是ARP还是ip4;这一部分的区别在代码中主要是在添加虚拟网卡这一步的时候,最后一个参数裸机就是ethernet_input,FreeRTOS这边就会换成tcpip_input,然后tcpip_input会判断调用的是ethernet_input还是ip_input,由此把ARP和实际传输给分开。

然后的区别在ethernet_init这边,区别就在最后面的low_level_init;
在RMII以及对应引脚初始化完毕之后,会建立一个二值信号量,然后创建任务ethernetif_input,在这个里面会通过死循环判断是否接收到信号量,接收到了就会进入low_level_input接收消息,然后通过上面讲的发送消息邮箱然后判断是IP还是ARP。

总结

总结来说底层的东西还是要多看代码,大概知道运行的逻辑应该也差不多了。

2.带操作系统lwIP启动流程——新版本

正点原子lwIP学习笔记——带操作系统lwIP启动流程_第2张图片
新旧版本没有什么区别,就不再做赘述了。

总结

这一部分其实就是带着读一读源码,把大概的框架心里有个概念就差不多了,毕竟也不会考什么当场来写代码对不对?我个人的理解就是,如果要用到了,回来翻翻手册文档以及自己的笔记,再去看看源码;实在看不懂再去看一遍视频过一过也就好了。

你可能感兴趣的:(lwIP学习,学习,笔记,stm32,网络协议)