本笔记适用于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); } /*-------------------------------------------...