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

📄 main.c

📁 S344B0X+UCOS 上移植的ZLGIP 可实现WEBSERVER
💻 C
字号:

#include    "def.h"
#include	"option.h"
//#include	"44blib.h"
//#include	"44b.h"

//#include    "rtc.h"
#include "config.h"
#include "../include/cfg_net.h"
//#include    "os_cpu.h"
//#include	"ucos_ii.h"               /* uC/OS interface */
#include	"target.h"



#define Main_Task_PRIO       4

/*
*********************************************************************************************************
*                                              CONSTANTS
*********************************************************************************************************
*/


#define          TASK_START_ID       0                /* Application tasks                             */
#define          TASK_1_ID           1
#define          TASK_2_ID           2
#define          TASK_3_ID           3
#define          TASK_4_ID           4
#define          TASK_5_ID           5
#define          TASK_6_ID           6

#define          TASK_START_PRIO    10                /* Application tasks priorities                  */
#define          TASK_1_PRIO        11
#define          TASK_2_PRIO        12
#define          TASK_3_PRIO        13
#define          TASK_4_PRIO        14
#define          TASK_5_PRIO        15
#define          TASK_6_PRIO        16

#define          MSG_QUEUE_SIZE     20                /* Size of message queue used in example         */

OS_EVENT  		*RecPackedFlag; 		
OS_EVENT  		*RecBufOverFlowFlag;	
OS_EVENT  		*RecTcpPackedFlag;	
OS_EVENT  		*RecPingPackedFlag;	


OS_STK task0_stack[3000];
OS_STK task1_stack[1000];
OS_STK task2_stack[2000];
OS_STK task3_stack[1000];
OS_STK task4_stack[2000];

uint8 httpweb[]={
    "HTTP/1.0 200 OK\r\n"
    "Date: Mon, 24 Nov 2003 01:24:17 GMT\r\n"
    "Server: microHttp/1.0 Zlgmcu Corporation\r\n"
    "Accept-Ranges: bytes\r\n"
    //"Content-Length: 116\r\n"//"Connection: Keep-Alive\r\n"
    "Connection: Keep-Close\r\n"
    "Content-Type: text/html\r\n"
    "\r\n"};
 uint8 web[]={
 				"<HTML>\r\n"
 				"<HEAD>\r\n"
 				"<TITLE>ARM_NET演示网页(深圳 单片机)</TITLE>\r\n"
 				"<BODY aLink=green background=/100.bmp bgColor=#f1f1dd link=red\r\n"
				"vLink=#321afd>\r\n"
 				"<H1>HELLO WELCOME TO EasyArm WEBSERVER</H1>\r\n"
 				"<UL>\r\n"
 				"<LI> <A HREF=\"http://www.szmcu.net/\">深圳单片机网站 </A>\r\n"
 				"<LI> <A HREF=\"http://www.szmcu.net/bbs/\">深圳MCU内部BBS </A>\r\n"
 				"<LI> <A HREF=\"http://www.szmcu.net/\">SZ MCU </A>\r\n"
 				"</UL>\r\n"
 				"</BODY>\r\n"
 				"</HTML>\r\n"
				};
uint8 httpgif[]={
    "HTTP/1.0 200 OK\r\n"
    "Date: Mon, 24 Nov 2003 01:24:17 GMT\r\n"
    "Server: microHttp/1.0 Zlgmcu Corporation\r\n"
    "Accept-Ranges: bytes\r\n"
    //"Content-Length: 116\r\n"//"Connection: Keep-Alive\r\n"
    "Connection: Keep-Close\r\n"
    "Content-Type: image/bmp\r\n"
    "\r\n"};
 
 

/*
*********************************************************************************************************
*                                         FUNCTION PROTOTYPES
*********************************************************************************************************
*/


                            void TaskB(void *pdata) 

