시리얼 통신 문제(16바이트 이상 수신시 데이터를 분실하는 문제

sann2020의 이미지

시리얼 통신 프로그램을 구현 했습니다.

1. 문제
16바이트 이하를 송수신하는데 송신측과 수신측 아무런 문제가 없습니다.
송신측에서 16바이트 이상을 보내면, 수신측에서 가끔씩 데이터를 잃어버리는 문제가 발생합니다.

2. 프로그램 내용
- 속도 19200bps
- 송신 버퍼 크기 256(char out_buf[256])
- 수신 버퍼 크기 256(char in_buf[256])
- 송수신 주기 1초(송신 1초/수신 1초)

조언을 주시면 고맙겠습니다.

mach의 이미지

sann2020 wrote:
시리얼 통신 프로그램을 구현 했습니다.

1. 문제
16바이트 이하를 송수신하는데 송신측과 수신측 아무런 문제가 없습니다.
송신측에서 16바이트 이상을 보내면, 수신측에서 가끔씩 데이터를 잃어버리는 문제가 발생합니다.

2. 프로그램 내용
- 속도 : 19200bps
- 송신 버퍼 크기 : 256(char out_buf[256])
- 수신 버퍼 크기 : 256(char in_buf[256])
- 송수신 주기 : 1초(송신 1초/수신 1초)

조언을 주시면 고맙겠습니다.

* 시리얼 통신에서는 데이터가 손실될 수 있습니다.(거의 손실된다고 생각하는게 정상) 따라서, 신뢰성있는 통신을 위해서는 ARQ전략등을 고려해야 할것입니다.
* 버퍼 크기는 8비트 마이크로프로세서 등(열악한?)에서 돌리는 것이 아니라면, 좀더 올려주심이 좋을듯합니다. 적어도 4KB, 8KB이상이 좋겠지요?
* 송수신 주기? 이것보다는 전송량을 표현하시는게 좋을듯.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

송지석의 이미지

마이컴으로 하신다면 클럭에 따라 잘되는 속도가 있고 잘 안되는 속도가 있습니다. 데이터쉬트를 참고하셔서 가장 잘 맞는 속도로 해보시는 건 어떨까요?
그리고 16바이트만에 에러가 나는 것은 너무 많이 나는 것 같습니다.

sann2020의 이미지

1.
버퍼의 크기는 4096까지 시험을 했습니다.
크기를 4096까지 키웠는데도 문제는 발생했습니다.
8KB 이상으로 키워서 시험을 해보지는 않았는데, 시험을 해보도록 하겠습니다.

2. 제가 사용하고 있는 시스템은 X86시스템(Pentium850 /128Ram)입니다.

sann2020의 이미지

시험 결과
1. 버퍼를 8KB 이상 잡아도 문제는 동일하게 발생합니다.

2. 질문
- ARQ 정책을 어떻게 사용해야 합니까?

newmania의 이미지

보통 사용하는 UART(16C550) 내부의 H/W FIFO size 가 16 bytes 입니다. 마이컴으로 처리하신다면 수신 인터럽트가 발생할 때 마다 FIFO 에 들어있는 내용을 S/W buffer 로 옮겨야 합니다. 그렇지 않으면 오버런이 발생할 수 있습니다. 리눅스에서도 UART device driver 를 별도로 작성해서 사용할 수 있으며 마이컴에서와 동일한 방법을 써야합니다. 하지만 termios 를 사용하면 신경쓸 일 크게 없습니다. 좋은 하루 되세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.