说明:

    1. 工程使用board\ALIENTEK_STM32F429\KEIL\tcp_server_base_lwip,且并未在实际的开发板上运行(没有对应的开发板)。
    2. 这里只分析send的流程
    3. 代码所在文件是文件名带有有下划线的那个

    调用send函数
    image.png

    宏替换为lwip_send()
    image.png

    下面这个函数的第一个参数是一个函数指针:
    image.png

    现在回头看lwip_netconn_do_write(),它就是上图中442行的fn

    image.png
    image.png
    image.png
    image.png

    其中netif是从一个全局列表中找到的一个元素
    image.png
    image.png
    image.png

    netif是一个全局变量,它的初始化要在ethernetif.c中寻找
    image.png

    etharp_output()有三条返回路径:
    image.png

    无论那条路,最终还是调用ethernet_output()
    image.png
    又遇到了netif:
    image.png

    仍然在ethernetif.c中寻找其初始化:
    image.png

    ethernetif_drv_write()中会遇到另外一个全局变量:ethernetif_drv

    image.png

    ethernetif_drv的初始化是通过ethernetif_drv_register()完成的,这个函数在lwip.c中
    image.png

    现在已经到了BSP(board surport pack)层了,跟硬件相关的驱动层
    image.png
    image.png

    这里感觉应该是通过设置标志,来物理发送数据
    image.png