sys_arch_init.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include <rtthread.h>
  2. #ifdef RT_USING_FINSH
  3. #include <finsh.h>
  4. #endif
  5. #include "lwip/debug.h"
  6. #include "lwip/mem.h"
  7. #include "lwip/sys.h"
  8. #include "lwip/stats.h"
  9. #include "lwip/tcpip.h"
  10. #include "lwip/ip_addr.h"
  11. #include "lwip/dhcp.h"
  12. #include "netif/ethernetif.h"
  13. #include "netif/etharp.h"
  14. /*
  15. * lwip system initial entry
  16. */
  17. void lwip_sys_init()
  18. {
  19. struct ip_addr ipaddr, netmask, gw;
  20. #if LWIP_DHCP
  21. rt_uint32_t mscnt = 0;
  22. IP4_ADDR(&gw, 0,0,0,0);
  23. IP4_ADDR(&ipaddr, 0,0,0,0);
  24. IP4_ADDR(&netmask, 0,0,0,0);
  25. #else
  26. IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3);
  27. IP4_ADDR(&gw, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3);
  28. IP4_ADDR(&netmask, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3);
  29. #endif
  30. tcpip_init(RT_NULL, RT_NULL);
  31. netif_set_addr(netif_default, &ipaddr, &netmask, &gw);
  32. netif_set_up(netif_default);
  33. #if LWIP_DHCP
  34. /* use DHCP client */
  35. dhcp_start(netif_default);
  36. while (netif_default->ip_addr.addr == 0)
  37. {
  38. rt_thread_delay(DHCP_FINE_TIMER_MSECS * RT_TICK_PER_SECOND / 1000);
  39. dhcp_fine_tmr();
  40. mscnt += DHCP_FINE_TIMER_MSECS;
  41. if (mscnt >= DHCP_COARSE_TIMER_SECS*1000)
  42. {
  43. dhcp_coarse_tmr();
  44. mscnt = 0;
  45. }
  46. }
  47. rt_kprintf("Acquired IP address from DHCP server:");
  48. rt_kprintf("%d.%d.%d.%d\n", netif_default->ip_addr.addr & 0xff,
  49. (netif_default->ip_addr.addr>>8) & 0xff,
  50. (netif_default->ip_addr.addr>>16) & 0xff,
  51. (netif_default->ip_addr.addr>>24) & 0xff);
  52. #endif
  53. #if defined(RT_USING_FINSH) && (LWIP_STATS_DISPLAY)
  54. finsh_syscall_append("lwip_info", (syscall_func)stats_display);
  55. #endif
  56. }