|
일반적으로 시리얼 포트는 유선으로 연결되어 있을 경우 노이즈가 거의 안들어 오는데
지속적으로 노이즈가 들어 온다면 혹시 무선 데이타를 받는 것인지요?
유선으로 데이타를 받는다면 ComPort1->ReadStr(Str,Count); 이 문구를 써도 문제가
없겠지만 만일 무선을 쓴다면 이런 구문은 좀 위험합니다.
만일 무선 데이타를 받는 것이라면 1바이트씩 받아서 처리하는 방법을 써야 합니다.
일반적으로 무선의 경우 Header 데이타를 가지고 있는데 1바이트씩 처리하면서 헤더 값이
검출 되면 그때 부터 데이타를 버퍼에 저장을 하여야 합니다.
이런경우 일반적으로 버퍼는 링 버퍼 형태를 많이 쓰죠..
그리고 데이타를 받는 부분과 받은 데이타를 처리하는 부분을 나누어서 별도의 쓰레드에서 처리하는
것이 좋을 겁니다. 무선의 경우 계속해서 데이타가 들어오기 때문에 들어 오는 데이타 처리하랴
받은 데이타 처리하랴 좀 바쁠 겁니다. 이럴땐 일을 분담해서 해야 겠죠...
하지만 유선인데도 노이즈가 들어 온다면 그건 선로상에 문제가 있는 경우가 오히려 높을 겁니다.
아니면 데이타가 전송중에 깨지던가 그렇겠죠,, 이럴땐 에러 검출을 해서 데이타를
구분해서 써야 하겠죠,.
시리얼 통신에서 에러 처리는 CRC 를 많이 씁니다.
|