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

📄 testnet.c

📁 一个完整的串口转以太网服务器的源代码.硬件平台是LPC2214 ARM7处理器+8019AS以太网控制器.软件平台是UCOSII+一个第三方的TCP/IP协议栈.
💻 C
📖 第 1 页 / 共 2 页
字号:
		servaddr.sin_addr[1]=NetPort[0].My_Ip[1];
		servaddr.sin_addr[2]=NetPort[0].My_Ip[2];
		servaddr.sin_addr[3]=NetPort[0].My_Ip[3];
		servaddr.sin_port=80;
		s=*socket( 0, 0, 0);
		ei=bind( (SOCKET * )&s, (struct sockaddr*)&servaddr,sizeof(servaddr));
		ei=listen( (SOCKET * )&s, 4 );
		if(ei!=4)
			while(1);
	while (1)
    {
		Temp=accept( (SOCKET * )&s, (struct sockaddr*)&cliaddr,&addrlen );	
		if(Temp!=0xff)
		{
			TempLength=recv( Temp,tempdata ,400, 0 );
			if(tempdata[5]==' ')
			{
				send( Temp,httpweb ,169, 0 );
				//OSTimeDly(10);
				send( Temp,web ,395, 0 );
			}
			else if(tempdata[5]=='1')
			{
				send( Temp, httpgif,169, 0 );
				//OSTimeDly(10);
				send( Temp,bmp ,442, 0 );
			}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
			memset(tempdata, 0,400);
			OSTimeDly(20);
			close(Temp);
		}
    }    
}

                   void TaskF(void *pdata) 
{

    uint8 *cp;
    uint8 Buf[100], temp, i;
    
    pdata = pdata;                                                  /* 避免编译警告 */

    for (;;)
    {

        cp = Buf;
       
       for (i = 0; i < 1; i++)
        {
            temp = UART0Getch();
            *cp++ = temp;
           
        }
       OSMboxPost(Uart0ReviceMbox, (void *)Buf);
   
    }
}
/*
uint8 *cp;
uint8 err;
uint8 snd_buffer[100];
SOCKET	s; 

//uint8 couter_byte=5;
//uint8 Temp;
//uint8 rec_data;
uint16 iii;
uint8 i;

struct sockaddr servaddr,clientaddr;
	OSTimeDly(60);
	servaddr.sin_family=0;
	servaddr.sin_addr[0]=192;
	servaddr.sin_addr[1]=168;
	servaddr.sin_addr[2]=0;
	servaddr.sin_addr[3]=132;
	servaddr.sin_port=1011;  
    	OSTimeDly(60);
    	s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL);
    	clientaddr.sin_family=0;
	clientaddr.sin_addr[0]=NetPort[0].My_Ip[0];
	clientaddr.sin_addr[1]=NetPort[0].My_Ip[1];
	clientaddr.sin_addr[2]=NetPort[0].My_Ip[2];
	clientaddr.sin_addr[3]=NetPort[0].My_Ip[3];
	clientaddr.sin_port=1025;  
	iii=bind( (SOCKET * )&s, (struct sockaddr*)&clientaddr,sizeof(clientaddr));
	
    while (1)
    {   
         cp = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err);   
         sendto(s, cp, err, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) );
          }
    }    
   
}*/ 

