VxWorks for LPC2210网络应用编程实战zz

发信人: gdtyy (gdtyy), 信区: Embedded
标  题: VxWorks for LPC2210网络应用编程实战
发信站: 水木社区 (Mon Jun 25 23:26:20 2007), 站内

***************************************
* VxWorks for LPC2210网络应用编程实战 *
***************************************
                      ------ 《ecos增值包》选配之VxWorks网络应用编程实战
    2007/06/06  asdjf@163.com  www.armecos.com

    VxWorks对网络支持得相当好,稳定且高效,内存池的巧妙运用实现了“零内存拷贝”
,netJobAdd函数的使用减少了中断延迟时间,用户只需要实现网络驱动就可以运行完整的
TCP/IP协议栈。通过网络下载和调试程序比串口快很多,我们已经移植好了EasyARM2200和
SmartARM2200上的VxWorks网络驱动BSP,下面通过一个例子demo3.c来讲一下VxWorks for
LPC2210网络应用编程。

    这个例子是开发板上网页演示程序在VxWorks上的移植,通过实际测试(在
SmartARM2200上),响应速度非常快(平均为0.09秒),ping测试(74字节包)的平均响应时间
为3ms,ARP响应时间为3ms。源码如下:

#include "sockLib.h"
#include "inetLib.h"

#define STACK_SIZE 2000

void webserver_test(int arg);

unsigned char httpweb[]={
    "HTTP/1.0 200 OK/r/n"
    "Date: Mon, 24 Nov 2003 01:24:17 GMT/r/n"
    "Server: microHttp/1.0 Zlgmcu Corporation/r/n"
    "Accept-Ranges: bytes/r/n"
    "Connection: Keep-Close/r/n"
    "Content-Type: text/html/r/n"
    "/r/n"
    };

unsigned char web[]={
    "<HTML>/r/n"
    "<HEAD>/r/n"
    "<TITLE>ARM_NET演示网页(周立功单片机)</TITLE>/r/n"
    "<BODY aLink=green background=/100.bmp bgColor=#f1f1dd link=red/r/n"
    "vLink=#321afd>/r/n"
    "<H1>HELLO WELCOME TO EasyArm WEBSERVER</H1>/r/n"
    "<UL>/r/n"
    "<LI> <A HREF=/"http://www.zlgmcu.com//">周立功单片机网站 </A>/r/n"
    "<LI> <A HREF=/"http://www.zlg.cn//">周立功单片机内部BBS </A>/r/n"
    "<LI> <A HREF=/"http://www.zlgmcu.cn//">周立功单片机 </A>/r/n"
     "</UL>/r/n"
    "</BODY>/r/n"
    "</HTML>/r/n"
    };

unsigned char httpgif[]={
    "HTTP/1.0 200 OK/r/n"
    "Date: Mon, 24 Nov 2003 01:24:17 GMT/r/n"
    "Server: microHttp/1.0 Zlgmcu Corporation/r/n"
    "Accept-Ranges: bytes/r/n"
    "Connection: Keep-Close/r/n"
    "Content-Type: image/bmp/r/n"
    "/r/n"
    };

unsigned char bmp[442]={
0x42,0x4d,0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x28,0x00,
0x00,0x00,0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,
0x00,0x00,0x40,0x01,0x00,0x00,0xc4,0x0e,0x00,0x00,0xc4,0x0e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,
0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x80,
0x00,0x00,0xc0,0xc0,0xc0,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0xff,0x00,0x00,0xff,
0x00,0x00,0x00,0xff,0xff,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0xff,
0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0x66,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x66,0x66,0x6f,0x6f,0xff,0x66,0x66,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xf6,0xff,0xff,0x6f,0xf6,0xff,0xf6,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x6f,0xff,0x6f,0xf6,0xff,0xf6,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf6,0xff,0xf6,0xf6,0xff,0xff,
0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x6f,0xf6,0xff,0x6f,0xff,
0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xf6,0x66,0x66,0xf6,0xff,0xf6,0x66,
0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00
};

void demo3(void)
{
    printf("Demo3 Start....../n");

    taskSpawn("webserver_test", 90, 0, STACK_SIZE, webserver_test, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0);
}

void
webserver_test(int arg)
{
    struct sockaddr_in host,client;
    int s,sa,e_source,len, sockAddrSize;
    unsigned char buf[400];

    s = socket(AF_INET, SOCK_STREAM, 0);
    if (s < 0) {
        return;
    }

    /* Set up host address */
    sockAddrSize = sizeof(struct sockaddr_in);
    host.sin_family = AF_INET;
    host.sin_len = sizeof(host);
    host.sin_addr.s_addr = INADDR_ANY;
    host.sin_port = ntohs(80);

    if(bind(s, (struct sockaddr *) &host, sizeof(host)) < 0) {
        return;
    }

    listen(s, SOMAXCONN);

    while(1){
        memset(buf, 0, sizeof(buf));

        if ((sa = accept(s, (struct sockaddr *)&client, &sockAddrSize)) < 0) {
            printf("Accept ERROR!/n");
            continue;
        }

        printf("SERVER : HTTP request arrived from %s:%d/n",
inet_ntoa(client.sin_addr),ntohs(client.sin_port));

        len = read(sa, buf, sizeof(buf));

        if(buf[5] == ' '){
            len = write(sa, httpweb, sizeof(httpweb)-1);
            len = write(sa, web, sizeof(web));
        }
        else if(buf[5] == '1'){
            len = write(sa, httpgif, sizeof(httpgif)-1);
            len = write(sa, bmp,sizeof(bmp));
        }

        close(sa);
    }
}

    下面图示说明使用方法:
    和前面《VxWorks for LPC2210应用编程实战》里介绍的使用方法类似,唯一不同点是
Target Server要设置成wdbrpc。
    下面只介绍不同部分的设置。

    设置Target Server,使用网络RPC通信,目标机IP地址为192.168.0.2,超时和重试次
数根据需要设置,调试时如果网络速度比较慢的话(因为加入了调试信息),使用缺省值可能
导致连接失败,正常工作时网络速度很快,不存在此问题。注意:Core File and Symbols
里的File文件要与烧写在flash里的VxWorks一致,即带调试信息的ELF文件
(vxWorks_romResident)。连接成功会显示成功信息,托盘里出现一个象靶子一样的图标。

    [img]http://www.armecos.com/pic21ic/y1.gif[/img]
    [img]http://www.armecos.com/pic21ic/y2.gif[/img]

    其他操作与《VxWorks for LPC2210应用编程实战》里介绍的使用方法相同,不再赘述

    超级终端上显示的运行信息。

    [img]http://www.armecos.com/pic21ic/y3.gif[/img]

    用IE访问192.168.0.2就可以浏览内置网页,响应速度相当快(0.09秒)。

    基于网络RPC的调试shell比基于串口的快多了,输入“i”后,几乎是一下子蹦出任务
状态列表信息。

    [img]http://www.armecos.com/pic21ic/y5.gif[/img]

    这是ping测试的结果,通过sniffer抓包分析,ping测试(74字节包)的平均响应时间为
3ms,ARP响应时间为3ms。看来VxWorks真的不赖。

    [img]http://www.armecos.com/pic21ic/y6.gif[/img]
--

※ 来源:·水木社区 http://newsmth.net·[FROM: 61.149.56.*]
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值