나는 Arduino와 APC220 무선 송수신기를 가지고있다. SoftwareSerial 클래스를 사용하여 APC의 데이터를 읽는 라이브러리를 작성하고 있습니다. 나는 원래 읽을 수있는 데이터가없는 경우에도 i
변수가 증가하기 때문에 seg 오류를 일으키는 아래의 (잘못된) 코드로 시작했습니다. 데이터가 즉시 사용 가능할 때 우연히 작업이 발생한 경우이 기능을 실행하는 데 약 6 밀리 초가 걸렸습니다. i++;
문을 적절한 위치 (바로 위에있는 닫는 중괄호 위)에 넣으면이 함수는 실행하는 데 270 밀리 초가 걸립니다. 이 기능에서는 속도가 매우 중요하므로 시간이 크게 늘어나는 이유에 대해 궁금해합니다. 아래의 코드를 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;
}
'i ++;'가 OK와 NOK로 작동하는 코드에'//'주석을 추가하고 기간에 대한 세부 정보를 추가 할 수 있습니까? –