搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2011-5-26 12:31:58 | 显示全部楼层 |阅读模式
下面是我的具体程序!!小弟愚钝,刚开始接触,网大侠们抽时间看一下
/*
*********************************************************************************************************
*                                                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周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-5-26 12:34:24 | 显示全部楼层
自己写CGI 或者 java applet
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-4 06:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表