zdmhuhu 发表于 2011-5-26 12:31:58

急,急,急!!我想做一个温度采集用ZLG的ARM7通过uc/os-ii和ZLG TCP/IP传到浏览器上!现在浏

下面是我的具体程序!!小弟愚钝,刚开始接触,网大侠们抽时间看一下
/*
*********************************************************************************************************
*                                                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;
OS_STK task1_stack;
OS_STK task2_stack;
OS_STK task3_stack;
OS_STK task4_stack;
//OS_STK task5_stack;
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={
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;
    INT16UTaskCtr;
    INT16UTaskExecTime;
    INT32UTaskTotExecTime;
} TASK_USER_DATA;
*/
/*
*********************************************************************************************************
*                                              VARIABLES
*********************************************************************************************************
*/


//TASK_USER_DATATaskUserData;

//OS_EVENT       *MsgQueue;                           /* Message queue pointer                         */
//void         *MsgQueueTbl;                      /* 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={"ZLGMCUyhbabcdefghijklmnopqrstuvwxyz"};
uint8 add1={"123456789"};
uint8 rec_buffer;
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=192;
      servaddr.sin_addr=168;
      servaddr.sin_addr=0;
      servaddr.sin_addr=55;
      servaddr.sin_port=1026;
            OSTimeDly(60);
            s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL);
            clientaddr.sin_family=0;
      clientaddr.sin_addr=NetPort.My_Ip;
      clientaddr.sin_addr=NetPort.My_Ip;
      clientaddr.sin_addr=NetPort.My_Ip;
      clientaddr.sin_addr=NetPort.My_Ip;
      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=='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 charip_add={192,168,0,1};
uint8 tempdata;
//uint8 err;
SOCKET      s;
struct sockaddr servaddr,cliaddr;
                Arp_Request(ip_add,0);
                OSTimeDly(60);
                servaddr.sin_family=0;
                servaddr.sin_addr=NetPort.My_Ip;
                servaddr.sin_addr=NetPort.My_Ip;
                servaddr.sin_addr=NetPort.My_Ip;
                servaddr.sin_addr=NetPort.My_Ip;
                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==' ')            //发送网页这部分能成功!显示web[]中的内容!!!!!!!
                        {
                              send( Temp,httpweb ,169, 0 );
                              //OSTimeDly(10);
                              send( Temp,web ,395, 0 );
                        }
                  else if(tempdata='0')//发送温度采集数据,这部分该如何更改得到温度数据tempdata【6】是哪里的呀!
                  {
                        send(Temp,)
                  }
               
                        else if(tempdata=='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_SRcpu_sr;
      #endif
      TargetInit();         //add by cmj
      //UBYTE EX_RAM *er;
      OSTaskCreateExt(TaskB,
                  (void *)0,
                  &task1_stack,
                  TASK_1_PRIO,
                  TASK_1_ID,
                  &task1_stack,
                  1000,
                  (void *)0,//&TaskUserData
                  0);
      OSTaskCreateExt(TaskC,
                  (void *)0,
                  &task2_stack,
                  TASK_2_PRIO,
                  TASK_2_ID,
                  &task2_stack,
                  2000,
                  (void *)0,//&TaskUserData
                  0);
      OSTaskCreateExt(TaskD,
                  (void *)0,
                  &task3_stack,
                  TASK_3_PRIO,
                  TASK_3_ID,
                  &task3_stack,
                  1000,
                  (void *)0,//&TaskUserData
                  0);
      OSTaskCreateExt(TaskE,
                  (void *)0,
                  &task4_stack,
                  TASK_4_PRIO,
                  TASK_4_ID,
                  &task4_stack,
                  2000,
                  (void *)0,//&TaskUserData
                  0);
      /*OSTaskCreateExt(TaskF,
                  (void *)0,
                  &task5_stack,
                  TASK_5_PRIO,
                  TASK_5_ID,
                  &task5_stack,
                  500,
                  &TaskUserData,
                  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,
                  TASK_START_PRIO,
                  TASK_START_ID,
                  &task0_stack,
                  3000,
                  (void *)0,//&TaskUserData
                  0);
      
          RecPackedFlag=                OSSemCreate(0);
      RecBufOverFlowFlag=      OSSemCreate(0);
      RecTcpPackedFlag=      OSSemCreate(0);
      RecPingPackedFlag=      OSSemCreate(0);
      SendFlag=                OSSemCreate(1);

      RecIcmpQFlag=                OSQCreate(&RecIcmpQ,Q_Max_Size);
      RecTcpQFlag=                OSQCreate(&RecTcpQ,Q_Max_Size);
      RecUdpQFlag=                OSQCreate(&RecUdpQ,Q_Max_Size);
/*
      for(iii=0;iii<MAX_TCP_LINKS;iii++)
      {
                AppSemSend=      OSSemCreate(0);
                AppSemCon=                OSSemCreate(0);
                AppSemDisc=      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.ARP_TERM.TTL>0)
                                        NetPort.ARP_TERM.TTL--;
                        }
                        if(Gateway_IP_TTL>0)
                              NetPort.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();
}

具体请教一下,我要做毕业设计,急急呀!希望帮下忙

huangstone 发表于 2011-5-26 12:34:24

自己写CGI 或者 java applet
页: [1]
查看完整版本: 急,急,急!!我想做一个温度采集用ZLG的ARM7通过uc/os-ii和ZLG TCP/IP传到浏览器上!现在浏