硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2258|回复: 5
收起左侧

请教下,关于 lwip 的ip地址设置转换的问题 ?

[复制链接]

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
发表于 2017-11-13 21:36:34 | 显示全部楼层 |阅读模式
请教下,关于 lwip 的ip地址设置转换的问题 ?
具体如下:

请教下,关于 lwip 的 IP4_ADDR 这个使用 ?



//lwip控制结构体
typedef struct  
{
    u8 mac[6];      //MAC地址
    u8 remoteip[4];    //远端主机IP地址
    u8 ip[4];       //本机IP地址
    u8 netmask[4];     //子网掩码
    u8 gateway[4];     //默认网关的IP地址
   
    vu8 dhcpstatus;    //dhcp状态
                  //0,未获取DHCP地址;
                  //1,进入DHCP获取状态
                  //2,成功获取DHCP地址
                  //0XFF,获取失败.
}__lwip_dev;







//lwipx:lwip控制结构体指针
void lwip_comm_default_ip_set(__lwip_dev *lwipx)
{
  u8 i;
        u32 mcuID[3];
  for(i=0; i<3; i++)
  {
                mcuID = MCU_GetChipID(i*4); //获取STM32的唯一ID号,后24位作为MAC地址后三字节
  }  
        //默认远端IP为:192.168.1.123
        lwipx->remoteip[0]=192;        
        lwipx->remoteip[1]=168;
        lwipx->remoteip[2]=1;
        lwipx->remoteip[3]=123;

        //MAC地址设置(高三字节固定为:2.0.0,低三字节用STM32唯一ID)
        lwipx->mac[0]=2;//高三字节(IEEE称之为组织唯一ID,OUI)地址固定为:2.0.0
        lwipx->mac[1]=0;
        lwipx->mac[2]=0;
        lwipx->mac[3]=(mcuID[2]>>16)&0XFF;//低三字节用STM32的唯一ID
        lwipx->mac[4]=(mcuID[2]>>8)&0XFFF;
        lwipx->mac[5]=mcuID[2]&0XFF;

        //默认本地IP为:192.168.1.105
        lwipx->ip[0]=192;        
        lwipx->ip[1]=168;
        lwipx->ip[2]=1;
        lwipx->ip[3]=105;

        //默认子网掩码:255.255.255.0
        lwipx->netmask[0]=255;        
        lwipx->netmask[1]=255;
        lwipx->netmask[2]=255;
        lwipx->netmask[3]=0;

        //默认网关:192.168.1.1
        lwipx->gateway[0]=192;        
        lwipx->gateway[1]=168;
        lwipx->gateway[2]=0;
        lwipx->gateway[3]=1;        

        lwipx->dhcpstatus=0;//没有DHCP        
}



{
  lwip_comm_default_ip_set( &lwipdev );


  // IP addresses initialization
  IP_ADDRESS[0] = 192;
  IP_ADDRESS[1] = 168;
  IP_ADDRESS[2] = 0;
  IP_ADDRESS[3] = 105;

  NETMASK_ADDRESS[0] = 255;
  NETMASK_ADDRESS[1] = 255;
  NETMASK_ADDRESS[2] = 255;
  NETMASK_ADDRESS[3] = 0;

  GATEWAY_ADDRESS[0] = 192;
  GATEWAY_ADDRESS[1] = 168;
  GATEWAY_ADDRESS[2] = 0;
  GATEWAY_ADDRESS[3] = 1;

  tcpip_init( NULL, NULL );

// 方法 1 ok
  IP4_ADDR(&ipaddr, IP_ADDRESS[0], IP_ADDRESS[1], IP_ADDRESS[2], IP_ADDRESS[3]);
  IP4_ADDR(&netmask, NETMASK_ADDRESS[0], NETMASK_ADDRESS[1] , NETMASK_ADDRESS[2], NETMASK_ADDRESS[3]);
  IP4_ADDR(&gw, GATEWAY_ADDRESS[0], GATEWAY_ADDRESS[1], GATEWAY_ADDRESS[2], GATEWAY_ADDRESS[3]);


// 方法 2  不行 ,不知道是为何 ??
        IP4_ADDR(&ipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
        IP4_ADDR(&netmask,lwipdev.netmask[0],lwipdev.netmask[1] ,lwipdev.netmask[2],lwipdev.netmask[3]);
        IP4_ADDR(&gw,lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);

  // add the network interface (IPv4/IPv6) with RTOS
  netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, eernetif_init, &tcpip_input);

}

具体描述:
使用方法1 可以ping 网
使用方法2,ping 网不通,

上述设置的 ip 地址也都是一样的,所以想请教下,这是为何 ??????
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2017-11-14 00:59:54 | 显示全部楼层
将你的lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]等数值全部打印出来看下,如果没有错误,应该是你的程序中存在其他的bug。
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
 楼主| 发表于 2017-11-14 10:53:11 | 显示全部楼层

回 eric2013 的帖子

eric2013:将你的lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]等数值全部打印出来看下,如果没有错误,应该是你的程序中存在其他的bug。 (2017-11-14 00:59) 
打印出来的数据是对的,而且我的优化等级从 0-3 都试过了,结果也都一样

使用的 iar-7.8版本的编译器
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2017-11-14 10:59:28 | 显示全部楼层

回 hpdell 的帖子

hpdell:打印出来的数据是对的,而且我的优化等级从 0-3 都试过了,结果也都一样

使用的 iar-7.8版本的编译器 (2017-11-14 10:53) 
直接填数据值看下。是不是有问题。
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
 楼主| 发表于 2017-11-14 15:39:55 | 显示全部楼层

回 eric2013 的帖子

eric2013:直接填数据值看下。是不是有问题。 (2017-11-14 10:59) 
方法 1 是使用的数组的方式,是直接填入数据的,ping 网可以

方法 2 是使用结构体,但是也是直接赋值的,ping 网不同,
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
 楼主| 发表于 2017-11-14 23:47:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:直接填数据值看下。是不是有问题。 (2017-11-14 10:59) 
终于找到问题点了,但是目前也还是不知道为何这样啊 ?

就是 ip 地址的 第2字节不能够设置为 1,设置为 0 可以,

是不是跟漏油器的 默认网关的 第2字节有关啊 ????

因为我的漏油器的 默认网关第2字节 就是 为 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 07:11 , Processed in 0.164623 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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