LPC2388+UCOS/II+LWIP移植

原创 2015年11月19日 10:57:23

在主任务中先初始化网卡参数,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
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LPC17XX 学习之 uCOS-II 移植实例

1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的uc...

LPC11C14__uCOS-II V2.91 移植笔记(二)

OS_CPU_C.C这文件的内容,这个文件基本上没有什么改动,都是来自cortex-M3移植UCOS系统的源码,更详细的内容可以看一下官方移植LPC1768的例子 #define  OS_C...
  • sunnon
  • sunnon
  • 2013年03月12日 14:26
  • 1146

lpc2200移植ucos-II心得

1.1 uC/OS-II uC/OS-II读做“micro COS 2”,意为“微控制器操作系统版本2”。uC/OS-II是源代码开放的实时性内核,可用于各类8位、16位和32位单片机。 uC/O...

LPC11C14__uCOS-II V2.91 移植笔记(一)

uCOS-II是一个小型的嵌入式操作系统,其他叫它嵌入式操作系统内核更贴切一下,它不像linux系统那么庞大,提供文件系统管理,网络等服务。uCOS-II做用学习来说是一个不错的选择,uCOS-II是...
  • sunnon
  • sunnon
  • 2013年03月12日 11:33
  • 1462

LPC11C14__uCOS-II V2.91 移植笔记(三)

OS_CPU_A.ASM这个文件是移植UCOS-II到LPC1114最关键的部分,里面用到一些汇编指令,Cortex-M3和Cortex-M0的任务切换都用到PenSV中断,被来向在OSStartHi...
  • sunnon
  • sunnon
  • 2013年03月12日 14:28
  • 1252

uCOS-II for lpc2200 移植心得

uCOS-II for lpc2200 移植心得1.1 uC/OS-IIuC/OS-II读做“micro COS 2”,意为“微控制器操作系统版本2”。uC/OS-II是源代码开放的实时性内核,可用于...

lpc2200移植ucos-II总结(四 编写os_cpu_c.c文件)

2.4 编写os_cpu_c.c文件 OSTaskStkInt()任务堆栈初始化函数,在编写此函数之前,必须先确定任务的堆栈结构。而任务的堆栈结构是与CPU的体系结构、编译器有密切的关联。本移植的堆...

s3c2440上ucos-ii下lwip移植成功

转自:http://826891.blog.163.com/blog/static/8637693201032610528236/?fromdm&fromSearch&isFromSearchEngi...

一步步移植uCOS-II and LwIP (四)

一步步移植uCOS-II and LwIP
  • youk110
  • youk110
  • 2017年01月22日 20:42
  • 320

lpc2200移植ucos-II总结(三 编写OS_CPU.h)

2.3 编写OS_CPU.h 1. 不依赖于编译的数据类型 uC/OS-II不使用C语言中的short,int和long等数据类型的定义,因为他们与处理的类型有关,隐含着不可移植性。代之以移植性强...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LPC2388+UCOS/II+LWIP移植
举报原因:
原因补充:

(最多只允许输入30个字)