|
下面是我的具体程序!!小弟愚钝,刚开始接触,网大侠们抽时间看一下
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
* EXAMPLE #3
*********************************************************************************************************
*/
//#include "includes.h" //change by cmj ,includes => config
#include "config.h"
#include "../include/cfg_net.h"
void Timer1_Init(void);
uint16 tempr = 0;
/*
*********************************************************************************************************
* 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];
//OS_STK task5_stack[500];
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_WEBSEERVER网页</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> \r\n"
"<LI> \r\n"
"<LI> \r\n"
"<LI> <lont size=5> 温度值: 26'C</font>\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"};
/* uint8 bmp[442]={
0x42,0x4d,0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x28,0x00,
0x00,0x00,0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,
0x00,0x00,0x40,0x01,0x00,0x00,0xc4,0x0e,0x00,0x00,0xc4,0x0e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,
0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x80,
0x00,0x00,0xc0,0xc0,0xc0,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0xff,0x00,0x00,0xff,
0x00,0x00,0x00,0xff,0xff,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0xff,
0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0x66,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x66,0x66,0x6f,0x6f,0xff,0x66,0x66,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xf6,0xff,0xff,0x6f,0xf6,0xff,0xf6,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x6f,0xff,0x6f,0xf6,0xff,0xf6,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf6,0xff,0xf6,0xf6,0xff,0xff,
0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x6f,0xf6,0xff,0x6f,0xff,
0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xf6,0x66,0x66,0xf6,0xff,0xf6,0x66,
0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x00,0x00,0x00
};*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
typedef struct {
char TaskName[30];
INT16U TaskCtr;
INT16U TaskExecTime;
INT32U TaskTotExecTime;
} TASK_USER_DATA;
*/
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
//TASK_USER_DATA TaskUserData[7];
//OS_EVENT *MsgQueue; /* Message queue pointer */
//void *MsgQueueTbl[20]; /* Storage for messages */
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void DelayuS(uint32 dly) //延时约9uS
{
uint32 i;
for(;dly>0;dly--)
i++;// for(i=0;i<1;i++);
}
/*********DS1820初始化****************/
int Init_DS18B20(void)
{
uint8 i;
IO0DIR=IO0DIR|0x02000000; //设置P0.25为输出
IO0CLR=1<<25; //P0.25清零
DelayuS(60); //延时480~960uS
IO0DIR=IO0DIR&0xFDFFFFFF; //设置P0.25为输入
DelayuS(2); //延时16uS
i=(IO0PIN&0x02000000)>>25;
DelayuS(15); //延时60~240uS
return(i);
}
/********向DS1820写数据************/
void WriteOneChar(uint8 dat)
{
uint8 i;
for(i=8;i>0;i--)
{
IO0DIR=IO0DIR|0x02000000; //设置P0.25为输出
IO0CLR=1<<25; //P0.25清零
IO0PIN=((dat&0x01)<<25)|0xFDFFFFFF; //向P0.25写入位数据
DelayuS(2); // 延时15~60uS
IO0SET=1<<25; //P0.25置位
dat>>=1;
}
}
/********从DS1820中读取数据***************/
int ReadOneChar(void)
{
uint8 i;
uint8 dat;
for(i=8;i>0;i--)
{
IO0DIR=IO0DIR|0x02000000; //设置P0.25为输出
IO0CLR=1<<25; //P0.25清零
dat=dat>>1;
IO0DIR=IO0DIR&0xFDFFFFFF; //设置P0.25为输入
if(1==(IO0PIN>>25)&0x00000001)
dat|=0x80;
i=i; //延时
}
return(dat);
}
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]={"ZLGMCUyhbabcdefghijklmnopqrstuvwxyz"};
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]=55;
servaddr.sin_port=1026;
OSTimeDly(60);
s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL);
clientaddr.sin_family=0;
clientaddr.sin_addr[0]=NetPort[0].My_Ip[0];
clientaddr.sin_addr[1]=NetPort[0].My_Ip[1];
clientaddr.sin_addr[2]=NetPort[0].My_Ip[2];
clientaddr.sin_addr[3]=NetPort[0].My_Ip[3];
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]=NetPort[0].My_Ip[0];
servaddr.sin_addr[1]=NetPort[0].My_Ip[1];
servaddr.sin_addr[2]=NetPort[0].My_Ip[2];
servaddr.sin_addr[3]=NetPort[0].My_Ip[3];
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(tempdata[5]==' ') //发送网页这部分能成功!显示web[]中的内容!!!!!!!
{
send( Temp,httpweb ,169, 0 );
//OSTimeDly(10);
send( Temp,web ,395, 0 );
}
else if(tempdata[6]='0')//发送温度采集数据,这部分该如何更改得到温度数据tempdata【6】是哪里的呀!
{
send(Temp,)
}
else if(tempdata[5]=='1')
{
send( Temp, httpgif,169, 0 );
//OSTimeDly(10);
send( Temp,bmp ,99, 0 );
}
memset(tempdata, 0,400);
OSTimeDly(20);
close(Temp);
}
}
}
void TaskF ( void *pdata )
{
uint16 a = 0;
uint16 b = 0;
uint16 t = 0;
uint16 temp = 0;
PINSEL0 = 0x00000005;//需要修改
while(1)
{
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序列号操作
WriteOneChar(0x44);//启动温度转换
Init_DSe18B20();
WriteOneChar(0xCC);//跳过读序列号操作
WriteOneChar(0xBE);//读取温度寄存器等(共可度12个寄存器,前两份就是温度)
a = ReadOneChar();
b = ReadOneChar();
t = (b<<8)|a;
tmp = t * 0.0625;//对采集数据进行处理
tempr = tmp; 这是采集到的数据需要用邮箱到taskE函数中!
}
}
void task0(void *pdata)
{ /*在第1个任务中设置定时器0及中断*/
UBYTE iii;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
TargetInit(); //add by cmj
//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);*/
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)
}
/*$PAGE*/
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void Uart_SendChar(INT8U data)
{
while((U0LSR & 0x00000020) == 0);
U0THR = data;
}
//void main (void) //change by cmj
int main (void)
{UBYTE iii;
Timer1_Init();
OSInit(); /* Initialize uC/OS-II */
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);
/*
for(iii=0;iii<MAX_TCP_LINKS;iii++)
{
AppSemSend[iii]= OSSemCreate(0);
AppSemCon[iii]= OSSemCreate(0);
AppSemDisc[iii]= OSSemCreate(0);
}*/
OSStart(); /* Start multitasking */
}
/*$PAGE*/
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void Timer1_Init(void)
{
OS_ENTER_CRITICAL();
T1IR = 0xffffffff;
T1TC = 0;
T1TCR = 0x01;
T1MCR = 0x03;
T1MR0 = 0xffffff;//(Fpclk / OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
}
void Timer1(void)
{
static uint8 m_10sec=0;
static uint8 p_sec=0;
static uint8 p_min=0;
uint8 num;
OS_ENTER_CRITICAL();
T1IR = 0x01;
// T0MR0 += (Fpclk / OS_TICKS_PER_SEC);
m_10sec++;
if(m_10sec==100)
{
p_sec++;
m_10sec=0;
if(Ping_IP_TTL>0)
Ping_IP_TTL--;
for(num=0;num<MAX_NET_PORT;num++)
{
for(p_min=0;p_min<MAX_ARP_TERM;p_min++)
{
if(NetPort[num].ARP_TERM[p_min].TTL>0)
NetPort[num].ARP_TERM[p_min].TTL--;
}
if(Gateway_IP_TTL>0)
NetPort[num].Gateway_IP_TTL--;
}
if(p_sec==60)
{
p_min++;
p_sec=0;
if(p_min==60)
{
p_min=0;
}
}
}
VICVectAddr = 0; // 通知中断控制器中断结束
OS_EXIT_CRITICAL();
//OSTimeTick();
}
具体请教一下,我要做毕业设计,急急呀!希望帮下忙 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|