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

📄 tcpip_main.c

📁 专门针对周立功Smart2200开发板的引导程序。
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			tcpip_main.c
** Last modified Date:	2004-11-25
** Last Version:		1.0
** Descriptions:		zlgio initial function and handle task function file 
**------------------------------------------------------------------------------------------------------
** Created by:			Yehaoben
** Created date:		2004-11-25
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:	
** Descriptions: 
**
********************************************************************************************************/
#define		TCPIP_INIT_GLOBALS
#include "config.h"

#define          NET_TASK_START_ID     	0                 /* Application tasks                             */
#define          TASK_TCP_ID         	1

#define          NET_TASK_START_PRIO    0                 /* Application tasks priorities                  */
#define          TASK_TCP_PRIO        	1		

#define          NET_TASK_STACK_SIZE  	512 			  /* Size of task stack */
#define          TASK_TCP_STACK_SIZE  	512

OS_STK 		net_task_stack[NET_TASK_STACK_SIZE];
OS_STK 		task_tcp_stack[TASK_TCP_STACK_SIZE];

OS_EVENT        *RecPackedFlag;         
OS_EVENT        *RecTcpPackedFlag;  

void Timer1_Init(void);
void NetTimeHandle(void);
/*********************************************************************************************************
**                           Network Recive Task 网络数据接收任务
********************************************************************************************************/
uint16 MAXST[5];
OS_STK_DATA data;
void	Task_Net_Rec(void *pdata)
{
uint8 iii,err,i;

	while(1)
	{ 
		OSTimeDly(4);
		do
		{
			iii=Rec_Packet(0);
		}// end of do
		while(iii!=0);
		NetTimeHandle();
		
		for (i = 0; i < 5; i++) {
		    
		    err  = OSTaskStkChk(NET_TASK_START_ID + i, &data);
		    
		    if (err == OS_NO_ERR) {
					if(data.OSUsed>MAXST[i])
						MAXST[i]=data.OSUsed;
		    }
		}
		
    	}//end for while(1)
}

/*********************************************************************************************************
**                           Network Tcp Handle Task 网络TCP处理任务
********************************************************************************************************/
                            void Task_Tcp_Handle(void *pdata) 
{
void * TcpTemp;
uint8 err;   
    while (1)
    {
       	TcpTemp=OSQPend(RecTcpQFlag,1000,&err);
	if(err==OS_NO_ERR)
	{
		Process_Tcp((Rec_Ptr *)TcpTemp);
	}
	else if((err==OS_TIMEOUT))
	{
		Send_DHCPDISCOVER();
	}
    }    
}

/*********************************************************************************************************
** Function name:			ZlgipInitial
**
** Descriptions:			Zlgip Initial function     
**
** input parameters:		None						  
** Returned value:			None 
**         
** Used global variables:	None
** Calling modules:			None
**
** Created by:				Yehaoben
** Created Date:			2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ZlgipInitial(void)
{
	Timer1_Init();
	
	SendFlag=	OSSemCreate(1);
	RecTcpQFlag=	OSQCreate(&RecTcpQ[0],Q_Max_Size);
	
	SetNetPort();
	InitNic(0);	
	Initial_arp(0);
#if MAX_NET_PORT>=2
	InitNic(1);			//RTL8019芯片初始化,在global.c中定义
	Initial_arp(1);
#endif
	TCP_Initial();
 	Udp_Initial();
 	DHCP_Initial();
 	
 	
	OSTaskCreateExt(Task_Net_Rec,
                    (void *)0,
                    &net_task_stack[NET_TASK_STACK_SIZE-1],
                    NET_TASK_START_PRIO,
                    NET_TASK_START_ID,
                    &net_task_stack[0],
                    NET_TASK_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
        OSTaskCreateExt(Task_Tcp_Handle,
                    (void *)0,
                    &task_tcp_stack[TASK_TCP_STACK_SIZE-1],
                    TASK_TCP_PRIO,
                    TASK_TCP_ID,
                    &task_tcp_stack[0],
                    TASK_TCP_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

}
/*********************************************************************************************************
** Function name:			NetTimeHandle
**
** Descriptions:			Zlgip time handle,such as TTL     
**
** input parameters:		None						  
** Returned value:			None 
**         
** Used global variables:	ttl_flag,NetPort
** Calling modules:			Arp_Request
**
** Created by:				Yehaoben
** Created Date:			2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
volatile uint8  ttl_flag;
void NetTimeHandle(void)
{
uint8 num,iii;
	if(ttl_flag>0)
	{
		num=0;
#if MAX_NET_PORT>=2
		for(num=0;num<MAX_NET_PORT;num++)
		{
#endif
			for(iii=0;iii<MAX_ARP_TERM;iii++)
			{
				if(NetPort[num].ARP_TERM[iii].TTL>0)
					NetPort[num].ARP_TERM[iii].TTL--;
			}
			if(NetPort[num].Gateway_IP_TTL>0)
				NetPort[num].Gateway_IP_TTL--;
#if MAX_NET_PORT>=2
		}
#endif
		if(NetPort[num].Gateway_IP_TTL>0)
		{
			NetPort[num].Gateway_IP_TTL--;
			if(NetPort[num].Gateway_IP_TTL==0)
				Arp_Request(NetPort[num].My_Gateway,num);
		}	
		ttl_flag=0;
	}
	TimeWaitTimeOut();
}
/*********************************************************************************************************
** Function name:			Timer1_Init
**
** Descriptions:			time1 Initial function     
**
** input parameters:		None						  
** Returned value:			None 
**         
** Used global variables:	None
** Calling modules:			OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
**
** Created by:				Yehaoben
** Created Date:			2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer1_Init(void)
{
OS_ENTER_CRITICAL();
    T1IR = 0xffffffff;
    T1PR=0;
    T1TC = 0;
    T1TCR = 0x01;//0x01;
    T1MCR = 0x03;
    T1MR0 = Fpclk * 1;//10;//(Fpclk / OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** Function name:			Timer1
**
** Descriptions:			time1 interrupt server function     
**
** input parameters:		None						  
** Returned value:			None 
**         
** Used global variables:	ttl_flag
** Calling modules:			None
**
** Created by:				Yehaoben
** Created Date:			2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
volatile uint16	testOSIntNesting = 0;
        void Timer1(void)
{
    	T1IR = 0x01;
    	VICVectAddr = 0;            // 通知中断控制器中断结束
		ttl_flag=1;
}

⌨️ 快捷键说明

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