查找指定字符串函数;
该函数的核心是使用在标准 C 库文件 string.h 中提供的查找字符串函数——
strstr(char* str1,char* str2);其含义是在字符串 str1 中查找是否含有 str2,如果有返
回 str2 首个元素的地址,如果没有返回 NULL(0)。我们通常根据函数返回值是否为非 0 来
判断两个字符串是否是包含关系,下面程序是使用 Dev C++编译的功能展示函数:

本章的 findStr 函数根据 strstr 库函数做了扩展,添加了查询超时时间。当一条 AT 指
令发送给 ESP8266 后,ESP8266 大约会在几百 ms 左右打印响应结果,因此在发送完 AT 指令
就判断 UART 接收的数据是无意义的,起码要等上一段时间,如果等待的这段时间足够长但
没有收到响应,则可以说明设置无效或者 ESP8266 有问题。


/**
 * 功能:查找字符串中是否包含另一个字符串
 * 参数:
 *       dest:待查找目标字符串
 *       src:待查找内容
 *       retry_cn:查询超时时间
 * 返回值:查找结果,非0为查找成功,0为失败
 * 说明:
 *       当发出一个AT指令后,需要一段时间等待ESP8266回复,因此就需要等待一段时间,
 *       这个时间通常是几百ms(除了连接服务器和AP指令),本程序一般指令通常等待
 *       2S,耗时的连接AP和服务器的设置等待为8S,其实花不了那么多时间,但如果发生超时
 *       就一定可以判断是通信问题
 */
static u8 findStr(u8* dest,u8* src,u16 retry_cn)
{
    u16 retry = retry_cn;                   //超时时间
    u8 result_flag = 0;                     //查找结果

    while(strstr(dest,src)==0 && --retry!=0)//等待串口接收完毕或超时退出
    {
        Delay_ms(10);
    }

   if(retry==0)                            //如果超时则有问题,此时返回0
   {
       return 0;
   }
   result_flag = 1;                        //执行到这里说明一切正常, 表示查找成功

    if(result_flag)
    {
        return 1;
    }else 
    {
        return 0;
    }
}

使用实例

 if(findStr(RXBuffer,"OK",200)==0)  //设置不成功
    {
        return 0;      
    }
   if(findStr(RXBuffer,">",200)!=0)
            {
                return 1;
            }else 
            {
                return 0;
            }    
        }else 
        {
            return 0;
        }