查找指定字符串函数;
该函数的核心是使用在标准 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;
}