ZLIP??ü??
??????1
?? 1 ??????????????????????汾??2005-11-28??
|
??TCP/IPЭ??????????????? ??IcmpЭ?顣 ??IP?? ????????? ??TCPЭ??? ??TCPIP????????? ????????Э?????????? ??ARPЭ?顣 ??????????Э?顣 ??RTL8019AS????????о????????? ??????????????????? ????ò?Э???????? ???????????????????????????????? |
KeilC??????KeilC51??????????????????KeilC51??Ex1.Uv2??
MCU??????????????51?????????????
???????????????????????????????????????????????е??????????????????????TCP/IPЭ?????????????TCP/IP???????????51???????????51???????KeilC51???????????????????洢?????????????????????ZLIP?????????Щ???????TCP/IPЭ?????
ZLIP??????????
1) ????TCP/IPЭ????????С????????ZLIP????????UDPЭ?飬ICMPЭ??????????е?echoЭ??(???ping?????)??lwIP?????????????TCP/IPЭ????????????51????????????
2)
??ò???????????????socket????uIP?к?С??????????С???????????AVR????????????????5K???????RAM???????100??????????uIP?????????????????????????RAM??÷???????к?BSD???????????????ò????????
3)
???KeilC51?????????????е??????????????xdata????????????????洢???????????????????????????reentant?????KeilC??С???±???
???12M????KeilC????????89C55????2??????????????£?
??1??????????
???????????? |
??RAM??????????? |
???????????/?? |
14841 |
11068 |
5.892K |
ZLIP????????£?
1)?????д???????RAM???????
2)???????MFC??CScoket????????????÷???
3)????TCP????????????豸??????????????????????????????CPU??????????滻??????Э????????????豸??
4)???ping??????????
5)?????????????е??????????????xdata????????????????洢???????????????????????????reentant?????KeilC??С??????
?1??RTL8019AS??·?????
?2??RTL8019AS??·?????
?ó???????KeilC????????棬???????????????????·??????51????????·????У?????????о?RTL8019AS??·????RAM??·??
????????о?RTL8019AS??·??????1???2?????A0??A4???????D0??D7?????????CSRTL?????????????Ч????RD-??WR-???д??????
zlIP????????????BSD??????????????
TCPSocket()??
????????socket xdata * TCPSocket(IP_ADDR ScrIP)??
??????????????????ScrIP??????????????IP?????????socket????????????????????NULL??
TCPConnect()??
????????BOOL TCPConnect(socket xdata * pTCB, IP_ADDR DestIP, WORD DestPort,void (code * recv)(void xdata * buf,WORD size),void (code * close)(socket xdata * pSocket))??
???????IP????DestIP?????????DestPort???????????????recv??close????????????????????????????TCP???????????????????????????????TRUE????????FALSE??
TCPSend()??
????????BOOL TCPSend(socket xdata * pTCB,void xdata *buf,WORD DataSize)??
???????????????????????TCP??????????????pTCB???????????????????????????buf????С?DataSize????????????TRUE????????FALSE??
TCPSendEx()
????????BOOL TCPSendEx(socket xdata * pTCB,struct SMemHead xdata *MemHead) ??
??????????????????????TCPSend?????????????????????????buf????????У???????TCPSend??????????ú?????buf??????????????????TCP???????С????TCPSendEx?????????TCPAllocate(DATA_SIZE)??????TCP??????????????????????TCP???????У??????TCPSend????????????????????????????
???????????????TCP??????????????pTCB??????????????????????TCP????MemHead?С???????????TRUE????????FALSE??
TCPListen()??
????????BOOL TCPListen(socket xdata *pTCB,WORD ScrPort,void (code * accept)(socket xdata *pNewTCB)) ??
?????????????pTCB??ScrPort????????????accept????п?????????????????????????????????????
TCPClose()??
????????void TCPClose(socket xdata *pTCB)??
????????????????????????TCPClose????????????????????pTCB??????????TCPClose??????????TCP???????????????????????з?????????
TCPAbort()??
????????void TCPAbort(socket xdata *pTCB)??
???????????????????????????TCPAbort????????????????????????
???ZLIP????????????????(??????????main.c???)?????????????£?
1)???????????25ms?????ж??????????????Timer?????????????ж?????е???NetIfTimer(); ARPTimer(); TCPTimer();??????????
2)дOnReceive????????????????μ??????????????????????????
void OnReceive1(void DT_XDATA * buf,WORD size) REENTRANT_MUL
?????TCPConnect???????OnReceive1?????TCPConnect?????????????????????????socket????????????TCP???????????????????????????OnReceive1??????buf????????????size???????????????С?????????OnReceive1?д?????????????????????ж??TCP?????????????????????????????????OnReceive??????
3)дOnClose????????????????μ??????????????????????????
void OnClose1(socket DT_XDATA * pSocket) REENTRANT_MUL
??????OnReceive????????TCP????????????????????????????????????????????????OnClose??????pSocket????????socket???????????????????????????OnClose?????е???TCPClose???????????????ж??TCP?????????????????????????????????OnClose??????
4)дOnAccept????????????????????TCPListen???????????????????дOnAccept????????????????μ??????????????????????????
void OnAccept1(socket DT_XDATA *pNewSocket) REENTRANT_MUL
?????????listen??socket??????????????????????????ú?????pNewSocket?????????????????????socket????????OnAccept???????????′????
ExAccept = pNewSocket; //????pNewSocket??????????ExAccept????????
pNewSocket->recv = OnAcceptRecv; //????pNewSocket??OnReceive??????
pNewSocket->close = OnClose; //????pNewSocket??OnClose??????
?????????ж??????listen??socket?????????????socket??????OnAccept????
5)???????????????????????
NetIfInit(); //???????????
ARPInit(); //?????ARP
TCPInit(); //?????TCP
MemInit(); //???????????
RTLInit(EtherAddr); //?????RTL8019AS??EtherAddr?????????
EtherDevInit(&DevRTL,EtherAddr,RTLSendPacket,RTLReceivePacket);
NetIfAdd(IPAddr,NetMask,GateWay,EtherInput,EtherOutput,&DevRTL);
6)???25ms?????ж?
7)???????
ExConn = TCPSocket(IPAddr);
?????????socket??????????socket???IP?????
8)
??????????????????????????????
TCPListen(ExConn,Port1,OnAccept1);
????????????Port1??????????????????????OnAccpet1??????
???????????????????????????????????????
TCPConnect(ExConn,IPAddr2,Port2,OnReceive2,OnClose2);
????IP????IPAddr2?????????Port2??????????????????????????????????????????????????OnReceive1????????????????????????????????????OnClose1??????
9)?????socket????????????????????TCPSend????TCPSendEx?????????????
10)?????????????????TCPClose????????
11)?????socket?????????????TCPAbort?????socket????????
???Netif\RTL8019.h?е?
#define
RTL_BASE_ADDRESS 0xb000
?????????0xb000?????????????0xb000????????????CSRTL??????????????????RTL8019AS??
???TCIPIP\TCPIPmem.h?е?
#define TCPIP_BUF_SIZE 0x2000
????8K?????????4K??????????С???????????????????
???????????ж???????豸?????TCPIP\NetIf.h?е?
#define NET_IF_MAX_NUM 1
????????????????豸??
?????????????NetIfAdd????????????豸??
???TCPIP\TCP.h?е?
#define TCP_CONNECTION_MAX_NUM 10
??????????????10??socket????????
??е??????????????????????????Э?????????????????TCPIP\NetIf.h?е?
#define NETIF_HEAD_MAX_LEN 14
???????????????????14??????
???Netif\ARP.h?е?
#define ARP_ENTRY_MAX_NUM 4
????????ARP???С?4?????????ARP?????????????μ??????????????????????
????????????????ping?????????TCPIP\icmp.h?е?
#define ICMP_EN 1
???????????????????????????????????????0
zlIP????51??????????????????????????????CPU??????е?GloblDef\GlobleDef.h?????CPU?????????????????????
1) ????BYTE,WORD,DWORD,BOOL??????????
2) ????#define MCU_C51????С?????????????????????C51???ANSIC,?????н????C51???е??????
3) ?????????á?????????????????????????????????????51??????????????0x8086CPU??????????# define HOST_ORDER_AS_NET???????????????????????????
4) ???????????ж?????51??????????С????絥?????????RTOS51??uc/OS-II??Tiny51?????????????????????????# define MULTI_THREAD?????????????м??????е???????????reentrant??????
5) ???????????????????# define DEBUG?????
6) ????IO??RAM???????????????????RTL8019.c????е?#define ReadReg(port) (*((BYTE DT_XDATA *)port))??#define WriteReg(port,value) (*((BYTE DT_XDATA *)port) = value)??????????????IO????
????????????????????ú?????????????????????????????????????????????????????????λ????????
?ο?????
[1] ?????????????. TCP/IP??51????????????????. ??2003??????????????????????????.2003??
[2] (????????)Adam
Dunkels.uIP - A Free Small TCP/IP Stack[Z]. http://dunkels.com/adam/uip/index.html.
2002-1-15.1
[3] (????????)Adam Dunkels.lwIP - News
Archive[Z].http://www.sics.se/~adam/lwip/news.html.2001-1-9.
[4] ?????????????. ANSIC????KeilC51????????. ??2003??????????????????????????.2003??