OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7243|回复: 4

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

[复制链接]

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
发表于 2017-11-13 21:24:06 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 hpdell 于 2017-11-13 21:31 编辑

请教下,关于 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 地址也都是一样的,所以想请教下,这是为何 ??????



最佳答案

查看完整内容[请看2#楼]

终于找到问题点了,但是目前也还是不知道为何这样啊 ? 就是 ip 地址的 第2字节不能够设置为 1,设置为 0 可以, 是不是跟漏油器的 默认网关的 第2字节有关啊 ???? 因为我的漏油器的 默认网关第2字节 就是 为 0
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
 楼主| 发表于 2017-11-13 21:24:07 | 显示全部楼层
zuozhongkai 发表于 2017-11-13 22:19
用printf把lwipdev.ip[0]这种数据全部通过串口打印出来,然后看是不是和你设置的一样的

终于找到问题点了,但是目前也还是不知道为何这样啊 ?

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

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

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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-11-13 22:19:39 | 显示全部楼层
用printf把lwipdev.ip[0]这种数据全部通过串口打印出来,然后看是不是和你设置的一样的
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
 楼主| 发表于 2017-11-14 10:47:35 | 显示全部楼层
zuozhongkai 发表于 2017-11-13 22:19
用printf把lwipdev.ip[0]这种数据全部通过串口打印出来,然后看是不是和你设置的一样的

串口打样出来的数据是对的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-11-15 00:49:06 | 显示全部楼层
hpdell 发表于 2017-11-14 23:42
终于找到问题点了,但是目前也还是不知道为何这样啊 ?

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

要和路由器一致
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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