首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于μC/OS-Ⅲ的LwIP协议栈的移植与实现(3)

基于μC/OS-Ⅲ的LwIP协议栈的移植与实现(3)

2 测试
            测试工作使用LM3S9B95嵌入式平台作为TCP客户端,一台PC作为TCP主机端。测试程序中,嵌入式平台的IP地址设为172.21.28.250,主机IP为172.21.28.253,端口为1020。测试程序中创建了两个任务:一个是LwIP主线程,一个是测试任务。LwIP主线程处理以太网协议的数据包,测试任务负责接收主机端的数据并回传至主机端。
            测试任务首先初始化底层硬件和协议栈,包括使能LM3S9B95以太网硬件模块和中断、调用协议栈内核初始化函数tcpip_init()、初始化网络接口的结构体。
           void  My_LwIP_Init(void)
           {
            /* 调用StellarisWare库函数进行硬件初始化 */
            ……
            /* 调用内核初始化函数 */
            tcpip_init();
            /* 初始化netif,设置本机的IP、子网掩码、网关,绑定netif的回调函数 */
            netif_add(……);
            netif_set_default(……);
            netif_set_up(……);
           }
            第二步是初始化客户端。首先创建一个网络连接结构体,再将其绑定至端口并连接到指定的服务器。
           void  TCP_Client_Init(void)
           {
            pstNetconn = netconn_new(NETCONN_TCP);    //新建连接
            netconn_bind(……);            //绑定端口
            netconn_connect(……);        //连接主机
           }
            任务的主循环中调用了LwIP具有进程阻塞功能的函数netconn_recv()以接收来自主机的数据。若数据接收正确,则将数据发送回主机端的PC;若接收不正确,则删除当前的连接,重新连接到主机。
           while(1)
           {
            err = netconn_recv(……);    // 接收数据
            if(err == ERR_OK)        // 数据正确
            {
                netconn_write(……);    // 发送数据
                netbuf_delete(……);    // 删除数据缓冲区
            }
            else
            {
                netconn_delete(……);    // 删除当前连接
                /* 重新连接 */
                ……
            }
           }
            PC主机端使用了铭心软体工作室的网络调试助手,通过该软件向LM3S9B95客户端发送测试数据,客户端的回传数据也在该软件内显示。测试结果如图2所示。

       


            LwIP是一款专为嵌入式系统设计的以太网协议栈,具有占用资源小、基本功能完备和便于移植等特点。其拥有很高的通用性,适用于多种嵌入式操作系统和硬件平台[6]。在运行实时操作系统的应用环境中,移植工作要求开发者实现操作系统模拟层和硬件驱动层两个部分。协议栈的主进程可作为实时操作系统的一个任务,完整地执行网络通信功能。μC/OS-Ⅲ是μC/OS系列的最新产品,同样是一款实时操作系统的内核,并不具备网络通信功能。LwIP移植到μC/OS-Ⅲ中,可使得运行该实时内核的嵌入式终端拥有网络通信功能,符合当今产品发展的趋势,具有更广泛的应用领域和更高的市场价值。
继承事业,薪火相传
返回列表