void task0(void *pdata)  
{ /*在第1个任务中设置定时器0及中断*/
    UBYTE iii;
    #if OS_CRITICAL_METHOD == 3                               
    OS_CPU_SR  cpu_sr;
	#endif
	pdata = pdata;                                                  /* 避免编译警告 */
	TargetInit();         
	//UBYTE EX_RAM *er;
	OSTaskCreateExt(TaskA,
                    (void *)0,
                    &task5_stack[1999],
                    TASK_5_PRIO,
                    TASK_5_ID,
                    &task5_stack[0],
                    2000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);
	
	OSTaskCreateExt(TaskB,
                    (void *)0,
                    &task1_stack[999],
                    TASK_1_PRIO,
                    TASK_1_ID,
                    &task1_stack[0],
                    1000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);
	OSTaskCreateExt(TaskC,
                    (void *)0,
                    &task2_stack[1999],
                    TASK_2_PRIO,
                    TASK_2_ID,
                    &task2_stack[0],
                    2000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);    // change by liuxj
    OSTaskCreateExt(TaskD,
                    (void *)0,
                    &task3_stack[999],
                    TASK_3_PRIO,
                    TASK_3_ID,
                    &task3_stack[0],
                    1000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);  //change by liuxj
    OSTaskCreateExt(TaskE,
                    (void *)0,
                    &task4_stack[1999],
                    TASK_4_PRIO,
                    TASK_4_ID,
                    &task4_stack[0],
                    2000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);
    OSTaskCreateExt(TaskF,
                    (void *)0,
                    &task6_stack[1999],
                    TASK_6_PRIO,
                    TASK_6_ID,
                    &task6_stack[0],
                    2000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);                                               /* 创建任务     */
   
    SetNetPort();
	InitNic(0);			//RTL8019芯片初始化,在global.c中定义
	Initial_arp();
	Tcp_Initial();
 	Udp_Initial();
  while(1)
  { 
		//OSSemPend(RecPackedFlag,0);
		OSTimeDly(4);
		do
		{
//			while(rec_data());
			//OS_ENTER_CRITICAL();
		//	OS_ENTER_CRITICAL();
	        iii=Rec_Packet();

		//	OS_EXIT_CRITICAL();
		}// end of do
		while(iii!=0);
    }//end for while(1)
}


int main (void)
{UBYTE iii;
	Timer1_Init();
    OSInit();       
                                   
    OSTaskCreateExt(task0,
                    (void *)0,
                    &task0_stack[2999],
                    TASK_START_PRIO,
                    TASK_START_ID,
                    &task0_stack[0],
                    3000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);
        
  	RecPackedFlag=		OSSemCreate(0);
	RecBufOverFlowFlag=	OSSemCreate(0);
	RecTcpPackedFlag=	OSSemCreate(0);
	RecPingPackedFlag=	OSSemCreate(0);
	SendFlag=		    OSSemCreate(1);
    Uart0ReviceMbox=    OSMboxCreate(NULL);//add 3.1 liuxj
  
    
	RecIcmpQFlag=		OSQCreate(&RecIcmpQ[0],Q_Max_Size);
	RecTcpQFlag=		OSQCreate(&RecTcpQ[0],Q_Max_Size);
	RecUdpQFlag=		OSQCreate(&RecUdpQ[0],Q_Max_Size);

	for(iii=0;iii<MAX_TCP_LINKS;iii++)
	{
		
		AppSemSend[iii]=	OSSemCreate(0);
		AppSemCon[iii]=		OSSemCreate(0);
		AppSemDisc[iii]=	OSSemCreate(0);
	}
    OSStart();                                              //Start multitasking                       
}

/*$PAGE*/

        void Timer1_Init(void)
{
OS_ENTER_CRITICAL();
    T1IR = 0xffffffff;
    T1TC = 0;
    T1TCR = 0x01;
    T1MCR = 0x03;
    T1MR0 = 0xffffff;//(Fpclk / OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
}
    
        void Timer1(void)
{
static 	uint8 	 m_10sec=0;
static 	uint8 	 p_sec=0;
static 	uint8	 p_min=0;
uint8 num;
    	OS_ENTER_CRITICAL();
    	T1IR = 0x01;
//    T0MR0 += (Fpclk / OS_TICKS_PER_SEC);
	m_10sec++;
	if(m_10sec==100)
	{
		p_sec++;
		m_10sec=0;
		if(Ping_IP_TTL>0)
			Ping_IP_TTL--;
		for(num=0;num<MAX_NET_PORT;num++)
		{
			for(p_min=0;p_min<MAX_ARP_TERM;p_min++)
			{
				if(NetPort[num].ARP_TERM[p_min].TTL>0)
					NetPort[num].ARP_TERM[p_min].TTL--;
			}
			if(Gateway_IP_TTL>0)
				NetPort[num].Gateway_IP_TTL--;
		}
		if(p_sec==60)
		{
			p_min++;
			p_sec=0;
			if(p_min==60)
			{
				p_min=0;
			}
		}
	}
    	VICVectAddr = 0;            // 通知中断控制器中断结束
    	OS_EXIT_CRITICAL();
    //OSTimeTick();
}

⌨️ 快捷键说明

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