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