极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9384|回复: 0

如何提高查找速度?

[复制链接]
发表于 2013-12-31 23:36:26 | 显示全部楼层 |阅读模式
       在学习如下WebServerPost代码示例时,发现TextFinder.h 中getValue()和findUntil()执行效率很低,运行到此处时要耗费10s钟,有没有好办法提高执行效率?

/*
*WebServerPost sketch
*
*/
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

byte mac[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
byte ip[] = {192,168,1,177};

char buffer[8];
EthernetServer server(80);

void setup(){
  Serial.begin(9600);
  Ethernet.begin(mac,ip);
  delay(3000);
  Serial.println("Ready");
}

void loop(){
  EthernetClient client = server.available();
  if(client){
    TextFinder finder(client);
    int  type = 0;
    while(client.connected()){
       if(client.available()){
         //GET,POST,or HEAD
         
         if(finder.getString("","/",buffer,sizeof(buffer))){
           
             if(strcmp(buffer,"POST ")==0){
               finder.find("\n\r");
                  int startTime = millis(); //
               while(finder.findUntil("pinD","\n\r")){
                  
                  int pin = finder.getValue();
                  int val = finder.getValue();
                 Serial.println(millis()-startTime);  //上述耗费10s,有何好办法效率更高点
                 
                  pinMode(pin,OUTPUT);
                  digitalWrite(pin,val);
               }
               
             }
            
             sendHeader(client,"Post example");
             client.println("<h2>点击按钮分别关闭和电灯 pin8 led</h2>");
             client.print("<form action = '/' method = 'POST'><P><input type = 'hidden' name = 'pinD8'");
             client.println(" value='0'><input type='submit' value = 'off' /></form>");
             client.print("<form action = '/' method = 'POST'><p><input type = 'hidden' name = 'pinD8'");
             client.print(" value='1'><input type= 'submit' value = 'On'/></form>");
             client.println("</body></html>");
             client.stop();
            
         }  
         break;
       }
    }
    //give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}

void sendHeader(EthernetClient client,char *title){
   //send a standard http response header
   client.println("HTTP/1.1 200 OK");
   client.println("Content-Type: text/html");
   client.println();
   client.print("<html><head><title>");
   client.print(title);
   client.println("</title><body>");
  }
#
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-13 22:41 , Processed in 0.038215 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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