uip移植笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本笔记适用于uIP1.0。

移植平台介绍:MSP430F149+cs8900a+IAR

1、阅读The uIP Embedded TCP/IP Stack The uIP 1.0 Reference Manual.

2、建立一个文件夹,起名myport,将uip-1.0下的uIP和lib两个文件夹拷贝过去,然后再在myport下建立app文件夹。

3、将unix子文件夹下的clock-arch.c、clock-arch.h拷贝到myport下,这个文件实现协议栈所用的时钟,由430的定时器完成,有三个函数:

clock_time_t clock_time(void)

{

return ticks;

}

void clock_init(void)

{

定时器的初始化工作

}

__interrupt void timer_interrupt(void)/*定时器中断函数*/

{

++ticks;

}。

4、将unix子文件夹下的uip-conf.h拷贝到myport下,这个文件实现协议栈所用的配置,按照需要修改之。

5、写cs8900a的驱动函数,这里采用8位、查询模式,替换tapdev.c 或slipdev.c。

6、将unix子文件夹下的main.c函数拷贝到myport下,这个是主调度流程,按照需要修改。

7、建立自己的工程,将以上文件包含。

8、调试,改错。

其中,uip的缓冲区是以字节数组的形式产生,为了保证它的起始地址是偶数,必须指定地址。

UDP的初始化如下

void myudp_init(void)

{

uip_ipaddr_t ipaddr;//定义IP类型变量

uip_ipaddr(ipaddr, 210,29,104,88); //远程IP为210.29.104.88

if(myudp_conn != NULL)

{

uip_udp_remove(myudp_conn);//如果连接已经建立,则删除之

}

myudp_conn = uip_udp_new(&ipaddr, HTONS(1000));//建立到远程ipaddr,端口为1000的连接

if(myudp_conn != NULL)

{

uip_udp_bind(myudp_conn, HTONS(2000));//绑定本地端口为2000,也就是2000-->1000 发数据}

}

void myudp_send(char *str,short n)

{

char *nptr;

nptr = (char *)uip_appdata;

memcpy(nptr, str, n);

uip_udp_send(n); //发送n个数据

}

void newdata()

{

char *nptr;

short len;

len = uip_datalen();//读取数据长度

nptr = (char *)uip_appdata; //取得数据起始指针

if(len<4)myudp_send("Please check the command!\n",26);

else if(strncmp(nptr,"getname",7)==0)myudp_send("My name is xiaomu.",19);

else myudp_send("Unkown command!\n",16);

}

/*---------------------------------------------------------------------------*/

/** \internal

* The main UDP function.

*/

/*---------------------------------------------------------------------------*/

void

myudp_appcall(void)

{

if(uip_udp_conn->rport == HTONS(1000))

{

if(uip_poll()) {

myudp_send("hello\n",6);//定时时间到,发hello

}

if(uip_newdata()) //如果指定IP的指定端口发来数据

{

newdata();

}

}

}

TCP的和这个差不多,初始化时就监听端口uip_listen(HTONS(23));

myudp_conn = uip_udp_new(&ipaddr, HTONS(0));//如果远程ipaddr为0,端口也为0,则可以接收来自任何ip任何端口的信息,但必须指定本地端口,即要绑定。我修改了uip.c文件中关于UDP接收的部分,使它总是可以接收来自任何ip的信息,接收的数据的ip和端口信息保存在当前连接的结构体里面,可以用来回复信息。如果想要主动发送信息,必须在每次发送前给当前连接的结构体赋值,因为我将UDP部分的代码修改为每次打好包以后将结构体的远端信息清零!详见我的移植代码。

相关文档
最新文档