|
데이터를 수신하는데 있어 쓰레드는 별개의 문제인거 같군요.
문의하신 소스만 보았을때는 문제가 있는거 같습니다.
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]);
: 으로 데이터를 변환 추출하고 있는데 쓰레기 값도 많이 들어오고 놓치는 데이터도 많고요
: 조언좀 부탁드립니다.
|