1.带操作系统lwIP启动流程——旧版本
一上来,带操作系统的初始化就略有区别:在创建完任务之后,同样调用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启动流程——新版本
新旧版本没有什么区别,就不再做赘述了。
总结
这一部分其实就是带着读一读源码,把大概的框架心里有个概念就差不多了,毕竟也不会考什么当场来写代码对不对?我个人的理解就是,如果要用到了,回来翻翻手册文档以及自己的笔记,再去看看源码;实在看不懂再去看一遍视频过一过也就好了。