📄 main.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: 测试UDP,完成数据回发。
**
**------------------------------------------------------------------------------------------------------
** Created by:
** Created date: 2007-3-26
** Version: 1.0
** Descriptions: 测试UDP,完成数据回发。
**------------------------------------------------------------------------------------------------------
** 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_UDP_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_UDP_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_Udp_stack[Stack_Size];
void Timer1_Init(void);
void Task_Udp(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;
}
}
}
uint16 regphy1[25];
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_0
** 任务功能: 第一个运行的任务
*********************************************************************************************************/
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_Udp, /* 创建服务任务 */
(void*)0,
&Task_Udp_stack[Stack_Size-1],
TASK_UDP_PRIO,
TASK_UDP_ID,
&Task_Udp_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_Udp
** 任务功能: 建立一个UDP进程,完成数据回发
*********************************************************************************************************/
void Task_Udp(void *pdata)
{
struct sockaddr serveraddr,clientaddr;
SOCKET* s;
uint16 ei;
uint32 DataLen;
uint8 UdpDataBuff[1000];
pdata =pdata;
clientaddr.sin_family = 0; /* 设置MCU套接字结构体 */
clientaddr.sin_addr[0] = MCU_IP[0];
clientaddr.sin_addr[1] = MCU_IP[1];
clientaddr.sin_addr[2] = MCU_IP[2];
clientaddr.sin_addr[3] = MCU_IP[3];
clientaddr.sin_port = 5000;
s = socket(0,SOCK_DGRAM,UDP_PROTOCOL); /* 创建UDP套接字 */
ei = bind(s,&clientaddr,sizeof(clientaddr)); /* 绑定MCU信息到套接字 */
while(1)
{
DataLen = recvfrom(*s,UdpDataBuff,sizeof(UdpDataBuff),0,(struct sockaddr *)&serveraddr,&ei);
if(DataLen>0)
{
sendto(*s,UdpDataBuff,DataLen,0,&serveraddr,ei); /* UDP数据回传 */
}
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();
}
/*$PAGE*/
/*********************************************************************************************************
** 任务名称: 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 + -