首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeRTOS + LWIP -UDP数据传输

FreeRTOS + LWIP -UDP数据传输
EN

Stack Overflow用户
提问于 2014-11-27 15:47:10
回答 1查看 4K关注 0票数 0

我对lwip有点陌生。我正试图通过UDP协议将一些数据从我的开发板发送到我的pc上。并使用他们之间的以太网电缆。

我给我的服务器(源板)一个ip地址,是192.168.1.75:88。我电脑的ip地址是192.168.1.2:90。当我设置这个配置并运行该程序时,我无法嗅到wireshark的任何信息,我的意思是根本没有udp包交换。但是,当我将所有目的地入口更改为255.255.255.255或0.0.0.0时,我可以嗅到一些包裹。

为什么我不能将udp包发送到我想要的ip地址?

Main.c

代码语言:javascript
复制
int main(void)
{
   #define dst_port 88
   #define src_port 90

  #ifdef SERIAL_DEBUG
    DebugComPort_Init();
  #endif

  LCD_LED_Init();
  ETH_BSP_Config();
  LwIP_Init();
  IP4_ADDR(&dstaddr,     0, 0, 0, 0);
  IP4_ADDR(&srcaddr,     192, 168, 1, 75);

  pcb = udp_new();

  udp_bind(pcb, &dstaddr, src_port);
  udp_recv(pcb, RecvUTPCallBack, NULL);
  udp_connect(pcb, &dstaddr, dst_port);

  #ifdef USE_DHCP
  /* Start DHCPClient */
  xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,DHCP_TASK_PRIO, NULL);
  #endif

  /* Start toogleLed4 task : Toggle LED4  every 250ms */
  xTaskCreate(ToggleLed4, "LED4", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);
  xTaskCreate(SendUDP, "UDP", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);

  /* Start scheduler */
  vTaskStartScheduler();
  for( ;; );
}

SendUDP任务

代码语言:javascript
复制
void SendUDP(void * pvParameters)
{
  while(1)
  {     
    pcb = udp_new();
    udp_bind(pcb, &dstaddr, src_port);
    udp_recv(pcb, RecvUTPCallBack, NULL);
    udp_connect(pcb, &dstaddr, dst_port);

    pb = pbuf_alloc(PBUF_TRANSPORT, sizeof((str)), PBUF_REF);
    pb->payload = str;
    pb->len = pb->tot_len = sizeof((str));

    udp_sendto(pcb, pb, &dstaddr, dst_port);
    udp_disconnect(pcb);
    udp_remove(pcb);
    pbuf_free(pb);  
    vTaskDelay(1000);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-24 14:07:54

我大概一周前就知道了,但我不能把答案发到这里。

首先,在main.h中有一个ip定义,如

代码语言:javascript
复制
/*Static IP ADDRESS*/
#define IP_ADDR0   192
#define IP_ADDR1   168
#define IP_ADDR2   1
#define IP_ADDR3   15

这种配置正在netconf.h .h中使用。

代码语言:javascript
复制
IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);

这就是服务器的ip地址总是192.168.1.15的原因。

第二,我刚刚开始使用netconn,而不是原始API,这比原始API容易得多。这是我的新的SendwithUDP函数,它工作得很完美。

代码语言:javascript
复制
void SendwithUDP(uint16_t *veri, uint8_t length)                                                                    
{
  while(1)
    {
        if(((EventFlags.udp) && (1<<0)) == (1<<0)) 
        {
                        STM_EVAL_LEDToggle(LED3);

                        sendconn = netconn_new( NETCONN_UDP ); 
                        netconn_bind(sendconn, IP_ADDR_ANY, src_port );
                        netconn_connect(sendconn, &clientAddr, 150);                                
                        sendbuf = netbuf_new();
                        data =netbuf_alloc(sendbuf, 2*length);
                        memcpy(data, veri, 2*length);
                        netconn_send(sendconn, sendbuf);    
                        netbuf_free(sendbuf);
                        netbuf_delete(sendbuf);
                        netconn_disconnect(sendconn);
                        netconn_delete(sendconn);       
                        vTaskDelay(10);
            }
      } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27174421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档