C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74421] Re:Re:Re:Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ
라스코니 [chouoo] 3672 읽음    2017-06-14 22:18
_STX와 _ETX가 어떤 값인지는 모르겠으나 한개 문자로 보여지는데 그렇다면 충분히 data에 그 값이 들어 있을 수가 있습니다. 그러면 데이터가 받아지지 않고 자꾸 리셋되겠죠. 따라서 정확히 sync를 맞출 수 있는 충분한 길의의 동기 문자열이 와야 합니다.

그리고 아래 코드에서 break를 한 후에 어떤 처리를 하는지 모르겠습니다. 하지만 그 처리를 하고 나서 다시 현재 버퍼에 있는 ch를 받아가지 않는다면 받은 ch 값들이 사라질수가 있습니다.

사실은 정확히 처리를 하고자 하면 UART로부터 온 문자열들은 아래와 같이 rx func() 에서 바로 처리를 하면 안되고 rx_func()는 일종의 ring queue buffer에 넣는 일만 하고, 별도의 처리 프로세스가 그 ring queue buffer를 읽어서 처리를 하도록 해야 합니다.


님이 쓰신 글 :
: 아아 무슨 말씀이신지는 이해 됬어요!
:
: rxchar 에서 rx버퍼에 데이터를 받을때
:
: rx_buf[rx_pt++] = ch;
: if (ch==_STX)
: {
:     rx_buf[0] = ch;
:     rx_pt = 1;
: }
: else if (ch==_ETX)
: {
:     rx_buf[rx_pt++] = '\0';
:     rx_pt = 0;
:     break;
: }
: 이렇게 stx가 들어오면 0에 넣고 1부터 데이터를 받게 했는데
: 한번 어긋나고 나서 정상적인 데이터가 들어오기까지 상당히 시간이 걸리네요
: 초보인데 혼자 하느라 넘 어렵네요ㅜㅜ
:
: 답변 감사드립니다!
:
:
: Intotheblue 님이 쓰신 글 :
: : 그런식으로 처리하며 안된다고요.
: :
: : stx 1 2 3 4 etx
: : 이런게 항상 들어오는게 아니라는 말입니다.
: :
: : stx 1 2
: : 3 4 etx
: :
: : 이런식으로 두번으로 나눠서 수신될경우
: : 두번째 수신 내용에는 님 글처럼 버퍼 0 에 stx 가 없으니 다음으로 넘어가질 않죠
: :
: :  님이 쓰신 글 :
: : : 답변 감사드립니다.
: : :
: : : 음 제가 잘 이해가 안되는데요 ㅜㅜ
: : :
: : : 버퍼0에 stx가 들어오는걸 확인하고 다음으로 넘어가는데
: : :
: : : 정작 stx가 들어오질 안아서 다음으로 넘어가질 않고 있어요.. 그래서 계속 쳌섬에서 걸리기도 하고
: : :
: : :  
: : :
: : : Intotheblue 님이 쓰신 글 :
: : : :
: : : : 통신에서는
: : : : 모든 데이터가 함께 들어온다고 생각해서는 안됩니다.
: : : :
: : : : 따라서 수신 버터의 내용을 또다른 버퍼에 넣고 ..
: : : : 원하는 부분만 짤라서 써야 하고..
: : : : (stx ~ etx 까지 내용만 추출)
: : : :
: : : : 간혹 일부 데이터가 안오거나 ..
: : : : 노이즈 등의 영향으로 변조된 데이터가 들어 오는 경우도 있기 때문에..
: : : :
: : : : 이런 경우에 대한 처리도 들어가야 합니다.
: : : :
: : : : 이지형 님이 쓰신 글 :
: : : : : 안녕하세요 이제 막 C빌더 배우고 있는 신생아 입니다.
: : : : :
: : : : : C빌더6을 사용하고 Cport264 입니다.
: : : : :
: : : : : 제가 마이컴에서 rs232로 데이터를 받아서 스트링 그리드로 데이터 표시하는 프로그램을 만들고 있는데
: : : : :
: : : : : 통신쪽에 문제가 생겨서 질문드려요
: : : : :
: : : : : 마이컴에서 200ms 마다 송신을 하는데 버퍼 맨앞에 stx 보내고'1' 'D' 'A' 'T' 문자열 보내고 그다음 데이터를 보내서
: : : : :
: : : : : 앞에 stx와1 D A T를 확인하고 그다음 버퍼부터 데이터를 스트링 그리드에 표시하게 했는데요
: : : : :
: : : : : 문제는 데스크탑 PC에서는 몇시간동안 해도 잘 되는데
: : : : :
: : : : : 노트북에서 해보니 짧게는 1분 길어도 2~3분만에 스트링 그리드에 표시가 안되더라구요
: : : : :
: : : : : 그래서 데이터 표시가 안될때 rx 버퍼를 확인해보니 수신이 되긴 하는데
: : : : :
: : : : : 버퍼 맨앞에 stx가 아니더라구요..맨앞이 'D' 일때도 있고  '1' 일때도 있고..
: : : : :
: : : : : 포트를 끊었다가 다시 하면 또 되다가 2~3분 후에 똑같은 현상이 나옵니다
: : : : :
: : : : : C빌더에서는 rx char 에서 버퍼에 데이터 받고
: : : : :
: : : : : 타이머를 이용하여 프로세싱 하게 했고 타이머 인터발은 1 입니다.
: : : : :
: : : : : 데스크탑에서는 잘 되는데 노트북에서 저런현상이 나오는게 원인을 잘 모르겠네요 ㅜㅜ
: : : : :
: : : : : 고수님들의 조언 부탁드립니다.
: : : : :
: : : : :

+ -

관련 글 리스트
74413 통신문제 고수님들 도와주세요 ㅜㅜ 이지형 3615 2017/06/14
74417     Re:통신문제 고수님들 도와주세요 ㅜㅜ 라스코니 3696 2017/06/14
74419         Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ 3695 2017/06/14
74414     Re:통신문제 고수님들 도와주세요 ㅜㅜ Intotheblue 3702 2017/06/14
74415         Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ 3498 2017/06/14
74416             Re:Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ Intotheblue 3551 2017/06/14
74418                 Re:Re:Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ 3669 2017/06/14
74421                     Re:Re:Re:Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ 라스코니 3672 2017/06/14
74420                     Re:Re:Re:Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ 송신영 4331 2017/06/14
74436                         Re:Re:Re:Re:Re:Re:통신문제 고수님들 도와주세요 ㅜㅜ 3923 2017/06/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.