关闭

LPC2388+UCOS/II+LWIP移植

标签: ucos-IIkeilLWIPTCPIP
426人阅读 评论(0) 收藏 举报
分类:

在主任务中先初始化网卡参数,tcpip_init(NULL, NULL)中会创建TCP/IP的任务,在次任务中会不断发送ARP广播,查询在整个网段内是否有目标IP地址的设备,当有对应的设备响应并把自己的MAC地址返回时,将会把目标设备的IP地址,MAC信息保存在缓存中。调试中需要了解ARP广播包的数据格式,可通过wireshark工具进行分析,以下为我转载的ARP格式分析和TCP/IP数据包解析的文章链接。

http://blog.csdn.net/daidi1989/article/details/49923831

http://blog.csdn.net/daidi1989/article/details/49925269

在ARP广播成功后,两个设备间已经成功建立起了通信通道,在tcpip_init函数中创建了一个接收网络数据的任务,当有数据收到的消息过来时,此任务中就会对数据进行解析,判断收到的数据是TCP、UDP还是ARP广播数据。在另外一个任务中将会等待是否有TCP包数据的消息,当收到相应的数据包时,我们就可获得对他进行自定协议的解析。以下是一段网卡初始化的程序,

void NetIf_Init(u8_t *ucip, u8_t *ucGateway, u8_t *ucMark)
{

#if NO_SYS
    lwip_init();                                                        /* 初始化LwIP协议栈             */
#else
    tcpip_init(NULL, NULL);
#endif

    IP4_ADDR(&lwip_IpAddr, 
             ucip[0], 
             ucip[1], 
             ucip[2], 
             ucip[3]);                                                  /* 添加IP地址                   */

    IP4_ADDR(&lwip_Gateway, 
             ucGateway[0], 
             ucGateway[1], 
             ucGateway[2], 
             ucGateway[3]);                                             /* 添加网关                     */

    IP4_ADDR(&lwip_Mark, 
             ucMark[0], 
             ucMark[1], 
             ucMark[2], 
             ucMark[3]);                                                /* 添加子网掩码                 */

#if LWIP_DHCP || LWIP_AUTOIP                                            /* 使能了DHCP或自动IP           */
    lwip_IpAddr.addr  = 0;
    lwip_Mark.addr    = 0;
    lwip_Gateway.addr = 0;
#endif

     /*
      * 创建、配置并添加默认的以太网控制器接口设置
      */
#if NO_SYS
    netif_add(&lwip_Netif
              &lwip_IpAddr
              &lwip_Mark
              &lwip_Gateway
              NULL, 
              ethernetif_init, 
              ip_input);
#else
    netif_add(&lwip_Netif,
              &lwip_IpAddr,
              &lwip_Mark,
              &lwip_Gateway,
              NULL, 
              ethernetif_init, 
              tcpip_input);
#endif

    netif_set_default(&lwip_Netif);

#if LWIP_DHCP                                                           /* 使能了DHCP, 则运行它        */
    dhcp_start(&lwip_Netif);
#endif

#if LWIP_AUTOIP                                                         /* 使能了AutoIP                 */
    autoip_start(&lwip_Netif);
#endif

    netif_set_up(&lwip_Netif);                                          /* 添加使能建立的网络接口       */

#if (NO_SYS == 0)
    lpc_mac_recv = OSSemCreate(0);
    OSTaskCreate(lwip_ethernet_input,
                (void *)0,
                &lwip_ethernet_input_stk[LWIP_ETHERNET_INPUT_STK_SIZE - 1],
                 LWIP_ETHERNET_INPUT_PRIO);
#endif
}


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24530次
    • 积分:424
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:27篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论