用
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_AutoNego
tiation = 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 pcbsn"));
}
while (pcb != NULL) {
LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcbn"));
LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSEDn", pcb->state != CLOSED);
LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTENn", pcb->state != LISTEN);
LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAITn", 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
不知道哪位大侠知道是什么原因么