|
제 짧은 지식으로는 스레드는 안써도 큐는 써야될 것같네요..
답변 감사드립니다..
장성호 님이 쓰신 글 :
: 대충 전달과정을 그려보면
: 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로 넘어가면 안되는게 아닌가해서요.
: :
: : 답변 부탁드리겟습니다.
|