金牌会员
- 积分
- 1887
- 金钱
- 1887
- 注册时间
- 2012-10-28
- 在线时间
- 353 小时
|
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
|