第一讲:UIP基本移植
下载的协议包,文件目录如下:
移植过程:
1、 将uip文件里的所有文件添加到工程内;
2、 将Unix文件内的文件拷贝出来并且进行修改
tapdev.c文件有添加或者修改的函数:
void tapdev_init(void) 网络模块的初始化函数
unsigned int tapdev_read(void) 读数据函数,添加网络模块的读缓存数据的函数
void tapdev_send(void) 网络模块发送数据
发送数据和接收数据都通过全局变量:
uip_buf :数据缓存
uip_len :数据长度
clock-arch.c 文件修改
clock_time_t clock_time(void) 返回没10ms加1的数据。这我用的是定时中断10ms全局变量加1,然后函数返回全局变量。
修改和配置文件uip-conf.h
//最大TCP连接数
#define UIP_CONF_MAX_CONNECTIONS 40
//最大TCP端口监听数
#define UIP_CONF_MAX_LISTENPORTS 40
//uIP缓存大小
#define UIP_CONF_BUFFER_SIZE 4096 //注:这里应该设置的数值不能大于驱动最大发送字节的数值(如果用ENC28J60的话,应该不能大于1518)
//CPU大小端模式
//小端模式的
#define UIP_CONF_BYTE_ORDER UIP_LITTLE_ENDIAN
//日志开关
#define UIP_CONF_LOGGING 0
//UDP支持开关
#define UIP_CONF_UDP 0
//UDP校验和开关
#define UIP_CONF_UDP_CHECKSUMS 1
//uIP统计开关
#define UIP_CONF_STATISTICS 1
#include "MY_APPCall.h"//这个是用的回调函数的文件的头文件,跟据用的实际情况而修改。但这个一定不能漏。因为这问还要定义两个比较中要的变量。
在用户回调函数文件的头件定义两个变量:
//定义uip_tcp_appstate_t 数据类型,用户可以添加应用程序需要用到
//成员变量。不要更改结构体类型的名字,因为这个类型名会被uip引用。
//uip.h 中定义的 structuip_conn 结构体中引用了uip_tcp_appstate_t
struct tcp_demo_appstate
{
uint8 state;
uint8 *textptr;
inttextlen;
};
typedef struct tcp_demo_appstateuip_tcp_appstate_t;
void MY_APPCall(void);
//定义应用程序回调函数
#ifndef UIP_APPCALL
#define UIP_APPCALL MY_APPCall //定义回调函数为tcp_demo_appcall
注意:MY_APPCall 为回调函数。所有的数据处理都在这个函数中完成。而不是在main函数中完成的。
3、最后修改工程配置,将uip-conf.h所在文件路径和uip路径加到工程的编译头文件路径中。
谢谢小编的分享哦, 期待下一节的精彩;
LZ用的什么开发板啊
主控是这个:LPC1114
开发板是我自己做的。没得买哦~ 主控芯片是LPC1114, NXP公司的ARM m0 芯片。我到时候会上传的部分代码的~
学习学习,谢谢分享!
期待小编的漏洞视频哦