|
From: | address@hidden |
Subject: | Re: [lwip-users] board hangs using dhcp |
Date: | Wed, 17 Mar 2010 19:24:54 +0100 |
User-agent: | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.1.8) Gecko/20100227 Thunderbird/3.0.3 |
Andrea Visinoni wrote:
You're still violating threading requirements then, and can be lucky it works. You might run into problems with that later because two threads are active in the lwIP code at the same time, which is not supported. If you don't want to change that, I can't make you to, I can only repeat myself and tell you that the code below is *not* safe!Switching to lwip 1.3.2 solved the issue running the same code.
Leaving away the calls to dhcp_fine_tmr and dhcp_coarse_tmr and only sleeping should work, too: the timer functions should be called by the tcpip_thread already.
Simon
Il 04/03/2010 16.13, address@hidden ha scritto:It seems you are violating threading requirements: calling the netif_* and dhcp_* functions from any other thread than the tcpip_thread is not allowed! And if the code below *would* run in that thread context, it would block RX-packets: the tcpip_thread must process incoming packets from its mbox. If you are running multithreaded, you have to use tcpip_callback to get into the tcpip_thread and call dhcp_start from there. Also, the timer functions will get called automatically by the tcpip_thread, so there's no need to call them on your own. Simon Andrea Visinoni wrote:Hi, i have a simple webserver task on my custom board (at91sam7x256) using freertos and lwip 1.2.0. Using static ip i have no problems, but using dhcp my board hangs after the very first send (using socket api or netconn_write...same problem). The port is open, the connection is accepted, but when i start sending data to client in several sends, only the first one succeed. this is my dhcp start code: IP4_ADDR(&xIpAddr,0,0,0,0); IP4_ADDR(&xNetMast,0,0,0,0); IP4_ADDR(&xGateway,0,0,0,0); netif_add(&EMAC_if,&xIpAddr,&xNetMast,&xGateway, NULL, ethernetif_init, tcpip_input); // make it the default interface netif_set_default(&EMAC_if); // Avvio DHCP dhcp_start(&EMAC_if); // DHCP negotiation int mscnt = 0; while (EMAC_if.ip_addr.addr == 0) { sys_msleep(DHCP_FINE_TIMER_MSECS); dhcp_fine_tmr(); mscnt += DHCP_FINE_TIMER_MSECS; if (mscnt>= DHCP_COARSE_TIMER_SECS * 1000) { dhcp_coarse_tmr(); mscnt = 0; } } Any hints? Best regards Andrea _______________________________________________ lwip-users mailing list address@hidden http://lists.nongnu.org/mailman/listinfo/lwip-users_______________________________________________ lwip-users mailing list address@hidden http://lists.nongnu.org/mailman/listinfo/lwip-users_______________________________________________ lwip-users mailing list address@hidden http://lists.nongnu.org/mailman/listinfo/lwip-users
[Prev in Thread] | Current Thread | [Next in Thread] |