我有一个Arduino和一个APC220无线收发器。我正在编写一个使用SoftwareSerial类从APC读入数据的库。我最初从下面的(不正确)代码开始,导致seg错误,因为即使没有可读取的数据,i
变量也会增加。在偶然发生的情况下(数据立即可用),该功能需要约6毫秒才能执行。当我将i++;
语句放在适当的位置(紧挨在它上面的右大括号的上方)时,该函数需要270 ms才能运行。速度对于这个功能来说至关重要,所以我很想知道这个语句的位置是如何引起如此大幅增加的。Arduino函数执行时间
对于下面的代码,buff
被声明为char buff[10];
和sSerial是SoftwareSerial
unsigned long updateLocation(Marker* marker) {
this->sSerial->print('~');
//initiate request from vision system
this->sSerial->flush();
this->sSerial->print('#');
this->sSerial->print(marker->num);
this->sSerial->print('*');
this->sSerial->flush();
unsigned long start = millis();
int state = 0, i = 0;
while((millis() - start) < 600) {
if(this->sSerial->available()) {
buff[i] = this->sSerial->read();
if(buff[i] == ',') {
buff[i] = 0;
switch(state) {
case 0:
i = -1;
state++;
break;
case 1:
marker->x = atof(buff);
i = -1;
state++;
break;
case 2:
marker->y = atof(buff);
i = -1;
state++;
break;
case 3:
marker->theta = atof(buff);
i = -1;
return (millis() - start);
break;
default:
return 0;
break;
}
}
// Correct location for i++; takes 270 ms to execute
}
// Incorrect location for i++; Takes 6 ms to execute
i++;
}
this->sSerial->print('~');
this->sSerial->flush();
return 0;
}
请你可以添加一些意见''//在你的代码中'我++;'正在OK和NOK并添加有关持续时间的详细信息。 –