关于LM3S6911使用LWIP1.3.2问题

Other Parts Discussed in Thread: LM3S6911

最近在使用LM3S6911这款芯片利用LWIP1.3.2一个UDP客户端。主要是参考ek-lm3s6965中enet_lwip例程进行修改。

const unsigned char UDPData[] = "UDP 测试程序";       
struct ip_addr local_addr,dest_addr;
struct udp_pcb *UdpPcb;
struct pbuf *p_tx;    

void UDP_Send(void)
{
  p_tx = pbuf_alloc(PBUF_RAW, sizeof(UDPData), PBUF_RAM);  // 按照指定类型分配一个pbuf结构体  // struct pbuf *p_tx;
  p_tx->payload = (void *)UDPData;              // 实际发送数据内存区

  
  IP4_ADDR(&local_addr,192,168,1,10);   // 本地IP地址:192.168.1.10
  IP4_ADDR(&dest_addr,192,168,1,11);    // 电脑IP地址:192.168.1.11
  UdpPcb = udp_new();                       // 创建udp协议控制块
  udp_bind(UdpPcb,&local_addr, 1025);       // 在协议控制块中绑定本地ip地址和本地端口号,本地:开发板(程序下到开发板中)
  udp_connect(UdpPcb, IP_ADDR_ANY,2000);      // IP_ADDR_ANY与远端udp主机建立连接,远端:笔记本
  while(1)
  {
     udp_send(UdpPcb,p_tx);
     delay(5000);

  }
}

然后我用抓包软件能抓到网络数据且正确,显示的是以广播的形式发送。参数IP_ADDR_ANY我跟踪了一下,定义如下;

#define IP_ADDR_ANY         ((struct ip_addr *)&ip_addr_any)
#define IP_ADDR_BROADCAST   ((struct ip_addr *)&ip_addr_broadcast)

const struct ip_addr ip_addr_any = { IP_ADDR_ANY_VALUE };
const struct ip_addr ip_addr_broadcast = { IP_ADDR_BROADCAST_VALUE };

#define IP_ADDR_ANY_VALUE 0x00000000UL
#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL

疑问:

1.广播地址按定义应该是255.255.255.255。但抓包发现参数为IP_ADDR_ANY(0x00000000UL)  时,为什么也是以广播的形式发送。

2.如果更改参数IP_ADDR_ANY为&dest_addr时,就是让与一个具体的ip连接,数据不能发送,一直处于ARP请求与应答。