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

📄 main.c

📁 yitaiwang.rar
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		测试TCP,完成数据回发。
**
**--------------------------------------------------------------------------------------------------------
** Created by:			
** Created date:		2007-3-26
** Version:				1.0
** Descriptions:		测试TCP,完成数据回发。 
**--------------------------------------------------------------------------------------------------------
** Modified by:			zhangjunjie
** Modified date:		2008-04-24
** Version:				1.1
** Descriptions:		对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by:		Litiantian	
*********************************************************************************************************/

#include "config.h"
#include "../include/cfg_net.h"

       
/*********************************************************************************************************
任务ID、优先级、堆栈设置及函数声明                                
*********************************************************************************************************/					     
#define SOCKET_ERROR 0xFF
#define SOCKET_RCV_ERROR 0xFF

#define          TASK_START_ID       0 
#define          TASK_1_ID           1
#define          TASK_2_ID           2
#define          TASK_3_ID           3
#define          TASK_4_ID           4
#define          TASK_SERVER_ID      5
#define          TASK_6_ID           6

#define          TASK_START_PRIO    10 
#define          TASK_1_PRIO        11
#define          TASK_2_PRIO        12
#define          TASK_3_PRIO        13
#define          TASK_4_PRIO        14
#define          TASK_SERVER_PRIO   15
#define          TASK_6_PRIO        16

#define          MSG_QUEUE_SIZE     20 
#define			 Stack_Size       512

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


OS_STK task0_stack[400];
OS_STK task1_stack[400];
OS_STK task2_stack[400];
OS_STK task3_stack[400];
OS_STK task4_stack[400];

OS_STK Task_Server_stack[Stack_Size];

void Task_Server(void *pdata);
void ZlgipInitial(uint8* MCU_IP,uint8* MCU_GateWay,uint8* MCU_Mark); 



/*********************************************************************************************************
**	任务名称:	TaskB
**	任务功能:	UDP处理
*********************************************************************************************************/
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;
		} 
	} 
}
/*********************************************************************************************************
**	任务名称:	TaskC
**	任务功能:	TCP处理
*********************************************************************************************************/

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;
		}         
    }    
}


uint8  MCU_IP[4] = {192,168,1,2};                                       /* 设置MCU的IP地址等信息        */
uint8  MCU_Mark[4] = {255,255,255,0};
uint8  MCU_GateWay[4] = {192,168,1,161};


/*********************************************************************************************************
**	任务名称:	Task_Server
**	任务功能:	建立一个TCP服务器进程,完成数据回发功能
*********************************************************************************************************/

void task0(void *pdata)  
{ 

   	uint32 j;
    UBYTE iii;
    #if OS_CRITICAL_METHOD == 3
    	OS_CPU_SR  cpu_sr;
	#endif
	
	TargetInit();                                                       /* 板卡初始化                   */

	
	OSTaskCreateExt(TaskB,                                              /* 创建任务B                    */
                    (void *)0,
                    &task1_stack[399],
                    TASK_1_PRIO,
                    TASK_1_ID,
                    &task1_stack[0],
                    400,
                    (void *)0,
                    0);
	OSTaskCreateExt(TaskC,                                              /* 创建任务C                    */
                    (void *)0,
                    &task2_stack[399],
                    TASK_2_PRIO,
                    TASK_2_ID,
                    &task2_stack[0],
                    400,
                    (void *)0,
                    0);

    ZlgipInitial(MCU_IP,MCU_GateWay,MCU_Mark);

 	OSTaskCreateExt(Task_Server,                                        /* 创建服务任务                 */
				 	(void*)0,
				 	&Task_Server_stack[Stack_Size-1],
				 	TASK_SERVER_PRIO,
				 	TASK_SERVER_ID,
				 	&Task_Server_stack[0],
				 	Stack_Size,
				 	(void*)0,
				 	0);
 	
 	j = 0;
  while(1)
  { 
		OSSemPend(RecPackedFlag,100,&iii);
		do
		{
	        iii=Rec_Packet();
	
		}
		while(iii!=0);
		j++;
		if (j >= 100)
		{
			j=0;
		}
    }
}

/*********************************************************************************************************
**	任务名称:	Task_Server
**	任务功能:	建立一个TCP服务器进程,完成数据回发功能
*********************************************************************************************************/
void Task_Server(void *pdata)  
{   
		
	SOCKET* s;
	int ei; 									                        /* 存放返回值的变量             */
	int RecvCnt=0;								                        /* 接收数据个数                 */
	uint8 RecvBuff[200];						                        /* 接收缓冲区                   */
	struct sockaddr serveraddr,clientaddr;		                        /* sockaddr 结构体由协议栈类型、
	                                                                       IP和端口组成 			    */
    
	serveraddr.sin_family = 0;					                        /* 协议栈类型                   */
	serveraddr.sin_addr[0] = MCU_IP[0];			                        /* 四位IP地址                   */
	serveraddr.sin_addr[1] = MCU_IP[1];
	serveraddr.sin_addr[2] = MCU_IP[2];
	serveraddr.sin_addr[3] = MCU_IP[3];
	serveraddr.sin_port = 4000;					                        /* 服务器本地端口 	            */


	s  = socket(AF_INET,SOCK_STREAM,TCP_PROTOCOL);						/* 创建一个套接字               */
	ei = bind(s,(struct sockaddr *)&serveraddr,sizeof(serveraddr));	 	/* 绑定IP和端口到socket         */
	ei = listen(s,1);													/* 设置监听最大连接数		    */
	while(1)
	{	
		ei = accept(s,(struct sockaddr *)&clientaddr,(int*)sizeof(clientaddr));
		                                                                /* 等待客户机连接               */
		if(ei!=SOCKET_ERROR)
		{		
			while(getsocktcpsta(ei) ==3)								/* 连接状态                     */
			{
				
				RecvCnt=recv(ei,RecvBuff,200,0);						/* 接收客户机发送来的数据       */
				if(RecvCnt == SOCKET_RCV_ERROR)							/* 如果接收返回值指示错误       */
				{
					break;					
				}
				else if(RecvCnt>0)
				{
					send(ei,RecvBuff,RecvCnt,0);						/* 将数据回送给客户机           */
				}
				OSTimeDly(30);
			}

			close(ei);             					 					/* 关闭连接                     */
			OSTimeDly(100);
			TCP_Abort(ei);												/* 释放连接资源                 */

		}

		OSTimeDly(40); 
	}
}

/*********************************************************************************************************
**	任务名称:	ZlgipInitial()
**	任务功能:	初始化ZLGip
*********************************************************************************************************/
void ZlgipInitial(uint8* MCU_IP,uint8* MCU_GateWay,uint8* MCU_Mark)
{
	SetNetPort(MCU_IP,MCU_GateWay,MCU_Mark);
	InitNic(0);		
	Initial_arp();
	Tcp_Initial();
 	Udp_Initial();
}


/*********************************************************************************************************
**	任务名称:	main()
**	任务功能:	用户程序入口函数
*********************************************************************************************************/
int main (void)
{	
    OSInit();                                                           /* 操作系统初始化               */
    OSTaskCreateExt(task0,
                    (void *)0,
                    &task0_stack[399],
                    TASK_START_PRIO,
                    TASK_START_ID,
                    &task0_stack[0],
                    400,
                    (void *)0,
                    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);
	
	
    OSStart();                                                          /* 启动多任务操作系统           */
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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