3774|6

36

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

有关LwIP中IP地址的定义 [复制链接]

开始的时候PC作为服务器,无法接受数据,经过几天,终于发现了错误所在,可是不知道为什么,麻烦各位帮我看看!
const static unsigned char test_data[]="This is LwIP TCP Client 在Luminary Cortex-M3上的测试!\r\n";


#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_nvic.h"
#include "inc/hw_types.h"
#include "driverlib/ethernet.h"
#include "driverlib/flash.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "utils/locator.h"
#include "utils/lwiplib.h"
#include "utils/uartstdio.h"
#include "utils/ustdlib.h"
#include "grlib/grlib.h"

//*****************************************************************************
//
// Defines for setting up the system clock.
//
//*****************************************************************************
#define SYSTICKHZ               100
#define SYSTICKMS               (1000 / SYSTICKHZ)
#define SYSTICKUS               (1000000 / SYSTICKHZ)
#define SYSTICKNS               (1000000000 / SYSTICKHZ)

//*****************************************************************************
//
// Interrupt priority definitions.  The top 3 bits of these values are
// significant with lower values indicating higher priority interrupts.
//
//*****************************************************************************
#define SYSTICK_INT_PRIORITY    0x80
#define ETHERNET_INT_PRIORITY   0xC0

//*****************************************************************************
//
//the ip of PC
//
//*****************************************************************************
#define ip_PC  {192,168,0,101}

static const unsigned char pcIPAddress[]=ip_PC;

//*****************************************************************************
//
//address for Mac,IP,Mack,gateway address
//
//*****************************************************************************

#define My_Mac_ID         {0X00,0x14,0x97,0x0F,0x1D,0xE3}  //存储以太网控制器的物理地址,即MAC地址
#define MY_IP_ID               {192,168,0,100}                   //以太网通信的IP地址
#define IP_MARK_ID           {255,255,255,0}                           //255.255.255.0,子网掩码
#define MY_GATEWAY_ID   {192,168,0,1}                     //以太网通信的网关地址

static const unsigned char pucMACAddress[]=My_Mac_ID;
static const unsigned char IPAddress[] = MY_IP_ID;
static const unsigned char NetMaskAddr[] = IP_MARK_ID;
static const unsigned char GwWayAddr[] = MY_GATEWAY_ID;

//*****************************************************************************
//
//define a tcp_pcb struct for the tcp_write
//
//*****************************************************************************

static struct tcp_pcb *g_psPCB = NULL;

//*****************************************************************************
//
//a struct for the state of the pcb
//
//*****************************************************************************


typedef struct
{
    unsigned long ulRetryCount;               
    tBoolean bCONTROLSent;               
}
tAPPState;

//*****************************************************************************
//
//this function will used after the connection is builded
//
//*****************************************************************************

static err_t tcp_trans(void *arg,struct tcp_pcb *tpcb,err_t err)
{
        tAPPState *pState;        
          pState = arg;
          if((err == ERR_OK) && (test_data != NULL))
    {
             tcp_write(tpcb,test_data,sizeof(test_data),0);

    }

         if((err == ERR_OK) && (test_data == NULL))
    {
        //
        // Close the connection.
        //
        mem_free(pState);
        tcp_close(tpcb);
    }

    return ERR_OK;         
}

//*****************************************************************************
//
// The interrupt handler for the SysTick interrupt.
//
//*****************************************************************************
void
SysTickIntHandler(void)
{
    //
    // Call the lwIP timer handler.
    //
    lwIPTimer(SYSTICKMS);

}


//*****************************************************************************
//
//this is the main function
//
//*****************************************************************************

