📄 tcpip_main.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 + -