各路大神来解释下这段代码,快想疯了。。。
arduino的Stream类中有几个readXXXXXUntil函数,用来进行超时读取,但是这函数的实现方式怎么也想不通啊,纠结了一下午了。。。。。。。。。。
String Stream::readStringUntil(char terminator)
{
String ret;
int c = timedRead();
while (c >= 0 && c != terminator)
{
ret += (char)c;
c = timedRead();
}
return ret;
}
这个方法调用了timedRead()这个函数判断是否超时。问题就出在这个timedRead函数上。
int Stream::timedRead()
{
int c;
_startMillis = millis();
do {
c = read();
if (c >= 0) return c;
} while(millis() - _startMillis < _timeout);
return -1; // -1 indicates timeout
}
protected:
unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read
unsigned long _startMillis;// used for timeout measurement
int timedRead(); // private method to read stream with timeout
int timedPeek(); // private method to peek stream with timeout
这个被反复调用的函数每一次都给_startMillis赋了调用时时间,根本没法实现功能,单独复制出来就没法用,但是调用readStringUntil就是正常的,大家帮我想想。 很明显timeout是针对每个字符的读取时间,而且注释也很清楚
unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read YJ.Cai 发表于 2015-12-7 16:57 static/image/common/back.gif
很明显timeout是针对每个字符的读取时间,而且注释也很清楚
unsigned long _timeout; // number of m ...
厉害厉害,原来是这样,我还以为是什么能颠覆我认知的黑科技。。。
页:
[1]