시리얼 통신 문제(16바이트 이상 수신시 데이터를 분실하는 문제
글쓴이: sann2020 / 작성시간: 금, 2004/06/11 - 4:25오후
시리얼 통신 프로그램을 구현 했습니다.
1. 문제
16바이트 이하를 송수신하는데 송신측과 수신측 아무런 문제가 없습니다.
송신측에서 16바이트 이상을 보내면, 수신측에서 가끔씩 데이터를 잃어버리는 문제가 발생합니다.
2. 프로그램 내용
- 속도 19200bps
- 송신 버퍼 크기 256(char out_buf[256])
- 수신 버퍼 크기 256(char in_buf[256])
- 송수신 주기 1초(송신 1초/수신 1초)
조언을 주시면 고맙겠습니다.
Forums:
Re: 시리얼 통신 문제(16바이트 이상 수신시 데이터를 분실하는
* 시리얼 통신에서는 데이터가 손실될 수 있습니다.(거의 손실된다고 생각하는게 정상) 따라서, 신뢰성있는 통신을 위해서는 ARQ전략등을 고려해야 할것입니다.
* 버퍼 크기는 8비트 마이크로프로세서 등(열악한?)에서 돌리는 것이 아니라면, 좀더 올려주심이 좋을듯합니다. 적어도 4KB, 8KB이상이 좋겠지요?
* 송수신 주기? 이것보다는 전송량을 표현하시는게 좋을듯.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
마이컴으로 하신다면 클럭에 따라 잘되는 속도가 있고 잘 안되는 속도가 있
마이컴으로 하신다면 클럭에 따라 잘되는 속도가 있고 잘 안되는 속도가 있습니다. 데이터쉬트를 참고하셔서 가장 잘 맞는 속도로 해보시는 건 어떨까요?
그리고 16바이트만에 에러가 나는 것은 너무 많이 나는 것 같습니다.
rommance.net
1. 버퍼의 크기는 4096까지 시험을 했습니다. 크기를 4096
1.
버퍼의 크기는 4096까지 시험을 했습니다.
크기를 4096까지 키웠는데도 문제는 발생했습니다.
8KB 이상으로 키워서 시험을 해보지는 않았는데, 시험을 해보도록 하겠습니다.
2. 제가 사용하고 있는 시스템은 X86시스템(Pentium850 /128Ram)입니다.
시험 결과 1. 버퍼를 8KB 이상 잡아도 문제는 동일하게 발생합니다
시험 결과
1. 버퍼를 8KB 이상 잡아도 문제는 동일하게 발생합니다.
2. 질문
- ARQ 정책을 어떻게 사용해야 합니까?
보통 사용하는 UART(16C550) 내부의 H/W FIFO size 가
보통 사용하는 UART(16C550) 내부의 H/W FIFO size 가 16 bytes 입니다. 마이컴으로 처리하신다면 수신 인터럽트가 발생할 때 마다 FIFO 에 들어있는 내용을 S/W buffer 로 옮겨야 합니다. 그렇지 않으면 오버런이 발생할 수 있습니다. 리눅스에서도 UART device driver 를 별도로 작성해서 사용할 수 있으며 마이컴에서와 동일한 방법을 써야합니다. 하지만 termios 를 사용하면 신경쓸 일 크게 없습니다. 좋은 하루 되세요.
댓글 달기