关于DCHP 的问题首先要明确:
DHCP获取到的IP是有时效的,当超过这个时间之后,DHCP SERVER 就认为这个IP已经不属于你,你需要重新获取,重新获取就需要使用DHCP 程序,这样DHCP 的任务存在于整个周期中。
网上也看到了很多lwip DHCP的使用流程,但都不全正确。
存在问题:
1. 很明显的是他们都调用了 DHCP_Stop 函数,这就阻止了 IP 地址的续约。
2. 获取到 IP 之后,如果你不想用这个 IP ,你可以release掉。如果不release,那么这个 IP 其实已经绑定了在 网卡上了。
首先:DHCP_start 启动DHCP任务,开始向网络中发送广播包。
在DHCP_Recv函数中可以看到 已经调用 dhcp_bind 函数,但是绑定并不是在这里进行的而是在DHCP_timeout中
如果你设置的IP时间足够长,那么你可以关闭DHCP。
也就是 DHCP_start 之后,就可以了。
代码如下:
[code=cpp]
netif_add(&EMACNetif, &IpAddr, &NetMask,&Gateway, NULL, ethernetif_init, tcpip_input);
netif_set_default(&EMACNetif);
netif_set_up(&EMACNetif);
#if LWIP_DHCP
dhcp_start(&EMACNetif);
#endif
[/code]