|
흠....DebugPort->Read 인자에 Count는 최대 읽어낼 갯수가 아닐까 다시 한번 생각합니다.
그래서 보통 1024, 4096 저는 이런식으로 최대 숫자를 넣고,
Read에서 리턴되는 값을 버퍼에 복사합니다.
저의 개인적인 상식으로 풀어쓰면
time.start
while(1)
{
int size = Read(버퍼, 1024);
for(size만큼) 버퍼에 복사
if( 프로토콜 마지막인가?) break;
if(time.pending > timeout)
{
타임아웃으로 break.
}
}
if( 정상 데이터 저장 이면) 데이터 뿌리고
else if( 타임아웃 이면) 타임아웃 뿌리고...
=> 위 경우는 프로토콜의 경우이고, time은 그냥 예를 들기 위해 임의로 넣은거니 실제에서는 다른것으로 바꾸셔야 합니다.
로직을 설명하기 위한거니까요.
=> 그냥 디버그 용도로만 뿌리고 싶다면
타이머 이벤트
{
타이머 disable;
int size = Read(버퍼, 1024);
for(size만큼) 메모장에 뿌리고...
타이머 enable;
}
간만에 답변 달려니 ...으
프로바라기 님이 쓰신 글 :
: 답변 감사드립니다.
: 제가 쓰레드를 언급한 이유는 데이터를 못받는 이유가 타이밍때문, 데이터를 다 받아서 처리하기 전에
: 새로운 데이터가 들어와서 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]);
: : : 으로 데이터를 변환 추출하고 있는데 쓰레기 값도 많이 들어오고 놓치는 데이터도 많고요
: : : 조언좀 부탁드립니다.
|