移植
先瞧瞧uIP在系统中的位子:
硬件驱动是需要提前完成,然后和uIP挂接。应用层则是咱所要实现的功能。
1、从源码中取出uIP协议栈核心部分以及用于硬件挂接的文件:
将上图中所指文件添加到工程中:
修改uip_dev下的文件:
按照上图的顺序来:
第一个文件:clock-arch.h
第二个文件:(tapdev.c这里完成网卡驱动的3个函数)
第一个函数(tapdev_init(void))这个网卡驱动
const u8 _macaddr[6] = {'l','i','k','l','o','n'};
//只要与局域网内其他网卡MAC地址不同即可
/*----------网卡驱动根据用户自己的网卡来填写-----------------*/
u8
tapdev_init(void)
{
u8 res,i;
res = ENC28J60_Init((u8 *)_macaddr); //配置网卡的MAC地址
for(i = 0;i < 6;i++){
uip_ethaddr.addr[i] = _macaddr[i];
}
ENC28J60_PHY_Write(PHLCON,0x0476); //网卡驱动函数在顶楼的工程模板里有
return res;
}
第二个函数(tapdev_read(void))
/*---------------------------------------------------------------------------*/
unsigned int
tapdev_read(void)
{
return ENC28J60_Packet_Receive(MAX_FRAMELEN,uip_buf);
}
/*---------------------------------------------------------------------------*/
第三个函数(tapdev_send(void))
/*---------------------------------------------------------------------------*/
void
tapdev_send(void)
{
ENC28J60_Packet_Send(uip_len,uip_buf);
}
/*---------------------------------------------------------------------------*/
第三个文件:(tapdev.h这里直接过)
第四个文件:(uip_conf.h 配置文件,根据需要配置)
第五个文件:(clock-arch.c 时钟部分)
#include "clock-arch.h"
#include "timerx.h"
extern u32 uip_timer; //timerx.c
/*---------------------------------------------------------------------------*/
clock_time_t
clock_time(void)
{
return uip_timer;
}
/*---------------------------------------------------------------------------*/
修改完了之后开始编译,发现有很多错误
1、..\uip\uip.h(1180): error: #20: identifier "uip_tcp_appstate_t" is undefined
2、
3、
4、现在没有写应用程序,下面这些警告不用管
5、
6、
7、
8、
9、
10、
11、
现在编译应该是没有错误和警告了.......................(还没移植完哟,咱继续)
开始搬运代码:(搬过来的代码中设置IP等根据具体情况设置)
然后将while(1)里面的代码全部复制,搞成一个新的函数:
现在我们程序的主函数是: