|
답변 감사드립니다.
제가 쓰레드를 언급한 이유는 데이터를 못받는 이유가 타이밍때문, 데이터를 다 받아서 처리하기 전에
새로운 데이터가 들어와서 DebugPortRxChar가 호출되는 현상이 아닐까 하는 생각때문이었고요
말씀하신바에 따르면 count값이 들어오는 데이터 타입의 갯수 인가요?
그렇다면 아래와 같이 해보았는데요.. count값이 죄다 0으로만 찍히고 있습니다. ㅜ.ㅜ 따라서 if문은 항상 false
if(count == 6)
{
memset(&rcv[0], 0, sizeof(rcv));
DebugPort->Read((void *)&rcv[0], Count);
sscanf(&rcv[0],"%f%f%f%f%f%f",&data[0],&data[1],&data[2],&data[3],&data[4],&data[5]);
}
else
Memo->SelText = count;
송신보드의 소스는
sprintf(buf,"%f %f %f %f %f %f",phi,theta,psi,gx,gy,gz);
일반 에뮬레이터로 출력한 데이터 스샷을 첨부합니다.
망치 님이 쓰신 글 :
: 데이터를 수신하는데 있어 쓰레드는 별개의 문제인거 같군요.
:
: 문의하신 소스만 보았을때는 문제가 있는거 같습니다.
: Count가 리턴되는데 sscanf에서는 무조건 0~5까지 배열값을 뿌리게 되어있군요.
: 실질적으로 6바이트가 안들어올수 있는데요.
:
: 만일 Count=2값이 되었을때 0,1 배열값을 뺀 나머지는 쓰레기값으로 뿌려지겠군요...
:
: 이 시점에서 쓰레드를 쓸것인가를 고민하게 되는데
: 만약 6바이트만 들어온다고 보았을때 이 6바이트가 최대 타임아웃이 얼마냐에 따라
: 쓰레드 사용 결정을 할수 있겠네요. 왜냐하면 그 시간동안 데이터가 들어오는거 확인하는동안 다른걸 못하기 때문인거죠.
:
: 타임아웃이 만약 1초로 되어있다면 1초동안 계속적으로 Read하고 6개가 다 받아졌을때 그 루틴을 빠져나오면 되겠네요...
:
: 정확하게 사용하는 프로토콜등을 모르니 여기까지....
:
: 프로바라기 님이 쓰신 글 :
: : rs232방식으로 보드와 통신을 하는중인데요...
: : 일반 다운로드한 프로그램들은 데이터를 잘만 받는데
: : 제가 만든 프로그램에서는 데이터가 앞부분만 들어온다던지 하는 등의
: : 정상적인 데이터를 받을 수 가 없네요..
: :
: : DebugPortRxChar(TObject *Sender, int Count) 함수내에서
: :
: : DebugPort->Read((void *)&rcv[0], Count);으로 데이터를 받고
: : sscanf(&rcv[0],"%f%f%f%f%f%f",&data[0],&data[1],&data[2],&data[3],&data[4],&data[5]);
: : 으로 데이터를 변환 추출하고 있는데 쓰레기 값도 많이 들어오고 놓치는 데이터도 많고요
: : 조언좀 부탁드립니다.
|