⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test2.c

📁 实现在ARM上的ICP/IP功能的源代码。
💻 C
字号:
#include "true_false.h"
#include "stdlib.h"
#include "typedef.h"
#include "mem_man.h"
#include "rtl8019.h"
#include "netif.h"
#include "etherif.h"
#include "ip.h"
#include "arp.h"
#include "utilities.h"
#include "tcp.h"
#define DATA_SIZE 	1024*10\


BYTE DataBlock[DATA_SIZE];
BYTE   str[]="hello";
socket		  *   ExConn;
socket		  *  	ExAccept;
socket		  *  	ExListen;


void OnReceive(void   * buf,WORD size)   
{
	/* send back data */
	TCPSend(ExConn,buf,size);
}
void OnAcceptRecv(void   *buf,WORD size)  
{
	/* printf received data */
#ifdef DEBUG
	while(size--)
		printf("%c",*((BYTE   *)buf)++);
#endif
		
	/* send back data */
	TCPSend(ExAccept,buf,size);
}
void OnClose(socket   * pSocket)  
{
	TCPClose(pSocket);	/* we close too */
}

void OnAccept(socket   *pNewSocket)  
{
	ExAccept = pNewSocket;
	pNewSocket->recv = OnAcceptRecv;
	pNewSocket->close = OnClose;
}


void Timer(void)  //interrupt 1
{
}


void InterruptInit()
{
}

void test(void)
{ 	 
    struct SMemHead *MemHead;
    struct SEtherDevice  DevRTL;
	BYTE  EtherAddr[ETHER_ADDR_LEN] = {0x52,0x54,0x4c,0x30,0x2e,0x2f};
	IP_ADDR		IPAddr	= 0xc0a8020d;	/* 192.168.2.13	*//* ca71e590:202.113.229.144 *//* ca711075:202.113.16.117 */
	IP_ADDR		NetMask	= 0xffffff00;	/* 255.255.255.0 */
	IP_ADDR		GateWay	= 0xc0a80201;	/* 192.138.2.1  */
	
//	rNCACHBE0 = ((Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);
    //在上面的数据区域不使用高速缓存
//    rSYSCFG = CACHECFG;    //8K字节cache,写缓冲使能,data abort使能
    Port_Init();		//IO口初始化	
	Uart_Select( 0 ) ;		//选择串口0
	Uart_Init( 32000000, 115200 );
	/*
	 * init
	 */
	Timer_Init();
	//while(1);
	
	printf("\nHELLO THIS IS ZLIP_ARM7\n");
	printf("\nNetIfInit();\n");
	NetIfInit();
	printf("\nARPInit();\n");
	ARPInit();
	printf("\nTCPInit();\n");
	TCPInit();
	printf("\nMemInit()\n");
	MemInit();
	printf("\nRTLInit(EtherAddr);	\n");
	RTLInit(EtherAddr);	
	
	/* init Devcie struct and init this device */
	printf("\nEtherDevInit();\n");
	
	EtherDevInit(
	&DevRTL,
	EtherAddr,
	RTLSendPacket,//问题出在这里!
	RTLReceivePacket);
	
/*
	MemCopy(DevRTL.Addr,EtherAddr,ETHER_ADDR_LEN);
   
    DevRTL.send=RTLSendPacket ;
    DevRTL.recv= RTLReceivePacket;
    //这里是因为rtl发送函数和函数指针的类型的不匹配引起的修改!
	//发送的数据都用void就ok了
*/	/* add this device to NetIf */
	printf("\nNetIfAdd();\n");
	NetIfAdd(IPAddr,NetMask,GateWay,EtherInput,EtherOutput,&DevRTL);

	/*
	 * start use socket 
	 */
	
	//InterruptInit();
	
	printf("\nInterruptInit();\nnow waiting for flash led...");
	Timer_Init();
	//while(1);
	/* Illustrate how to listen as a server */
	ExListen = TCPSocket(IPAddr);
	ExAccept = NULL;
	TCPListen(ExListen,TCP_DEFAULT_PORT,OnAccept);
	/* Illustrate how to connect to a server */
	ExConn = TCPSocket(IPAddr);
//#if 0

	if(TCPConnect(ExConn,0xc0a8020e,1001,OnReceive,OnClose) == TRUE)
	{
	
		/* Illustrate how to Use TCPSend() */
		TCPSend(ExConn,str,6);

		/* Illustrate how to Use TCPSendEx() */
		while(1)
		{
			if((MemHead = TCPAllocate(DATA_SIZE)) == NULL)
				break;
			MemCopy(MemHead->pStart,DataBlock,DATA_SIZE);
			if(TCPSendEx(ExConn,MemHead) == FALSE)
				break;
		}
	}

		TCPAbort(ExConn); 
	while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -