打印

keil 的TCPNET问题

[复制链接]
5349|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不戴帽子|  楼主 | 2010-10-25 14:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
6019赵文| | 2010-10-31 11:03 | 只看该作者
没有相关的历程吗?

使用特权

评论回复
板凳
liwenz| | 2010-11-10 08:54 | 只看该作者
我也用tcpnet+lpc1768在做,tcp通讯,可以接收,不知道接收后怎么回答数据
应该可以接,还可以送

使用特权

评论回复
地板
ljolove| | 2010-11-11 11:59 | 只看该作者
3# liwenz

Keil有自带的例程,里面改写TCP CALLBACK函数,TCP_EVT_DATA在这个状态下,表示已经接受到数据,可以进行处理,处理的时候直接发送就OK 了
U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
   /* This function is called by the TCP module on TCP event */
   /* Check the 'Net_Config.h' for possible events.          */
   par = par;
   if (soc != socket_tcp) {
      return (0);
   }
   switch (evt) {
      case TCP_EVT_DATA:
         /* TCP data frame has arrived, data is located at *par1, */
         /* data length is par2. Allocate buffer to send reply.   */
         procrec(ptr);
         break;
      case TCP_EVT_CONREQ:
         /* Remote peer requested connect, accept it */
         return (1);
      case TCP_EVT_CONNECT:
         /* The TCP socket is connected */
         return (1);
   }
   return (0);
}


void procrec (U8 *buf) {
   switch (buf[0]) {
      case BLINKLED:
         LED_out (buf[1]);
         break;
   case READADC:
     send_data(disp_buf);
   break;
     
      
   }
}

/*--------------------------- TCP send --------------------------------------*/
void send_data (U8 *databuf) {
   U8 *sendbuf;
   /* TCP */
   if (socket_tcp != 0) {
      /* Start Connection */
      switch (tcp_get_state(socket_tcp)) {
         case TCP_STATE_FREE:
         case TCP_STATE_CLOSED:
            tcp_connect (socket_tcp, Rem_IP, PORT_NUM, 0);
            break;
         case TCP_STATE_CONNECT:
            if (tcp_check_send (socket_tcp) == __TRUE) {
               sendbuf = tcp_get_buf(SENDLEN);
               sendbuf[0] = READADC;
               sendbuf[1] = databuf[0];
      sendbuf[2] = databuf[1];
      sendbuf[3] = databuf[2];
      sendbuf[4] = databuf[3];
      sendbuf[5] = databuf[4];
               tcp_send (socket_tcp, sendbuf, SENDLEN);
            }
            break;
      }
   }
}

使用特权

评论回复
5
ji_dan| | 2010-11-11 12:57 | 只看该作者
keil的TCPnet库?啥东东哦

使用特权

评论回复
6
ljolove| | 2010-11-11 15:19 | 只看该作者
LS,keil有自己的RL库,里面包括USB,以太网,can,还有FLASH,和他们自己的操作系统,我只用过TCP的库感觉还不错

使用特权

评论回复
7
liwenz| | 2010-11-12 11:53 | 只看该作者
本帖最后由 liwenz 于 2010-11-12 15:52 编辑

我的代码运行不到 case TCP_STATE_CONNECT:
就是说tcp_get_state(socket_tcp) !=TCP_STATE_CONNECT
那是怎么回事?这是我对应的3个函数。我们用的都是LEDswitch
我的qq: 635477196

void send_data (U8 p2val) {
  U8 *sendbuf;
  U8 p2;
   /* TCP */
  if (socket_tcp != 0) {
    /* Start Connection */
    p2 = p2val;
    switch (tcp_get_state(socket_tcp)) {
      case TCP_STATE_FREE:
      case TCP_STATE_CLOSED:
        tcp_connect (socket_tcp2, Rem_IP, Rem_Port, 0);
        break;
      case TCP_STATE_CONNECT:
        if (tcp_check_send (socket_tcp) == __TRUE) {
          sendbuf = tcp_get_buf(SENDLEN);
          sendbuf[0] = ECHO;
          sendbuf[1] = p2;
    sendbuf[2]=23;
          tcp_send (socket_tcp, sendbuf, SENDLEN);
        }
  break;
default:
    sendbuf[0]= tcp_get_state(socket_tcp);
        break;
    }
  }

/*--------------------------- Process received data  ------------------------*/
void procrec (U8 *buf,U16 len) {
  switch (buf[0]) {
    case BLINKLED:
      LED_out (buf[1]);
   break;
case ECHO:
  send_data('3');
      break;
  }
}

U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
  /* This function is called by the TCP module on TCP event */
  /* Check the 'Net_Config.h' for possible events.          */
  par = par;
  if (soc != socket_tcp) {
    return (0);
  }
  switch (evt) {
    case TCP_EVT_DATA:
      /* TCP data frame has arrived, data is located at *par1, */
      /* data length is par2. Allocate buffer to send reply.   */
      procrec(ptr,par);
      break;
    case TCP_EVT_CONREQ:
  Rem_IP[0]=ptr[0];
  Rem_IP[1]=ptr[1];
  Rem_IP[2]=ptr[2];
  Rem_IP[3]=ptr[3];
  Rem_Port=par;
      /* Remote peer requested connect, accept it */
      return (1);
    case TCP_EVT_CONNECT:
      /* The TCP socket is connected */
      return (1);
case TCP_EVT_CONREQ:
  soc_state=4;
default:
  Rem_IP[4]=evt;
  break;
  }
  return (0);
}

使用特权

评论回复
8
3B1105| | 2010-11-13 22:41 | 只看该作者
楼主可否一下你的经验

使用特权

评论回复
9
liwenz| | 2010-11-13 23:38 | 只看该作者
我的目前可以了,去掉default: 就可以了,真不知道怎么回事。
我测试速度,好似很快一样, 1400,000, 往返还不要1秒, 每次1400
这样的话,比keil的速度测试还快很多,可能不对。
测试条件就是,交叉网线, 1400送过去,再传过来, 这样1000次, 计算时间 ,一般是800-1000ms

使用特权

评论回复
10
angangch| | 2011-2-10 11:15 | 只看该作者
liwenz,本人正在调试1768的TCP收发程序,能否将你的这个例程的整个工程发给我啊,谢了。

使用特权

评论回复
11
我爸是李刚| | 2011-2-11 15:36 | 只看该作者
楼主你是高手啊,把你现在做的给大家讲一下吧

使用特权

评论回复
12
angangch| | 2011-2-12 12:05 | 只看该作者
LPC1768的TCP Client终于搞通了,原来是我的硬件PHY接口芯片和Keil库不一致,修改之后,OK!

使用特权

评论回复
13
思行合一| | 2011-2-16 12:50 | 只看该作者
keil真强大!

使用特权

评论回复
14
黑发尤物| | 2011-2-27 20:38 | 只看该作者
用了keil的TCPnet库做了一个简单的web服务器   这个难吗?

使用特权

评论回复
15
blackhill| | 2012-10-8 09:34 | 只看该作者
备注,正在做

使用特权

评论回复
16
lzyyoumuren| | 2015-2-5 15:23 | 只看该作者
LZ用这个开辟几个以太网口用过吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

44

帖子

1

粉丝