查看: 3044|回复: 4

[求助] LWIP TCP

[复制链接]

该用户从未签到

11

主题

80

帖子

0

中级会员

Rank: 3Rank: 3

积分
298
最后登录
2015-7-21
发表于 2015-3-31 13:51:33 | 显示全部楼层 |阅读模式
求各位大侠帮助解答:FRDM K64
            int main(void)
{  
    int i,j,c,d,cnt;
    char rlt;
    rlt = 9;
    unsigned char a1,a2,a3,a4;
    app_low_level_init();
    OSA_Init();
    lwip_init();
#if LWIP_DHCP
    fsl_netif0_ipaddr.addr=0;
    fsl_netif0_netmask.addr=0;
    fsl_netif0_gw.addr=0;
#else   
    IP4_ADDR(&fsl_netif0_ipaddr, 192,168,2,102);
    IP4_ADDR(&fsl_netif0_netmask, 255,255,255,0);
    IP4_ADDR(&fsl_netif0_gw, 192,168,2,100);
#endif   
    netif_add(&fsl_netif0, &fsl_netif0_ipaddr, &fsl_netif0_netmask, &fsl_netif0_gw, NULL, ethernetif_init, ethernet_input);
    netif_set_default(&fsl_netif0);
    netif_set_up(&fsl_netif0);
    rlt = dhcp_start(&fsl_netif0);
                         这是一个使用DHCP获得路由器分配的IP地址的程序,上面的程序是main函数部分,[size=13.3333330154419px]在完成dhcp_start函数之后是不是还要将返回得到的offered_ip_addr传回给网口数组?然后将DHCP释放关闭 重新用这个得到的IP地址来连接路由器?
求各位大侠解答一下!

我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

11

主题

80

帖子

0

中级会员

Rank: 3Rank: 3

积分
298
最后登录
2015-7-21
 楼主| 发表于 2015-3-31 18:35:11 | 显示全部楼层
成功解决!我之前以为 rlt = dhcp_start(&fsl_netif0);之后就可以自动连接到路由了,实际上还差了一段语句, rlt = dhcp_start(&fsl_netif0);的功能是获取路由分配的IP,但是这个IP并没有使用,所以下面还要进行对fsl_netif0的配置:将fsl_netif0.dhcp里面的offered_ip_addr,offered_sn_mask,offered_gw_addr三个参数要传给fsl_netif0里面的ip,sn和gw,启动网口。
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

80

帖子

0

中级会员

Rank: 3Rank: 3

积分
298
最后登录
2015-7-21
 楼主| 发表于 2015-3-31 18:38:49 | 显示全部楼层
下面程序是LWIP_RAW_DHCP_Client的程序:

  1. #include "lwip/opt.h"
  2. #if LWIP_TCP
  3. // Standard C Included Files
  4. #include <stdio.h>
  5. // lwip Included Files
  6. #include "lwip/debug.h"
  7. #include "lwip/stats.h"
  8. #include "lwip/tcp.h"
  9. #include "lwip/dhcp.h"
  10. #include "lwip/mem.h"
  11. #include "lwip/raw.h"
  12. #include "lwip/icmp.h"
  13. #include "lwip/netif.h"
  14. #include "lwip/sys.h"
  15. #include "lwip/timers.h"
  16. #include "lwip/inet_chksum.h"
  17. #include "lwip/init.h"
  18. #include "netif/etharp.h"
  19. // SDK Included Files
  20. #include "fsl_clock_manager.h"
  21. #include "fsl_os_abstraction.h"
  22. #include "ethernetif.h"
  23. #include "board.h"

  24. const static char test_data[]= "sending test";
  25.       struct tcp_pcb *Clipcb;
  26.       struct ip_addr ipaddr;
  27.       struct netif fsl_netif0;
  28.       ip_addr_t fsl_netif0_ipaddr, fsl_netif0_netmask, fsl_netif0_gw;      
  29. #endif // LWIP_TCP

  30. static void app_low_level_init(void)
  31. {
  32.     // Open uart module for debug
  33.     hardware_init();
  34.     // Open ENET clock gate
  35.     CLOCK_SYS_EnableEnetClock(0);
  36.     // Select PTP timer outclk
  37.     CLOCK_SYS_SetEnetTimeStampSrc(0, kClockTimeSrcOsc0erClk);
  38.     // Disable the mpu
  39.     MPU_BWR_CESR_VLD(MPU, 0);
  40. }

  41. err_t TcpCli_Connected(void *arg,struct tcp_pcb *pcb,err_t err)
  42. {
  43.   tcp_write(Clipcb,test_data,sizeof(test_data),0);
  44.   tcp_close(Clipcb);
  45.   return ERR_OK;
  46. }

  47. void TCP_CLIENT_init()
  48. {
  49.   IP4_ADDR(&ipaddr, 10,193,21,100);
  50.   Clipcb = tcp_new();
  51.   tcp_bind(Clipcb, IP_ADDR_ANY,80);
  52.   tcp_connect(Clipcb,&ipaddr,80,TcpCli_Connected);
  53. }
  54. int main(void)
  55. {  
  56.     int        c,d;
  57.     char rlt;
  58.     rlt = 9;
  59.     app_low_level_init();
  60.     OSA_Init();
  61.     lwip_init();
  62. #if LWIP_DHCP
  63.     fsl_netif0_ipaddr.addr=0;
  64.     fsl_netif0_netmask.addr=0;
  65.     fsl_netif0_gw.addr=0;
  66.        
  67.         netif_add(&fsl_netif0, &fsl_netif0_ipaddr, &fsl_netif0_netmask, &fsl_netif0_gw, NULL, ethernetif_init, ethernet_input);
  68.     rlt = dhcp_start(&fsl_netif0);
  69.     dhcp_fine_tmr();
  70.     while(fsl_netif0.dhcp==NULL||fsl_netif0.dhcp->offered_ip_addr.addr==0
  71.         ||fsl_netif0.dhcp->offered_sn_mask.addr==0
  72.           ||fsl_netif0.dhcp->offered_gw_addr.addr==0)
  73.     {
  74.     }
  75.      netif_set_addr(&fsl_netif0, &(fsl_netif0.dhcp->offered_ip_addr),
  76.                     &(fsl_netif0.dhcp->offered_sn_mask),
  77.                     &(fsl_netif0.dhcp->offered_gw_addr));
  78. #else   
  79.     IP4_ADDR(&fsl_netif0_ipaddr, 192,168,2,102);
  80.     IP4_ADDR(&fsl_netif0_netmask, 255,255,255,0);
  81.     IP4_ADDR(&fsl_netif0_gw, 192,168,2,100);
  82.     netif_add(&fsl_netif0, &fsl_netif0_ipaddr, &fsl_netif0_netmask, &fsl_netif0_gw, NULL, ethernetif_init, ethernet_input);       
  83. #endif   
  84.         netif_set_default(&fsl_netif0);   
  85.         netif_set_up(&fsl_netif0);     
  86.         ip_init();            
  87.         PRINTF(".");PRINTF(".");PRINTF(".");PRINTF("%d",rlt);PRINTF(".");PRINTF(".");PRINTF(".");

  88. #if !ENET_RECEIVE_ALL_INTERRUPT
  89.     uint32_t devNumber = 0;
  90.     enet_dev_if_t * enetIfPtr;
  91. #if LWIP_HAVE_LOOPIF
  92.     devNumber = fsl_netif0.num - 1;
  93. #else
  94.     devNumber = fsl_netif0.num;
  95. #endif
  96.     enetIfPtr = (enet_dev_if_t *)&enetDevIf[devNumber];
  97. #endif

  98.     while(1)
  99.     {
  100.       
  101. #if !ENET_RECEIVE_ALL_INTERRUPT
  102.       ENET_receive(enetIfPtr);
  103. #endif
  104.       TCP_CLIENT_init();
  105.           
  106.       for(c=0;c<10000;c++)
  107.       {
  108.         for(d=0;d<10000;d++);
  109.       }      
  110.     }  
  111. }
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-4-1 15:35:04 | 显示全部楼层
感谢楼主问题解决方案的分享!
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-4-1 16:21:55 | 显示全部楼层
   非常感谢你关于Kinetis的经验分享 !
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-23 04:53 , Processed in 0.094228 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表