{
void * UdpTemp;
uint8 eer;    

    while (1)
    {
	UdpTemp=OSQPend(RecUdpQFlag,0,&eer);
       	if(eer==OS_NO_ERR)
	{
		Udp_Process((Rec_Ptr *)UdpTemp);
		eer=eer;
	}
        
    }    


}


                            void TaskC(void *pdata) 
{
void * TcpTemp;
uint8 err;   
    while (1)
    {
       	TcpTemp=OSQPend(RecTcpQFlag,0,&err);
	if(err==OS_NO_ERR)
	{
		Process_Tcp1((Rec_Ptr *)TcpTemp);
		TcpTemp=TcpTemp;
	}
	
        
    }    
}


                            void TaskD(void *pdata) 
{
uint8 add[36]={"SZ MCUyhbabcdefghijklmnopqrstuvwxyz"};
uint8 add1[10]={"123456789"};
uint8 rec_buffer[100];
SOCKET	s; 
uint8 couter_byte=5;
//uint8 Temp;
int rec_coute,send_coute;
uint16 iii;
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]=101;
	servaddr.sin_port=1026;  
    	OSTimeDly(60);
    	s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL);
    	clientaddr.sin_family=0;
	clientaddr.sin_addr[0]=192;
	clientaddr.sin_addr[1]=168;
	clientaddr.sin_addr[2]=0;
	clientaddr.sin_addr[3]=100;
	clientaddr.sin_port=1025;  
	iii=bind( (SOCKET * )&s, (struct sockaddr*)&clientaddr,sizeof(clientaddr));
    while (1)
    {
    	rec_coute=recvfrom( s, rec_buffer, 100, 0, (struct sockaddr*)&servaddr, &iii ); 
	if(rec_coute>0)
	{
		if(rec_buffer[0]=='A')
			couter_byte=5;
		else
			send_coute=sendto(s, rec_buffer, rec_coute, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) );
	}
	
	while(couter_byte!=0) 
	{
		send_coute=sendto(s, add, 34, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) );
    	if(send_coute==34)
			OSTimeDly(40);
		else
			send_coute=sendto(s, add1, 9, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) );
		OSTimeDly(40);
		couter_byte--;
	}
	  
    }    
}

                            void TaskE(void *pdata) 
{
uint8 Temp=0;
uint16 TempLength;
int addrlen;
int ei;
unsigned char  ip_add[4]={192,168,0,1};
uint8 tempdata[400];
//uint8 err;  
SOCKET	s; 
struct sockaddr servaddr,cliaddr;
		Arp_Request(ip_add,0);
		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]=100;
		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(TempLength>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 Temp=0;
	EX_RAM unsigned char  ip_add[4]={192,168,0,55};
	uint8 err;
	while(1)
	{
		OSTimeDly(4);
		err=Temp;
		Temp=ip_add[2];
	}

}*/


void task0(void *pdata)  
{ /*在第1个任务中设置定时器0及中断*/
    UBYTE iii;
   
	ARMTargetStart();
	Uart_Printf("1\n",2);
	ARMStartTimer();
	Uart_Printf("3\n",2);
	OSStatInit();
	Uart_Printf("2\n",2);
	//UBYTE EX_RAM *er;
	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);
        OSTaskCreateExt(TaskD,
                    (void *)0,
                    &task3_stack[999],
                    TASK_3_PRIO,
                    TASK_3_ID,
                    &task3_stack[0],
                    1000,
                    (void *)0,//&TaskUserData[TASK_4_ID]
                    0);
        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,
                    &task5_stack[499],
                    TASK_5_PRIO,
                    TASK_5_ID,
                    &task5_stack[0],
                    500,
                    &TaskUserData[TASK_5_ID],
                    0);*/
    
   		        	
    
    
    //IO2SET &=0XFFFFFFFF;
    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)
}




/******************************************************************************
【功能说明】系统主函数
******************************************************************************/
void Main(void)
{
	//U16 ver ;

	ARMTargetInit();		//目标板初始化
    OSInit();		//uCOS-II初始化
	
	OSTimeSet(0);
   
 
   
   

	//创建主任务
	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);

	RecIcmpQFlag=		OSQCreate(&RecIcmpQ[0],Q_Max_Size);
	RecTcpQFlag=		OSQCreate(&RecTcpQ[0],Q_Max_Size);
	RecUdpQFlag=		OSQCreate(&RecUdpQ[0],Q_Max_Size);
        
	
			//start the ARM target running
    Uart_Printf("main\n",5);

	OSStart();		//Start uCOS-II

  
    /* never reached */
}
//*****************************************************************************

⌨️ 快捷键说明

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