int main()
{

        struct ip_addr ulIPAddr,ulNetMask,ulGWAddr,pIPAddress;
           struct tcp_pcb *tcp_pcb_conn;

        //
    // Set the system clock to run at 50MHz from the PLL.
    //
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);

        //
    // Enable and Reset the Ethernet Controller.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
    SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);

        // Enable Port F for Ethernet LEDs.
    //  LED0        Bit 3   Output
    //  LED1        Bit 2   Output
    //
    GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3);

        //
    // Configure SysTick for a periodic interrupt.
    //
    SysTickPeriodSet(SysCtlClockGet() / SYSTICKHZ);
    SysTickEnable();
    SysTickIntEnable();

    //
    // Enable processor interrupts.
    //
    IntMasterEnable();

        //
    // Initialze the lwIP library, using the stacic ip.
    //

        IP4_ADDR(&ulIPAddr,IPAddress[3],IPAddress[2],IPAddress[1],IPAddress[0]);
    IP4_ADDR(&ulNetMask,NetMaskAddr[3],NetMaskAddr[2],NetMaskAddr[1],NetMaskAddr[0]);
    IP4_ADDR(&ulGWAddr,GwWayAddr[3],GwWayAddr[2],GwWayAddr[1],GwWayAddr[0]);
        IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]);
    lwIPInit(pucMACAddress,ulIPAddr.addr, ulNetMask.addr, ulGWAddr.addr, IPADDR_USE_STATIC);

        //
        //create a TCP connection betweent LM and PC
        //

        tcp_pcb_conn=tcp_new();
        tcp_bind (tcp_pcb_conn,&ulIPAddr, 1026);
        tcp_connect(tcp_pcb_conn,&pIPAddress,1026,tcp_trans);

        while(1)
        {
        }
}
上面是开始的程序,后来发现PC机IP的定义和初始化修改后,问题解决了!
大体如下:
开始时候的定义:
#define ip_PC  {192,168,1,101}
static const unsigned char pcIPAddress[]=ip_PC;
IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]);
这样再通过pIPAddress进行传递

新的程序是这样的:
IP4_ADDR(&pIPAddress,192,168,1,101);
再通过pIPAddress进行传递PC机的IP

我感觉没有什么变化,可是不修改就无法接受数据,麻烦各位看看是为什么,谢谢!

最新回复

IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]); 那这里边顺序你觉得是对的吗?  详情 回复 发表于 2012-8-27 09:33
 
点赞 关注

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
IP4_ADDR(&pIPAddress,192,168,1,101);
注意这里边 IP 地址的顺序。

点评

我感觉两种写法一样啊。。位置好像没错吧!  详情 回复 发表于 2012-8-23 14:55
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 Study_Stellaris 的帖子

我感觉两种写法一样啊。。位置好像没错吧!

点评

我觉得位置是有问题的,试试IP4_ADDR(&pIPAddress,101,1,168,192);  详情 回复 发表于 2012-8-24 18:12
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 

回复 板凳 lvfeihi 的帖子

我觉得位置是有问题的,试试IP4_ADDR(&pIPAddress,101,1,168,192);

点评

我的意思是: 开始是这样写的,不行! #define ip_PC {192,168,1,101} static const unsigned char pcIPAddress[]=ip_PC; IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]  详情 回复 发表于 2012-8-26 20:52
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 Study_Stellaris 的帖子

我的意思是:
开始是这样写的,不行!
#define ip_PC  {192,168,1,101}
static const unsigned char pcIPAddress[]=ip_PC;
IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]);
这样再通过pIPAddress进行传递,这样写不可以!

新的程序是可以的!
IP4_ADDR(&pIPAddress,192,168,1,101);
再通过pIPAddress进行传递PC机的IP,这样是可以的!

点评

IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]); 那这里边顺序你觉得是对的吗?  详情 回复 发表于 2012-8-27 09:33
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

6
 

回复 5楼 lvfeihi 的帖子

IP4_ADDR(&pIPAddress,pcIPAddress[3],pcIPAddress[2],pcIPAddress[1],pcIPAddress[0]);
那这里边顺序你觉得是对的吗?

点评

应该是对的,这个格式和ARM的IP格式是一样的!  详情 回复 发表于 2012-8-27 12:35
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 Study_Stellaris 的帖子

应该是对的,这个格式和ARM的IP格式是一样的!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表