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
[53935] Re:Re:한가지 더 궁금한게 있습니다.
조각발 [jokacbal] 1219 읽음    2008-07-15 10:14
제 짧은 지식으로는 스레드는 안써도 큐는 써야될 것같네요..
답변 감사드립니다..

장성호 님이 쓰신 글 :
: 대충 전달과정을 그려보면
: sw1-device Driver-serial port - line   .......    line - serial port - device driver - sw2
:
: sw1에서 tx를 하면  그게 바로 sw2까지 가는게 아닙니다.
: DeviceDirver 에서 받죠 그다음은 DeviceDirver 에서 처리합니다.
: sw에서는 DeviceDirver 까지만 가고 보내고 return 됩니다.
:
: 그러니 님께서 원하시는데로 이벤트가 발생하지 않습니다.
:
: sw1에서 한번에 100Byte를 보내도  수신쪽에서는 두번,세번에 걸쳐서 받을수 있습니다.
: 님처럼 5번에 걸쳐서 보내도 5번이 아니라 1~2번 안에 모두 수신할 수도 있습니다.
:
: 송신 pc의 SerialPort와  수신PC의 SerialPort가  다이렉트로 연결되어있다 하더라도
: 수신이벤트는 천자만별  만약 중간에 모뎀이 있거나 하면 더욱 이상하게 되죠
:
: ------------------------------------------------
: 그리고 님의 말씀대로 sw1에서 tx중에는 rx하지 못할것입니다.
:
: tx중간에 들어온것이 있다하더라도
: tx가 끝나고 난뒤에 rx이벤트가 뜰것입니다.
:
: ------------------------------------------------
:
: 대충 아래와 같은식으로 하면  tx와 rx가 순차적으로 일어날것입니다.
: 옛날에 쓰던 XModem식 프로토콜로 해야 한다는겁니다.
:
:
: SW1.전송함수
: {
:     do
:     {
:       1. ComPort 전송(데이타)
:       2. ComPort 수신체크(잘받았다.)
:      
:     }while(!전송끝)
:          
: }
:
: SW2.OnRxChar
: {
:     Rx..
:     AllRxCount +=  RxCount
:     if(AllRxCount==단위Size)
:     {
:          AllRxCount=0;
:          ComPort 전송-잘받았다.
:          기타 처리..
:     }
: }
:
: XModem을 쓰라는 얘기가 아닙니다.
:
: 그럼..
:
:
: 조각발 님이 쓰신 글 :
: : Break Point 써서 확인도 안되고 해서 다시 질문 드립니다.
: : 다음과 같은 경우에요..
: : *********************************************************************
: : 프로그램 1
: : A 함수
: : {
: :          ComPort->Write( szData1 , Count );  // szData들은 5바이트고요
: :          ComPort->Write( szData2 , Count ); 
: :          ComPort->Write( szData3 , Count ); 
: :          ComPort->Write( szData4 , Count ); 
: :          ComPort->Write( szData5 , Count ); 
: : }
: : OnRxChar 함수
: : {
: :          ComPort->Read( szRead , Count ); // 받아서
: :          .....................                                  // 데이터 처리를 합니다
: : }
: : *********************************************************************
: :
: : *********************************************************************
: : 프로그램 2  - ComPort 에서 받은 데이터를 그대루 다시 보내줍니다.
: : OnRxChar 함수
: : {
: :          ComPort->Read( szRead, Count );
: :          ComPort->Write( szRead, Count);
: : }
: : *********************************************************************
: :
: : 프로그램 1 과 2 를 시리얼로 연결시키고 테스트를 했는데.. 궁금한건요..
: :
: : 프로그램 1에서 ComPort->Write 를 연속으로 보내지요.. 헌데 프로그램 2는 받은 즉시
: : 프로그램 1로 다시 보내니깐,
: :
: : 순서로 보면
: :
: : 1         ComPort->Write( szData1 , Count );
: : 2         프로그램 2의 OnRxChar
: : 3         ComPort->Write( szData2 , Count ); 
: : 4         프로그램 2의 OnRxChar
: : 5         ComPort->Write( szData3 , Count ); 
: : 6         프로그램 2의 OnRxChar
: : 7         ComPort->Write( szData4 , Count ); 
: : 8         프로그램 2의 OnRxChar
: : 9         ComPort->Write( szData5 , Count ); 
: : 10       프로그램 2의 OnRxChar
: : 11       프로그램 1의 OnRxChar
: :
: : 제 생각은 이런식으루 되는게 아닐까 싶어서요..
: : 다른 인터럽트나 스레드 같은건 안돌리니깐 프로그램 1의 A함수가 다 처리되야 다른 놈으로 넘어가니깐..
: : 제 생각대로 된다면 프로그램 1의 OnRxChar에서 받을 수 있는건 어떻게 되는지..
: : szData5 만 받을수 잇는건지..
: : 아니면 Count 가 25가 되어.. szData1 ~ 5를 통채로 받는건지..
: : 이게 궁금했거든요..
: :
: : 근데 이렇게 순서가 안되는거 같아요, 데이터 처리에서 각 데이터를 처리가 되더라구요
: : ComPort의 OnRxChar이 언제 활성화 되는건가요?
: : 프로그램 1의 A함수 도중에 데이터가 수신된다고 해서 OnRxChar로 넘어가면 안되는게 아닌가해서요.
: :
: : 답변 부탁드리겟습니다.

+ -

관련 글 리스트
53918 Comport 수신할 때 데이터길이가 일정치 않게 들어올때..?? 조각발 1112 2008/07/14
53919     Re:Comport 수신할 때 데이터길이가 일정치 않게 들어올때..?? 장성호 2637 2008/07/14
53927         한가지 더 궁금한게 있습니다. 조각발 1556 2008/07/14
53929             Re:한가지 더 궁금한게 있습니다. 장성호 1265 2008/07/14
53935                 Re:Re:한가지 더 궁금한게 있습니다. 조각발 1219 2008/07/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.