OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11456|回复: 3

lwIP协议中UDP服务器如何发送自定义长度数据

[复制链接]

11

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-3-6
在线时间
0 小时
发表于 2013-3-9 23:58:40 | 显示全部楼层 |阅读模式
我想基于lwIP协议中的UDP协议,用单片机做一个服务器,接受电脑的指令然后返回数据。以下是我的代码
/****************************************************
*函数功能:初始化udp,选定通信端口,建立连接机制
****************************************************/
void Udp_Api_init(void)
{
  err_t err;
  struct udp_pcb *UDPpcb;

  /* create a new UDP PCB structure  */
  UDPpcb = udp_new();
  if (!UDPpcb)
  {  /* Error creating PCB. Out of Memory  */
    return;
  }

  /* Bind this PCB to port 99  */
  err = udp_bind(UDPpcb, IP_ADDR_ANY, service_port);
  if (err != ERR_OK)
  {    /* Unable to bind to port  */
    return;
  }

  //通知协议栈当99端口有连接请求时调用recv_callback_udp
  udp_recv(UDPpcb, recv_callback_udp, NULL); 
}

 void recv_callback_udp(void *arg,struct udp_pcb *upcb, struct pbuf *pkt_buf,
                        struct ip_addr *addr,u16_t port)
{
struct ip_addr dAddr = *addr;
u8 data[5]={1,2,3,4,5};
u8 *pValiData;
struct pbuf *p ;
struct ip_addr ipaddr;
struct udp_pcb *UDPpcb1;

pValiData=pkt_buf->payload;        

if( pkt_buf != NULL )
       {
          if(*pValiData > 0x05)  //接收到的指令码大于5,返回原指令
         udp_sendto( upcb , pkt_buf , &dAddr , port ) ;
 else
 {
         p = pbuf_alloc(PBUF_RAW,sizeof(data),PBUF_RAM);  //根据将要发送的数据大小开辟pbuf
                  p->payload=(void *)data; 
   
                  IP4_ADDR(&ipaddr,192,168,1,2);  
                  UDPpcb1 = udp_new();  
                  udp_bind(UDPpcb1,IP_ADDR_ANY,service_port);  //绑定本地IP 地址      
                  udp_connect(UDPpcb1,&ipaddr,1000);  
                  udp_send(UDPpcb1,p);
    //udp_remove(upcb);
           //udp_sendto( upcb , pkt_buf , &dAddr , port ) ;
  }
     }
     pbuf_free(pkt_buf);
}
实验结果:在发送指令大于5时,单片机返回数据5;但是当指令小于5时,没有返回值,且串口显示“HardFault_Handler”
            这是为什么呢???????????
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-3-10 00:06:42 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-4-11
在线时间
0 小时
发表于 2013-4-11 22:05:19 | 显示全部楼层
回复【楼主位】1037723204:
--------------------------------
将p利用内存复制函数函数copy到pkt_buf中发送试一下
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-3
在线时间
8 小时
发表于 2013-6-5 10:17:01 | 显示全部楼层
回复【楼主位】1037723204:
---------------------------------
楼主解决问题了嘛?我也在做UDP卡壳了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 18:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表