久芯网

STM32 LWIP 编译 指针问题请教

avatar 憨客鱼 提问时间: 2023-09-18 14:22:35 / 未解决
用STM32F407 做无操作系统的LWIP 移植,遇到一个问题
一直连接不上网
最开始
        rval=ETH_Init(&ETH_InitStructure,LAN8720_PHY_ADDRESS);                //ÅäÖÃETH
        if(rval==ETH_SUCCESS)//ÅäÖóɹ¦
        {
                ETH_DMAITConfig(ETH_DMA_IT_NIS|ETH_DMA_IT_R,ENABLE);          //ʹÄÜÒÔÌ«Íø½ÓÊÕÖжϠ      
        }

配置不成功
然后我做了修改
//        ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;                           //¿ªÆôÍøÂç×ÔÊÊÓ¦¹¦ÄÜ
  ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;//hank       


配置成功,但是DHCH老是不成功
然后看打印的信息
netif->output()dhcp_discover: deleting()ing
dhcp_discover: SELECTING
dhcp_discover(): set request timeout 16000 msecs
tcp_slowtmr: no active pcbs

发现是
  prev = NULL;
  pcb = tcp_active_pcbs;
  if (pcb == NULL) {
    LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n"));
  }
  while (pcb != NULL) {
           LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n"));
    LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED);
    LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN);
    LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT);
    if (pcb->last_timer == tcp_timer_ctr) {
      /* skip this pcb, we have already processed it */
      pcb = pcb->next;
      continue;
    }
这里问题,然后调试,发现很奇怪
编程软件之后 tcp_active_pcbs 就为0 了  所以程序就出错了
但是 这是个结构体 struct tcp_pcb *tcp_active_pcbs;
指针怎么会是0呢
而且程序编译后,tcp_active_pcbs 就为0  但是把  tcp_active_pcbs  放到WATCH窗口里又能看到数据
我用原子的例子程序编译也是同样的结果
我查看MAP 文件  这些代码是在 TCP.C 文件里
MAP 里有给TCP.C 分配位置
0x200000c9   COMPRESSED   0x00000003   PAD
    0x200000cc   COMPRESSED   0x00000004   Data   RW         1542    .data               raw.o
    0x200000d0   COMPRESSED   0x00000024   Data   RW         1564    .data               tcp.o
    0x200000f4   COMPRESSED   0x00000020   Data   RW         1590    .data               tcp_in.o
    0x20000114   COMPRESSED   0x0000000c   Data   RW         1628    .data               timers.o
    0x20000120   COMPRESSED   0x00000008   Data   RW         1645    .data               udp.o
    0x20000128   COMPRESSED   0x00000012   Data   RW         1727    .data               ip.o

不知道哪位大侠知道是什么原因么








如需获得 STM32 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

1个回答
  • avatar 憨客鱼
    回答时间: 2023-09-18 14:50:25

    顶一下

会员中心 微信客服
客服
回到顶部